summaryrefslogtreecommitdiffstats
path: root/docs/sqlglot
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-05-10 06:44:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-05-10 06:44:58 +0000
commitbeba715b97dd2349e01dde9b077d2535680ebdca (patch)
tree0c54accb48c28eb54d2f48f88d149492717b30e5 /docs/sqlglot
parentReleasing debian version 11.7.1-1. (diff)
downloadsqlglot-beba715b97dd2349e01dde9b077d2535680ebdca.tar.xz
sqlglot-beba715b97dd2349e01dde9b077d2535680ebdca.zip
Merging upstream version 12.2.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'docs/sqlglot')
-rw-r--r--docs/sqlglot/dataframe/sql.html38
-rw-r--r--docs/sqlglot/dialects.html14
-rw-r--r--docs/sqlglot/dialects/bigquery.html1425
-rw-r--r--docs/sqlglot/dialects/clickhouse.html3
-rw-r--r--docs/sqlglot/dialects/databricks.html92
-rw-r--r--docs/sqlglot/dialects/dialect.html1727
-rw-r--r--docs/sqlglot/dialects/drill.html102
-rw-r--r--docs/sqlglot/dialects/duckdb.html1057
-rw-r--r--docs/sqlglot/dialects/hive.html1497
-rw-r--r--docs/sqlglot/dialects/mysql.html554
-rw-r--r--docs/sqlglot/dialects/oracle.html848
-rw-r--r--docs/sqlglot/dialects/postgres.html1372
-rw-r--r--docs/sqlglot/dialects/presto.html986
-rw-r--r--docs/sqlglot/dialects/redshift.html75
-rw-r--r--docs/sqlglot/dialects/snowflake.html776
-rw-r--r--docs/sqlglot/dialects/spark.html740
-rw-r--r--docs/sqlglot/dialects/spark2.html1271
-rw-r--r--docs/sqlglot/dialects/sqlite.html601
-rw-r--r--docs/sqlglot/dialects/starrocks.html60
-rw-r--r--docs/sqlglot/dialects/tableau.html78
-rw-r--r--docs/sqlglot/dialects/teradata.html244
-rw-r--r--docs/sqlglot/dialects/trino.html3
-rw-r--r--docs/sqlglot/dialects/tsql.html304
-rw-r--r--docs/sqlglot/executor/python.html3
-rw-r--r--docs/sqlglot/expressions.html19809
-rw-r--r--docs/sqlglot/generator.html5938
-rw-r--r--docs/sqlglot/lineage.html2
-rw-r--r--docs/sqlglot/optimizer/annotate_types.html8
-rw-r--r--docs/sqlglot/optimizer/eliminate_joins.html4
-rw-r--r--docs/sqlglot/optimizer/expand_laterals.html8
-rw-r--r--docs/sqlglot/optimizer/normalize.html20
-rw-r--r--docs/sqlglot/optimizer/optimizer.html248
-rw-r--r--docs/sqlglot/optimizer/qualify_columns.html1469
-rw-r--r--docs/sqlglot/optimizer/simplify.html1366
-rw-r--r--docs/sqlglot/parser.html16436
-rw-r--r--docs/sqlglot/tokens.html3788
-rw-r--r--docs/sqlglot/transforms.html504
37 files changed, 33490 insertions, 29980 deletions
diff --git a/docs/sqlglot/dataframe/sql.html b/docs/sqlglot/dataframe/sql.html
index a9a7f9d..81a145b 100644
--- a/docs/sqlglot/dataframe/sql.html
+++ b/docs/sqlglot/dataframe/sql.html
@@ -608,7 +608,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;140377708850400&#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;140377708850400&#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;140377708766032&#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">sqlglot.dataframe.sql.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;140482330521808&#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;140482330521808&#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;140482330535600&#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">sqlglot.dataframe.sql.DataFrame</a></span>:</span></span>
<label class="view-source-button" for="SparkSession.createDataFrame-view-source"><span>View Source</span></label>
@@ -1513,7 +1513,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;140377712280432&#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;140377711871072&#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;140482335596384&#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;140482335520656&#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>
@@ -2288,7 +2288,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;140377707652544&#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">sqlglot.dataframe.sql.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;140482330974848&#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">sqlglot.dataframe.sql.DataFrame</a></span>:</span></span>
<label class="view-source-button" for="DataFrame.fillna-view-source"><span>View Source</span></label>
@@ -2357,7 +2357,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;140377707950480&#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;140377707950480&#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">sqlglot.dataframe.sql.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;140482330012992&#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;140482330012992&#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">sqlglot.dataframe.sql.DataFrame</a></span>:</span></span>
<label class="view-source-button" for="DataFrame.replace-view-source"><span>View Source</span></label>
@@ -2562,7 +2562,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;140377708152048&#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;140377708084144&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">sqlglot.dataframe.sql.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;140482329596336&#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;140482329655376&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#DataFrame">sqlglot.dataframe.sql.DataFrame</a></span>:</span></span>
<label class="view-source-button" for="DataFrame.repartition-view-source"><span>View Source</span></label>
@@ -3230,7 +3230,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;140377710043744&#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;140482331597488&#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>
@@ -3258,7 +3258,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;140377708259664&#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></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;140482329703328&#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></span>
<label class="view-source-button" for="Column.ensure_col-view-source"><span>View Source</span></label>
@@ -3279,7 +3279,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;140377708547664&#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">sqlglot.dataframe.sql.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;140482330200576&#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">sqlglot.dataframe.sql.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>
@@ -3300,7 +3300,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;140377708420048&#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;140377708523584&#39;</span><span class="o">&gt;</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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;140482329857520&#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;140482329881584&#39;</span><span class="o">&gt;</span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.Column</a></span>:</span></span>
<label class="view-source-button" for="Column.invoke_anonymous_function-view-source"><span>View Source</span></label>
@@ -3327,7 +3327,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;140377708376176&#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">sqlglot.dataframe.sql.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;140482329799712&#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">sqlglot.dataframe.sql.Column</a></span>:</span></span>
<label class="view-source-button" for="Column.invoke_expression_over_column-view-source"><span>View Source</span></label>
@@ -3364,7 +3364,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;140377706598112&#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">sqlglot.dataframe.sql.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;140482329769152&#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">sqlglot.dataframe.sql.Column</a></span>:</span></span>
<label class="view-source-button" for="Column.binary_op-view-source"><span>View Source</span></label>
@@ -3385,7 +3385,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;140377706608240&#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">sqlglot.dataframe.sql.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;140482329759984&#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">sqlglot.dataframe.sql.Column</a></span>:</span></span>
<label class="view-source-button" for="Column.inverse_binary_op-view-source"><span>View Source</span></label>
@@ -3895,7 +3895,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;140377706743696&#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;140377706743696&#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;140482330346256&#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;140482330346256&#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>
@@ -3916,7 +3916,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;140377706814464&#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;140377706852560&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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;140482328352688&#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;140482328407168&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.Column</a></span>:</span></span>
<label class="view-source-button" for="Column.between-view-source"><span>View Source</span></label>
@@ -3951,7 +3951,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;140377706910272&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.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;140482328481264&#39;</span><span class="o">&gt;</span></span><span class="return-annotation">) -> <span class="n"><a href="#Column">sqlglot.dataframe.sql.Column</a></span>:</span></span>
<label class="view-source-button" for="Column.over-view-source"><span>View Source</span></label>
@@ -4149,7 +4149,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;140377707221328&#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;140377707221328&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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;140482328980416&#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;140482328980416&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.WindowSpec</a></span>:</span></span>
<label class="view-source-button" for="Window.partitionBy-view-source"><span>View Source</span></label>
@@ -4170,7 +4170,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;140377707360368&#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;140377707360368&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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;140482328995408&#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;140482328995408&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.WindowSpec</a></span>:</span></span>
<label class="view-source-button" for="Window.orderBy-view-source"><span>View Source</span></label>
@@ -4395,7 +4395,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;140377707291568&#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;140377707291568&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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;140482328591472&#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;140482328591472&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.WindowSpec</a></span>:</span></span>
<label class="view-source-button" for="WindowSpec.partitionBy-view-source"><span>View Source</span></label>
@@ -4422,7 +4422,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;140377707161408&#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;140377707161408&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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;140482328640480&#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;140482328640480&#39;</span><span class="o">&gt;</span><span class="p">]]</span></span><span class="return-annotation">) -> <span class="n"><a href="#WindowSpec">sqlglot.dataframe.sql.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.html b/docs/sqlglot/dialects.html
index 5777d08..18e5dea 100644
--- a/docs/sqlglot/dialects.html
+++ b/docs/sqlglot/dialects.html
@@ -48,6 +48,7 @@
<li><a href="dialects/redshift.html">redshift</a></li>
<li><a href="dialects/snowflake.html">snowflake</a></li>
<li><a href="dialects/spark.html">spark</a></li>
+ <li><a href="dialects/spark2.html">spark2</a></li>
<li><a href="dialects/sqlite.html">sqlite</a></li>
<li><a href="dialects/starrocks.html">starrocks</a></li>
<li><a href="dialects/tableau.html">tableau</a></li>
@@ -204,12 +205,13 @@ logic for some expressions; this is usually done by adding new entries to the <c
</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.redshift</span> <span class="kn">import</span> <span class="n">Redshift</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.snowflake</span> <span class="kn">import</span> <span class="n">Snowflake</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.spark</span> <span class="kn">import</span> <span class="n">Spark</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.sqlite</span> <span class="kn">import</span> <span class="n">SQLite</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.starrocks</span> <span class="kn">import</span> <span class="n">StarRocks</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.tableau</span> <span class="kn">import</span> <span class="n">Tableau</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.teradata</span> <span class="kn">import</span> <span class="n">Teradata</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.trino</span> <span class="kn">import</span> <span class="n">Trino</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.tsql</span> <span class="kn">import</span> <span class="n">TSQL</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.spark2</span> <span class="kn">import</span> <span class="n">Spark2</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.sqlite</span> <span class="kn">import</span> <span class="n">SQLite</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.starrocks</span> <span class="kn">import</span> <span class="n">StarRocks</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.tableau</span> <span class="kn">import</span> <span class="n">Tableau</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.teradata</span> <span class="kn">import</span> <span class="n">Teradata</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.trino</span> <span class="kn">import</span> <span class="n">Trino</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos">79</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.tsql</span> <span class="kn">import</span> <span class="n">TSQL</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/bigquery.html b/docs/sqlglot/dialects/bigquery.html
index 761adb6..47969bb 100644
--- a/docs/sqlglot/dialects/bigquery.html
+++ b/docs/sqlglot/dialects/bigquery.html
@@ -69,6 +69,9 @@
<li>
<a class="function" href="#BigQuery.Generator.intersect_op">intersect_op</a>
</li>
+ <li>
+ <a class="function" href="#BigQuery.Generator.with_properties">with_properties</a>
+ </li>
</ul>
</li>
@@ -139,277 +142,294 @@
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="k">def</span> <span class="nf">_derived_table_values_to_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</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">unnest</span><span class="p">()</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-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">remove_precision_parameterized_types</span><span class="p">(</span><span class="n">expression</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="bp">self</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</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">Tuple</span><span class="p">)]</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">structs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <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">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 class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;columns&quot;</span><span class="p">])</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="p">]</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="n">structs</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">Struct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">aliases</span><span class="p">))</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">unnest_exp</span> <span class="o">=</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="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">structs</span><span class="p">)])</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">unnest_exp</span><span class="p">)</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">structs</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">(</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="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><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <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><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="n">t</span><span class="o">.</span><span class="n">expressions</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;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;columns&quot;</span><span class="p">]</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="p">)</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="p">]</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="p">)</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">for</span> <span class="n">t</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">Tuple</span><span class="p">)</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="p">]</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a><span class="k">def</span> <span class="nf">_returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</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-58"><a href="#L-58"><span class="linenos"> 58</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">Schema</span><span class="p">):</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</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="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"> &lt;</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">this</span><span class="p">)</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">this</span> <span 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-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&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><span id="L-65"><a href="#L-65"><span class="linenos"> 65</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">generator</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">Create</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">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-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">returns</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">ReturnsProperty</span><span class="p">)</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FUNCTION&quot;</span> <span class="ow">and</span> <span class="n">returns</span> <span class="ow">and</span> <span class="n">returns</span><span class="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_table&quot;</span><span class="p">):</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">expression</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="s2">&quot;TABLE FUNCTION&quot;</span><span class="p">)</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="p">(</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">),</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="n">expression</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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-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="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_sql</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="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">structs</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><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="k">def</span> <span class="nf">_returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</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-61"><a href="#L-61"><span class="linenos"> 61</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">Schema</span><span class="p">):</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</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="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"> &lt;</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">this</span><span class="p">)</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">this</span> <span 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-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&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><span id="L-68"><a href="#L-68"><span class="linenos"> 68</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">generator</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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">returns</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">ReturnsProperty</span><span class="p">)</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FUNCTION&quot;</span> <span class="ow">and</span> <span class="n">returns</span> <span class="ow">and</span> <span class="n">returns</span><span class="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_table&quot;</span><span class="p">):</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">expression</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="s2">&quot;TABLE FUNCTION&quot;</span><span class="p">)</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">(</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="p">),</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="p">):</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">expression</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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="k">def</span> <span class="nf">_unqualify_unnest</span><span 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-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove references to unnest table aliases since bigquery doesn&#39;t allow them.</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> These are added by the optimizer&#39;s qualify_column step.</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</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">Select</span><span class="p">):</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">unnests</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">unnest</span><span class="o">.</span><span class="n">alias</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">for</span> <span class="n">unnest</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;from&quot;</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">expressions</span><span class="o">=</span><span class="p">[]))</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="nb">isinstance</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="ow">and</span> <span class="n">unnest</span><span class="o">.</span><span class="n">alias</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <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">if</span> <span class="n">unnests</span><span class="p">:</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</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-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="k">def</span> <span class="nf">_unqualify_unnest</span><span 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-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove references to unnest table aliases since bigquery doesn&#39;t allow them.</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="sd"> These are added by the optimizer&#39;s qualify_column step.</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</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">Select</span><span class="p">):</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">unnests</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">unnest</span><span class="o">.</span><span class="n">alias</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">for</span> <span class="n">unnest</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;from&quot;</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">expressions</span><span class="o">=</span><span class="p">[]))</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="nb">isinstance</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="ow">and</span> <span class="n">unnest</span><span class="o">.</span><span class="n">alias</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">for</span> <span class="n">select</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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">select</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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">unnests</span><span class="p">:</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="kc">None</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="k">return</span> <span class="n">expression</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">if</span> <span class="n">unnests</span><span class="p">:</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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-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">for</span> <span class="n">select</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-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">select</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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="ow">in</span> <span class="n">unnests</span><span class="p">:</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="kc">None</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">class</span> <span class="nc">BigQuery</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">unnest_column_only</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="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="s2">&quot;%m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="s2">&quot;%y&quot;</span><span class="p">:</span> <span class="s2">&quot;%-y&quot;</span><span class="p">,</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="s2">&quot;%H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="s2">&quot;%I&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="s2">&quot;%S&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="s2">&quot;%j&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</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><span id="L-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">quote</span><span class="p">,</span> <span class="n">quote</span><span class="p">)</span> <span class="k">if</span> <span class="n">prefix</span> <span class="k">else</span> <span class="n">quote</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;&#39;&#39;&#39;&quot;</span><span class="p">]</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <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;r&quot;</span><span class="p">,</span> <span class="s2">&quot;R&quot;</span><span class="p">]</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="p">]</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="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="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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</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><span id="L-130"><a href="#L-130"><span class="linenos">130</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-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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="s2">&quot;ANY TYPE&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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;CURRENT_DATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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-143"><a href="#L-143"><span class="linenos">143</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">NULL</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 class="n">KEYWORDS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</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">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-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</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="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</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">FUNCTIONS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">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="o">.</span><span class="n">name</span><span class="p">),</span> <span class="c1"># type: ignore</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="p">),</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">&quot;DATETIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">),</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;DIV&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">IntDiv</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">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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">&quot;REGEXP_CONTAINS&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-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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">RegexpExtract</span><span class="p">(</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">occurrence</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">3</span><span class="p">),</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">group</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">1</span><span class="p">)</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="nb">str</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 class="o">.</span><span class="n">groups</span> <span class="o">==</span> <span class="mi">1</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">else</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="p">),</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;TIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">),</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;TIMESTAMP_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">),</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;DATE_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;DATETIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">),</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">&quot;TIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">),</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">&quot;TIMESTAMP_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">),</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&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">StrToTime</span><span class="p">(</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="nb">format</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-180"><a href="#L-180"><span class="linenos">180</span></a> <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">FUNCTION_PARSERS</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">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 class="c1"># type: ignore</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="s2">&quot;ARRAY&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">Array</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_statement</span><span class="p">()]),</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="p">}</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</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;TRIM&quot;</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="n">NO_PAREN_FUNCTIONS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDatetime</span><span class="p">,</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="p">}</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</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">NESTED_TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="p">}</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">ID_VAR_TOKENS</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="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</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 class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</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 class="c1"># type: ignore</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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><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">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">)</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <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="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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">REMOVE_PRECISION_PARAMETERIZED_TYPES</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="s2">&quot;TIMESTAMP&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;DATETIME&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;zone&quot;</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><span id="L-225"><a href="#L-225"><span class="linenos">225</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</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="sa">f</span><span class="s2">&quot;DATE_DIFF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">, </span><span class="si">{</span><span 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">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="s1">&#39;DAY&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</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">func</span><span class="p">(</span><span class="s2">&quot;DATE_TRUNC&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">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</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;STRING_AGG&quot;</span><span class="p">),</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">),</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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">_unqualify_unnest</span><span class="p">]),</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARSE_TIMESTAMP(</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;bigquery&quot;</span><span class="p">),</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">:</span> <span class="n">_derived_table_values_to_unnest</span><span class="p">,</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">_returnsproperty_sql</span><span class="p">,</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="sa">f</span><span class="s2">&quot;TRIM&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><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span 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;DETERMINISTIC&quot;</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;IMMUTABLE&quot;</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</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_CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <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">TYPE_MAPPING</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">exp</span><span 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-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
-</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">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-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">exp</span><span 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-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">exp</span><span 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;FLOAT64&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">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;INT64&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">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;STRING&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">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;STRING&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">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;INT64&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">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-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">exp</span><span 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-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">exp</span><span 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;INT64&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">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-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;ANY TYPE&quot;</span><span class="p">,</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="p">}</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="n">first_arg</span> <span class="o">=</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><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">first_arg</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-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="k">return</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">wrap</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">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</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="k">return</span> <span class="n">inline_array_sql</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-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="k">def</span> <span class="nf">transaction_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-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&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="k">def</span> <span class="nf">commit_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-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</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">rollback_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-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</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="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">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-302"><a href="#L-302"><span class="linenos">302</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><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a><span class="k">class</span> <span class="nc">BigQuery</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">unnest_column_only</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="s2">&quot;%m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="s2">&quot;%y&quot;</span><span class="p">:</span> <span class="s2">&quot;%-y&quot;</span><span class="p">,</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="s2">&quot;%H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="s2">&quot;%I&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="s2">&quot;%S&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="s2">&quot;%j&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</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><span id="L-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">quote</span><span class="p">,</span> <span class="n">quote</span><span class="p">)</span> <span class="k">if</span> <span class="n">prefix</span> <span class="k">else</span> <span class="n">quote</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;&#39;&#39;&#39;&quot;</span><span class="p">]</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <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;r&quot;</span><span class="p">,</span> <span class="s2">&quot;R&quot;</span><span class="p">]</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="p">]</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span 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="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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">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><span id="L-133"><a href="#L-133"><span class="linenos">133</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-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="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;ANY TYPE&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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="s2">&quot;CURRENT_DATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">&quot;BYTES&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-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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-147"><a href="#L-147"><span class="linenos">147</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">NULL</span><span class="p">,</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="p">}</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">KEYWORDS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">)</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">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-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</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">LOG_BASE_FIRST</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="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</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">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">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="o">.</span><span class="n">name</span><span class="p">),</span> <span class="c1"># type: ignore</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="p">),</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">&quot;DATETIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">),</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;DIV&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">IntDiv</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">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-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">&quot;REGEXP_CONTAINS&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-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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">RegexpExtract</span><span class="p">(</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">occurrence</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">3</span><span class="p">),</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">group</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">1</span><span class="p">)</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="nb">str</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 class="o">.</span><span class="n">groups</span> <span class="o">==</span> <span class="mi">1</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">else</span> <span class="kc">None</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 class="s2">&quot;TIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">),</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">&quot;TIMESTAMP_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">),</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">&quot;DATE_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="s2">&quot;DATETIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">),</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="s2">&quot;TIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">),</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="s2">&quot;TIMESTAMP_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">),</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&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">StrToTime</span><span class="p">(</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="nb">format</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-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="p">),</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <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="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</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 class="c1"># type: ignore</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">&quot;ARRAY&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">Array</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_statement</span><span class="p">()]),</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="p">}</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</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;TRIM&quot;</span><span class="p">)</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">NO_PAREN_FUNCTIONS</span> <span class="o">=</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="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDatetime</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">NESTED_TYPE_TOKENS</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">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="p">}</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">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</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">ID_VAR_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</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><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</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 class="c1"># type: ignore</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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><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">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">)</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="p">),</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;OPTIONS&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_with_property</span><span class="p">(),</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="p">}</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</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">CONSTRAINT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">_parse_with_property</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><span id="L-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>
+</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="p">{</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;TIMESTAMP&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;DATETIME&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;zone&quot;</span><span class="p">))</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="p">),</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</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">remove_precision_parameterized_types</span><span class="p">]),</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</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="sa">f</span><span class="s2">&quot;DATE_DIFF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">, </span><span class="si">{</span><span 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">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="s1">&#39;DAY&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</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">func</span><span class="p">(</span><span class="s2">&quot;DATE_TRUNC&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">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</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;STRING_AGG&quot;</span><span class="p">),</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">),</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</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-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="p">[</span><span class="n">_unqualify_unnest</span><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><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="p">),</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARSE_TIMESTAMP(</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;bigquery&quot;</span><span class="p">),</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">:</span> <span class="n">_derived_table_values_to_unnest</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">_returnsproperty_sql</span><span class="p">,</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
+</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">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="sa">f</span><span class="s2">&quot;TRIM&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><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">StabilityProperty</span><span class="p">:</span> <span 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;DETERMINISTIC&quot;</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;IMMUTABLE&quot;</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&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">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP_CONTAINS&quot;</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-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">TYPE_MAPPING</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&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">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-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">exp</span><span 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;BYTES&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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&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">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-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">exp</span><span 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-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">exp</span><span 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;FLOAT64&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">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;INT64&quot;</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">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;STRING&quot;</span><span class="p">,</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">exp</span><span 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;INT64&quot;</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">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</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">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="L-286"><a href="#L-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">TIMESTAMPTZ</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">exp</span><span 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;BYTES&quot;</span><span class="p">,</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">exp</span><span 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-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;ANY TYPE&quot;</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">PROPERTIES_LOCATION</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</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-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="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">first_arg</span> <span class="o">=</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><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">first_arg</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-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ARRAY</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span 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-305"><a href="#L-305"><span class="linenos">305</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</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; DISTINCT&#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-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="k">return</span> <span class="n">inline_array_sql</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-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="k">def</span> <span class="nf">transaction_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-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</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="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-310"><a href="#L-310"><span class="linenos">310</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</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="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39; DISTINCT&#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-309"><a href="#L-309"><span class="linenos">309</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="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-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</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">rollback_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-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</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">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">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-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">sql</span><span class="p">(</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><span id="L-318"><a href="#L-318"><span class="linenos">318</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-319"><a href="#L-319"><span class="linenos">319</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;EXCEPT</span><span class="si">{</span><span class="s1">&#39; DISTINCT&#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-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">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-324"><a href="#L-324"><span class="linenos">324</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;INTERSECT</span><span class="si">{</span><span class="s1">&#39; DISTINCT&#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-327"><a href="#L-327"><span class="linenos">327</span></a>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="k">def</span> <span class="nf">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-329"><a href="#L-329"><span class="linenos">329</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;OPTIONS&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -425,211 +445,225 @@
</div>
<a class="headerlink" href="#BigQuery"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery-109"><a href="#BigQuery-109"><span class="linenos">109</span></a><span class="k">class</span> <span class="nc">BigQuery</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="BigQuery-110"><a href="#BigQuery-110"><span class="linenos">110</span></a> <span class="n">unnest_column_only</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery-111"><a href="#BigQuery-111"><span class="linenos">111</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-112"><a href="#BigQuery-112"><span class="linenos">112</span></a> <span class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-113"><a href="#BigQuery-113"><span class="linenos">113</span></a> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-114"><a href="#BigQuery-114"><span class="linenos">114</span></a> <span class="s2">&quot;%m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-115"><a href="#BigQuery-115"><span class="linenos">115</span></a> <span class="s2">&quot;%y&quot;</span><span class="p">:</span> <span class="s2">&quot;%-y&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-116"><a href="#BigQuery-116"><span class="linenos">116</span></a> <span class="s2">&quot;%H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-117"><a href="#BigQuery-117"><span class="linenos">117</span></a> <span class="s2">&quot;%I&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-118"><a href="#BigQuery-118"><span class="linenos">118</span></a> <span class="s2">&quot;%S&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-119"><a href="#BigQuery-119"><span class="linenos">119</span></a> <span class="s2">&quot;%j&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-120"><a href="#BigQuery-120"><span class="linenos">120</span></a> <span class="p">}</span>
-</span><span id="BigQuery-121"><a href="#BigQuery-121"><span class="linenos">121</span></a>
-</span><span id="BigQuery-122"><a href="#BigQuery-122"><span class="linenos">122</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="BigQuery-123"><a href="#BigQuery-123"><span class="linenos">123</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="BigQuery-124"><a href="#BigQuery-124"><span class="linenos">124</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">quote</span><span class="p">,</span> <span class="n">quote</span><span class="p">)</span> <span class="k">if</span> <span class="n">prefix</span> <span class="k">else</span> <span class="n">quote</span>
-</span><span id="BigQuery-125"><a href="#BigQuery-125"><span class="linenos">125</span></a> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;&#39;&#39;&#39;&quot;</span><span class="p">]</span>
-</span><span id="BigQuery-126"><a href="#BigQuery-126"><span class="linenos">126</span></a> <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;r&quot;</span><span class="p">,</span> <span class="s2">&quot;R&quot;</span><span class="p">]</span>
-</span><span id="BigQuery-127"><a href="#BigQuery-127"><span class="linenos">127</span></a> <span class="p">]</span>
-</span><span id="BigQuery-128"><a href="#BigQuery-128"><span class="linenos">128</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="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="BigQuery-129"><a href="#BigQuery-129"><span class="linenos">129</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="BigQuery-130"><a href="#BigQuery-130"><span class="linenos">130</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><span id="BigQuery-131"><a href="#BigQuery-131"><span class="linenos">131</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="BigQuery-132"><a href="#BigQuery-132"><span class="linenos">132</span></a>
-</span><span id="BigQuery-133"><a href="#BigQuery-133"><span class="linenos">133</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-134"><a href="#BigQuery-134"><span class="linenos">134</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="BigQuery-135"><a href="#BigQuery-135"><span class="linenos">135</span></a> <span class="s2">&quot;ANY TYPE&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="BigQuery-136"><a href="#BigQuery-136"><span class="linenos">136</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="BigQuery-137"><a href="#BigQuery-137"><span class="linenos">137</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="BigQuery-138"><a href="#BigQuery-138"><span class="linenos">138</span></a> <span class="s2">&quot;CURRENT_DATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
-</span><span id="BigQuery-139"><a href="#BigQuery-139"><span class="linenos">139</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="BigQuery-140"><a href="#BigQuery-140"><span class="linenos">140</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="BigQuery-141"><a href="#BigQuery-141"><span class="linenos">141</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="BigQuery-142"><a href="#BigQuery-142"><span class="linenos">142</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="BigQuery-143"><a href="#BigQuery-143"><span class="linenos">143</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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="BigQuery-144"><a href="#BigQuery-144"><span class="linenos">144</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">NULL</span><span class="p">,</span>
-</span><span id="BigQuery-145"><a href="#BigQuery-145"><span class="linenos">145</span></a> <span class="p">}</span>
-</span><span id="BigQuery-146"><a href="#BigQuery-146"><span class="linenos">146</span></a> <span class="n">KEYWORDS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-147"><a href="#BigQuery-147"><span class="linenos">147</span></a>
-</span><span id="BigQuery-148"><a href="#BigQuery-148"><span class="linenos">148</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="BigQuery-149"><a href="#BigQuery-149"><span class="linenos">149</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery-150"><a href="#BigQuery-150"><span class="linenos">150</span></a>
-</span><span id="BigQuery-151"><a href="#BigQuery-151"><span class="linenos">151</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-152"><a href="#BigQuery-152"><span class="linenos">152</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery-153"><a href="#BigQuery-153"><span class="linenos">153</span></a>
-</span><span id="BigQuery-154"><a href="#BigQuery-154"><span class="linenos">154</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-155"><a href="#BigQuery-155"><span class="linenos">155</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-156"><a href="#BigQuery-156"><span class="linenos">156</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span>
-</span><span id="BigQuery-157"><a href="#BigQuery-157"><span class="linenos">157</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">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="o">.</span><span class="n">name</span><span class="p">),</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-158"><a href="#BigQuery-158"><span class="linenos">158</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="BigQuery-159"><a href="#BigQuery-159"><span class="linenos">159</span></a> <span class="p">),</span>
-</span><span id="BigQuery-160"><a href="#BigQuery-160"><span class="linenos">160</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery-161"><a href="#BigQuery-161"><span class="linenos">161</span></a> <span class="s2">&quot;DATETIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">),</span>
-</span><span id="BigQuery-162"><a href="#BigQuery-162"><span class="linenos">162</span></a> <span class="s2">&quot;DIV&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">IntDiv</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">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="BigQuery-163"><a href="#BigQuery-163"><span class="linenos">163</span></a> <span class="s2">&quot;REGEXP_CONTAINS&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="BigQuery-164"><a href="#BigQuery-164"><span class="linenos">164</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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">RegexpExtract</span><span class="p">(</span>
-</span><span id="BigQuery-165"><a href="#BigQuery-165"><span class="linenos">165</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="BigQuery-166"><a href="#BigQuery-166"><span class="linenos">166</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="BigQuery-167"><a href="#BigQuery-167"><span class="linenos">167</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
-</span><span id="BigQuery-168"><a href="#BigQuery-168"><span class="linenos">168</span></a> <span class="n">occurrence</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">3</span><span class="p">),</span>
-</span><span id="BigQuery-169"><a href="#BigQuery-169"><span class="linenos">169</span></a> <span class="n">group</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">1</span><span class="p">)</span>
-</span><span id="BigQuery-170"><a href="#BigQuery-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="nb">str</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 class="o">.</span><span class="n">groups</span> <span class="o">==</span> <span class="mi">1</span>
-</span><span id="BigQuery-171"><a href="#BigQuery-171"><span class="linenos">171</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="BigQuery-172"><a href="#BigQuery-172"><span class="linenos">172</span></a> <span class="p">),</span>
-</span><span id="BigQuery-173"><a href="#BigQuery-173"><span class="linenos">173</span></a> <span class="s2">&quot;TIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">),</span>
-</span><span id="BigQuery-174"><a href="#BigQuery-174"><span class="linenos">174</span></a> <span class="s2">&quot;TIMESTAMP_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">),</span>
-</span><span id="BigQuery-175"><a href="#BigQuery-175"><span class="linenos">175</span></a> <span class="s2">&quot;DATE_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery-176"><a href="#BigQuery-176"><span class="linenos">176</span></a> <span class="s2">&quot;DATETIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">),</span>
-</span><span id="BigQuery-177"><a href="#BigQuery-177"><span class="linenos">177</span></a> <span class="s2">&quot;TIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">),</span>
-</span><span id="BigQuery-178"><a href="#BigQuery-178"><span class="linenos">178</span></a> <span class="s2">&quot;TIMESTAMP_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">),</span>
-</span><span id="BigQuery-179"><a href="#BigQuery-179"><span class="linenos">179</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&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">StrToTime</span><span class="p">(</span>
-</span><span id="BigQuery-180"><a href="#BigQuery-180"><span class="linenos">180</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="nb">format</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="BigQuery-181"><a href="#BigQuery-181"><span class="linenos">181</span></a> <span class="p">),</span>
-</span><span id="BigQuery-182"><a href="#BigQuery-182"><span class="linenos">182</span></a> <span class="p">}</span>
-</span><span id="BigQuery-183"><a href="#BigQuery-183"><span class="linenos">183</span></a>
-</span><span id="BigQuery-184"><a href="#BigQuery-184"><span class="linenos">184</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-185"><a href="#BigQuery-185"><span class="linenos">185</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 class="c1"># type: ignore</span>
-</span><span id="BigQuery-186"><a href="#BigQuery-186"><span class="linenos">186</span></a> <span class="s2">&quot;ARRAY&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">Array</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_statement</span><span class="p">()]),</span>
-</span><span id="BigQuery-187"><a href="#BigQuery-187"><span class="linenos">187</span></a> <span class="p">}</span>
-</span><span id="BigQuery-188"><a href="#BigQuery-188"><span class="linenos">188</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;TRIM&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-189"><a href="#BigQuery-189"><span class="linenos">189</span></a>
-</span><span id="BigQuery-190"><a href="#BigQuery-190"><span class="linenos">190</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-191"><a href="#BigQuery-191"><span class="linenos">191</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">NO_PAREN_FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-192"><a href="#BigQuery-192"><span class="linenos">192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDatetime</span><span class="p">,</span>
-</span><span id="BigQuery-193"><a href="#BigQuery-193"><span class="linenos">193</span></a> <span class="p">}</span>
-</span><span id="BigQuery-194"><a href="#BigQuery-194"><span class="linenos">194</span></a>
-</span><span id="BigQuery-195"><a href="#BigQuery-195"><span class="linenos">195</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-196"><a href="#BigQuery-196"><span class="linenos">196</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">NESTED_TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-197"><a href="#BigQuery-197"><span class="linenos">197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="BigQuery-198"><a href="#BigQuery-198"><span class="linenos">198</span></a> <span class="p">}</span>
-</span><span id="BigQuery-199"><a href="#BigQuery-199"><span class="linenos">199</span></a>
-</span><span id="BigQuery-200"><a href="#BigQuery-200"><span class="linenos">200</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-201"><a href="#BigQuery-201"><span class="linenos">201</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">ID_VAR_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-202"><a href="#BigQuery-202"><span class="linenos">202</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="BigQuery-203"><a href="#BigQuery-203"><span class="linenos">203</span></a> <span class="p">}</span>
-</span><span id="BigQuery-204"><a href="#BigQuery-204"><span class="linenos">204</span></a>
-</span><span id="BigQuery-205"><a href="#BigQuery-205"><span class="linenos">205</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-206"><a href="#BigQuery-206"><span class="linenos">206</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 class="c1"># type: ignore</span>
-</span><span id="BigQuery-207"><a href="#BigQuery-207"><span class="linenos">207</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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><span id="BigQuery-208"><a href="#BigQuery-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-209"><a href="#BigQuery-209"><span class="linenos">209</span></a> <span class="p">),</span>
-</span><span id="BigQuery-210"><a href="#BigQuery-210"><span class="linenos">210</span></a> <span class="p">}</span>
-</span><span id="BigQuery-211"><a href="#BigQuery-211"><span class="linenos">211</span></a>
-</span><span id="BigQuery-212"><a href="#BigQuery-212"><span class="linenos">212</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="BigQuery-213"><a href="#BigQuery-213"><span class="linenos">213</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery-214"><a href="#BigQuery-214"><span class="linenos">214</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-215"><a href="#BigQuery-215"><span class="linenos">215</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-216"><a href="#BigQuery-216"><span class="linenos">216</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery-217"><a href="#BigQuery-217"><span class="linenos">217</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="BigQuery-218"><a href="#BigQuery-218"><span class="linenos">218</span></a>
-</span><span id="BigQuery-219"><a href="#BigQuery-219"><span class="linenos">219</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-220"><a href="#BigQuery-220"><span class="linenos">220</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-221"><a href="#BigQuery-221"><span class="linenos">221</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">REMOVE_PRECISION_PARAMETERIZED_TYPES</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-222"><a href="#BigQuery-222"><span class="linenos">222</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="BigQuery-223"><a href="#BigQuery-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="BigQuery-224"><a href="#BigQuery-224"><span class="linenos">224</span></a> <span class="s2">&quot;TIMESTAMP&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;DATETIME&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;zone&quot;</span><span class="p">))</span>
-</span><span id="BigQuery-225"><a href="#BigQuery-225"><span class="linenos">225</span></a> <span class="p">),</span>
-</span><span id="BigQuery-226"><a href="#BigQuery-226"><span class="linenos">226</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-227"><a href="#BigQuery-227"><span class="linenos">227</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-228"><a href="#BigQuery-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-229"><a href="#BigQuery-229"><span class="linenos">229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-230"><a href="#BigQuery-230"><span class="linenos">230</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="sa">f</span><span class="s2">&quot;DATE_DIFF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">, </span><span class="si">{</span><span 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">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="s1">&#39;DAY&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-231"><a href="#BigQuery-231"><span class="linenos">231</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="BigQuery-232"><a href="#BigQuery-232"><span class="linenos">232</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">func</span><span class="p">(</span><span class="s2">&quot;DATE_TRUNC&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">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
-</span><span id="BigQuery-233"><a href="#BigQuery-233"><span class="linenos">233</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;STRING_AGG&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-234"><a href="#BigQuery-234"><span class="linenos">234</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="BigQuery-235"><a href="#BigQuery-235"><span class="linenos">235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-236"><a href="#BigQuery-236"><span class="linenos">236</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="BigQuery-237"><a href="#BigQuery-237"><span class="linenos">237</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="BigQuery-238"><a href="#BigQuery-238"><span class="linenos">238</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">_unqualify_unnest</span><span class="p">]),</span>
-</span><span id="BigQuery-239"><a href="#BigQuery-239"><span class="linenos">239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARSE_TIMESTAMP(</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="BigQuery-240"><a href="#BigQuery-240"><span class="linenos">240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-241"><a href="#BigQuery-241"><span class="linenos">241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-242"><a href="#BigQuery-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-243"><a href="#BigQuery-243"><span class="linenos">243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-244"><a href="#BigQuery-244"><span class="linenos">244</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="BigQuery-245"><a href="#BigQuery-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;bigquery&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-246"><a href="#BigQuery-246"><span class="linenos">246</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-247"><a href="#BigQuery-247"><span class="linenos">247</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="BigQuery-248"><a href="#BigQuery-248"><span class="linenos">248</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="BigQuery-249"><a href="#BigQuery-249"><span class="linenos">249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">:</span> <span class="n">_derived_table_values_to_unnest</span><span class="p">,</span>
-</span><span id="BigQuery-250"><a href="#BigQuery-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">_returnsproperty_sql</span><span class="p">,</span>
-</span><span id="BigQuery-251"><a href="#BigQuery-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
-</span><span id="BigQuery-252"><a href="#BigQuery-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="sa">f</span><span class="s2">&quot;TRIM&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><span id="BigQuery-253"><a href="#BigQuery-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span 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;DETERMINISTIC&quot;</span>
-</span><span id="BigQuery-254"><a href="#BigQuery-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;IMMUTABLE&quot;</span>
-</span><span id="BigQuery-255"><a href="#BigQuery-255"><span class="linenos">255</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-256"><a href="#BigQuery-256"><span class="linenos">256</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_CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="BigQuery-257"><a href="#BigQuery-257"><span class="linenos">257</span></a> <span class="p">}</span>
-</span><span id="BigQuery-258"><a href="#BigQuery-258"><span class="linenos">258</span></a>
-</span><span id="BigQuery-259"><a href="#BigQuery-259"><span class="linenos">259</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-260"><a href="#BigQuery-260"><span class="linenos">260</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-261"><a href="#BigQuery-261"><span class="linenos">261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-262"><a href="#BigQuery-262"><span class="linenos">262</span></a> <span class="n">exp</span><span 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="BigQuery-263"><a href="#BigQuery-263"><span class="linenos">263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-264"><a href="#BigQuery-264"><span class="linenos">264</span></a> <span class="n">exp</span><span 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="BigQuery-265"><a href="#BigQuery-265"><span class="linenos">265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-266"><a href="#BigQuery-266"><span class="linenos">266</span></a> <span class="n">exp</span><span 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="BigQuery-267"><a href="#BigQuery-267"><span class="linenos">267</span></a> <span class="n">exp</span><span 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;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-268"><a href="#BigQuery-268"><span class="linenos">268</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-269"><a href="#BigQuery-269"><span class="linenos">269</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-270"><a href="#BigQuery-270"><span class="linenos">270</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-271"><a href="#BigQuery-271"><span class="linenos">271</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-272"><a href="#BigQuery-272"><span class="linenos">272</span></a> <span class="n">exp</span><span 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="BigQuery-273"><a href="#BigQuery-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-274"><a href="#BigQuery-274"><span class="linenos">274</span></a> <span class="n">exp</span><span 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="BigQuery-275"><a href="#BigQuery-275"><span class="linenos">275</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-276"><a href="#BigQuery-276"><span class="linenos">276</span></a> <span class="n">exp</span><span 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="BigQuery-277"><a href="#BigQuery-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;ANY TYPE&quot;</span><span class="p">,</span>
-</span><span id="BigQuery-278"><a href="#BigQuery-278"><span class="linenos">278</span></a> <span class="p">}</span>
-</span><span id="BigQuery-279"><a href="#BigQuery-279"><span class="linenos">279</span></a>
-</span><span id="BigQuery-280"><a href="#BigQuery-280"><span class="linenos">280</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery-281"><a href="#BigQuery-281"><span class="linenos">281</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery-282"><a href="#BigQuery-282"><span class="linenos">282</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="BigQuery-283"><a href="#BigQuery-283"><span class="linenos">283</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="BigQuery-284"><a href="#BigQuery-284"><span class="linenos">284</span></a> <span class="p">}</span>
-</span><span id="BigQuery-285"><a href="#BigQuery-285"><span class="linenos">285</span></a>
-</span><span id="BigQuery-286"><a href="#BigQuery-286"><span class="linenos">286</span></a> <span class="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="BigQuery-287"><a href="#BigQuery-287"><span class="linenos">287</span></a> <span class="n">first_arg</span> <span class="o">=</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><span id="BigQuery-288"><a href="#BigQuery-288"><span class="linenos">288</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">first_arg</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="BigQuery-289"><a href="#BigQuery-289"><span class="linenos">289</span></a> <span class="k">return</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">wrap</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">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="BigQuery-290"><a href="#BigQuery-290"><span class="linenos">290</span></a>
-</span><span id="BigQuery-291"><a href="#BigQuery-291"><span class="linenos">291</span></a> <span class="k">return</span> <span class="n">inline_array_sql</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="BigQuery-292"><a href="#BigQuery-292"><span class="linenos">292</span></a>
-</span><span id="BigQuery-293"><a href="#BigQuery-293"><span class="linenos">293</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="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="BigQuery-294"><a href="#BigQuery-294"><span class="linenos">294</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
-</span><span id="BigQuery-295"><a href="#BigQuery-295"><span class="linenos">295</span></a>
-</span><span id="BigQuery-296"><a href="#BigQuery-296"><span class="linenos">296</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="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="BigQuery-297"><a href="#BigQuery-297"><span class="linenos">297</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
-</span><span id="BigQuery-298"><a href="#BigQuery-298"><span class="linenos">298</span></a>
-</span><span id="BigQuery-299"><a href="#BigQuery-299"><span class="linenos">299</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="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="BigQuery-300"><a href="#BigQuery-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
-</span><span id="BigQuery-301"><a href="#BigQuery-301"><span class="linenos">301</span></a>
-</span><span id="BigQuery-302"><a href="#BigQuery-302"><span class="linenos">302</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">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="BigQuery-303"><a href="#BigQuery-303"><span class="linenos">303</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery-112"><a href="#BigQuery-112"><span class="linenos">112</span></a><span class="k">class</span> <span class="nc">BigQuery</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="BigQuery-113"><a href="#BigQuery-113"><span class="linenos">113</span></a> <span class="n">unnest_column_only</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-114"><a href="#BigQuery-114"><span class="linenos">114</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-115"><a href="#BigQuery-115"><span class="linenos">115</span></a> <span class="s2">&quot;%M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-116"><a href="#BigQuery-116"><span class="linenos">116</span></a> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-117"><a href="#BigQuery-117"><span class="linenos">117</span></a> <span class="s2">&quot;%m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-118"><a href="#BigQuery-118"><span class="linenos">118</span></a> <span class="s2">&quot;%y&quot;</span><span class="p">:</span> <span class="s2">&quot;%-y&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-119"><a href="#BigQuery-119"><span class="linenos">119</span></a> <span class="s2">&quot;%H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-120"><a href="#BigQuery-120"><span class="linenos">120</span></a> <span class="s2">&quot;%I&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-121"><a href="#BigQuery-121"><span class="linenos">121</span></a> <span class="s2">&quot;%S&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-122"><a href="#BigQuery-122"><span class="linenos">122</span></a> <span class="s2">&quot;%j&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-123"><a href="#BigQuery-123"><span class="linenos">123</span></a> <span class="p">}</span>
+</span><span id="BigQuery-124"><a href="#BigQuery-124"><span class="linenos">124</span></a>
+</span><span id="BigQuery-125"><a href="#BigQuery-125"><span class="linenos">125</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="BigQuery-126"><a href="#BigQuery-126"><span class="linenos">126</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="BigQuery-127"><a href="#BigQuery-127"><span class="linenos">127</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">quote</span><span class="p">,</span> <span class="n">quote</span><span class="p">)</span> <span class="k">if</span> <span class="n">prefix</span> <span class="k">else</span> <span class="n">quote</span>
+</span><span id="BigQuery-128"><a href="#BigQuery-128"><span class="linenos">128</span></a> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;&#39;&#39;&#39;&quot;</span><span class="p">]</span>
+</span><span id="BigQuery-129"><a href="#BigQuery-129"><span class="linenos">129</span></a> <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;r&quot;</span><span class="p">,</span> <span class="s2">&quot;R&quot;</span><span class="p">]</span>
+</span><span id="BigQuery-130"><a href="#BigQuery-130"><span class="linenos">130</span></a> <span class="p">]</span>
+</span><span id="BigQuery-131"><a href="#BigQuery-131"><span class="linenos">131</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="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="BigQuery-132"><a href="#BigQuery-132"><span class="linenos">132</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="BigQuery-133"><a href="#BigQuery-133"><span class="linenos">133</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><span id="BigQuery-134"><a href="#BigQuery-134"><span class="linenos">134</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="BigQuery-135"><a href="#BigQuery-135"><span class="linenos">135</span></a>
+</span><span id="BigQuery-136"><a href="#BigQuery-136"><span class="linenos">136</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-137"><a href="#BigQuery-137"><span class="linenos">137</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="BigQuery-138"><a href="#BigQuery-138"><span class="linenos">138</span></a> <span class="s2">&quot;ANY TYPE&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="BigQuery-139"><a href="#BigQuery-139"><span class="linenos">139</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="BigQuery-140"><a href="#BigQuery-140"><span class="linenos">140</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="BigQuery-141"><a href="#BigQuery-141"><span class="linenos">141</span></a> <span class="s2">&quot;CURRENT_DATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
+</span><span id="BigQuery-142"><a href="#BigQuery-142"><span class="linenos">142</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="BigQuery-143"><a href="#BigQuery-143"><span class="linenos">143</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="BigQuery-144"><a href="#BigQuery-144"><span class="linenos">144</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="BigQuery-145"><a href="#BigQuery-145"><span class="linenos">145</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="BigQuery-146"><a href="#BigQuery-146"><span class="linenos">146</span></a> <span class="s2">&quot;BYTES&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="BigQuery-147"><a href="#BigQuery-147"><span class="linenos">147</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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="BigQuery-148"><a href="#BigQuery-148"><span class="linenos">148</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">NULL</span><span class="p">,</span>
+</span><span id="BigQuery-149"><a href="#BigQuery-149"><span class="linenos">149</span></a> <span class="p">}</span>
+</span><span id="BigQuery-150"><a href="#BigQuery-150"><span class="linenos">150</span></a> <span class="n">KEYWORDS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-151"><a href="#BigQuery-151"><span class="linenos">151</span></a>
+</span><span id="BigQuery-152"><a href="#BigQuery-152"><span class="linenos">152</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="BigQuery-153"><a href="#BigQuery-153"><span class="linenos">153</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-154"><a href="#BigQuery-154"><span class="linenos">154</span></a>
+</span><span id="BigQuery-155"><a href="#BigQuery-155"><span class="linenos">155</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-156"><a href="#BigQuery-156"><span class="linenos">156</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-157"><a href="#BigQuery-157"><span class="linenos">157</span></a>
+</span><span id="BigQuery-158"><a href="#BigQuery-158"><span class="linenos">158</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-159"><a href="#BigQuery-159"><span class="linenos">159</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-160"><a href="#BigQuery-160"><span class="linenos">160</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span>
+</span><span id="BigQuery-161"><a href="#BigQuery-161"><span class="linenos">161</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">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="o">.</span><span class="n">name</span><span class="p">),</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-162"><a href="#BigQuery-162"><span class="linenos">162</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="BigQuery-163"><a href="#BigQuery-163"><span class="linenos">163</span></a> <span class="p">),</span>
+</span><span id="BigQuery-164"><a href="#BigQuery-164"><span class="linenos">164</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery-165"><a href="#BigQuery-165"><span class="linenos">165</span></a> <span class="s2">&quot;DATETIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">),</span>
+</span><span id="BigQuery-166"><a href="#BigQuery-166"><span class="linenos">166</span></a> <span class="s2">&quot;DIV&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">IntDiv</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">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="BigQuery-167"><a href="#BigQuery-167"><span class="linenos">167</span></a> <span class="s2">&quot;REGEXP_CONTAINS&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="BigQuery-168"><a href="#BigQuery-168"><span class="linenos">168</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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">RegexpExtract</span><span class="p">(</span>
+</span><span id="BigQuery-169"><a href="#BigQuery-169"><span class="linenos">169</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="BigQuery-170"><a href="#BigQuery-170"><span class="linenos">170</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="BigQuery-171"><a href="#BigQuery-171"><span class="linenos">171</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
+</span><span id="BigQuery-172"><a href="#BigQuery-172"><span class="linenos">172</span></a> <span class="n">occurrence</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">3</span><span class="p">),</span>
+</span><span id="BigQuery-173"><a href="#BigQuery-173"><span class="linenos">173</span></a> <span class="n">group</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">1</span><span class="p">)</span>
+</span><span id="BigQuery-174"><a href="#BigQuery-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="nb">str</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 class="o">.</span><span class="n">groups</span> <span class="o">==</span> <span class="mi">1</span>
+</span><span id="BigQuery-175"><a href="#BigQuery-175"><span class="linenos">175</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="BigQuery-176"><a href="#BigQuery-176"><span class="linenos">176</span></a> <span class="p">),</span>
+</span><span id="BigQuery-177"><a href="#BigQuery-177"><span class="linenos">177</span></a> <span class="s2">&quot;TIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">),</span>
+</span><span id="BigQuery-178"><a href="#BigQuery-178"><span class="linenos">178</span></a> <span class="s2">&quot;TIMESTAMP_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">),</span>
+</span><span id="BigQuery-179"><a href="#BigQuery-179"><span class="linenos">179</span></a> <span class="s2">&quot;DATE_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery-180"><a href="#BigQuery-180"><span class="linenos">180</span></a> <span class="s2">&quot;DATETIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">),</span>
+</span><span id="BigQuery-181"><a href="#BigQuery-181"><span class="linenos">181</span></a> <span class="s2">&quot;TIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">),</span>
+</span><span id="BigQuery-182"><a href="#BigQuery-182"><span class="linenos">182</span></a> <span class="s2">&quot;TIMESTAMP_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">),</span>
+</span><span id="BigQuery-183"><a href="#BigQuery-183"><span class="linenos">183</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&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">StrToTime</span><span class="p">(</span>
+</span><span id="BigQuery-184"><a href="#BigQuery-184"><span class="linenos">184</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="nb">format</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="BigQuery-185"><a href="#BigQuery-185"><span class="linenos">185</span></a> <span class="p">),</span>
+</span><span id="BigQuery-186"><a href="#BigQuery-186"><span class="linenos">186</span></a> <span class="p">}</span>
+</span><span id="BigQuery-187"><a href="#BigQuery-187"><span class="linenos">187</span></a>
+</span><span id="BigQuery-188"><a href="#BigQuery-188"><span class="linenos">188</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-189"><a href="#BigQuery-189"><span class="linenos">189</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 class="c1"># type: ignore</span>
+</span><span id="BigQuery-190"><a href="#BigQuery-190"><span class="linenos">190</span></a> <span class="s2">&quot;ARRAY&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">Array</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_statement</span><span class="p">()]),</span>
+</span><span id="BigQuery-191"><a href="#BigQuery-191"><span class="linenos">191</span></a> <span class="p">}</span>
+</span><span id="BigQuery-192"><a href="#BigQuery-192"><span class="linenos">192</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;TRIM&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-193"><a href="#BigQuery-193"><span class="linenos">193</span></a>
+</span><span id="BigQuery-194"><a href="#BigQuery-194"><span class="linenos">194</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-195"><a href="#BigQuery-195"><span class="linenos">195</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">NO_PAREN_FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-196"><a href="#BigQuery-196"><span class="linenos">196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDatetime</span><span class="p">,</span>
+</span><span id="BigQuery-197"><a href="#BigQuery-197"><span class="linenos">197</span></a> <span class="p">}</span>
+</span><span id="BigQuery-198"><a href="#BigQuery-198"><span class="linenos">198</span></a>
+</span><span id="BigQuery-199"><a href="#BigQuery-199"><span class="linenos">199</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-200"><a href="#BigQuery-200"><span class="linenos">200</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">NESTED_TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-201"><a href="#BigQuery-201"><span class="linenos">201</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="BigQuery-202"><a href="#BigQuery-202"><span class="linenos">202</span></a> <span class="p">}</span>
+</span><span id="BigQuery-203"><a href="#BigQuery-203"><span class="linenos">203</span></a>
+</span><span id="BigQuery-204"><a href="#BigQuery-204"><span class="linenos">204</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-205"><a href="#BigQuery-205"><span class="linenos">205</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">ID_VAR_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-206"><a href="#BigQuery-206"><span class="linenos">206</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
+</span><span id="BigQuery-207"><a href="#BigQuery-207"><span class="linenos">207</span></a> <span class="p">}</span>
+</span><span id="BigQuery-208"><a href="#BigQuery-208"><span class="linenos">208</span></a>
+</span><span id="BigQuery-209"><a href="#BigQuery-209"><span class="linenos">209</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-210"><a href="#BigQuery-210"><span class="linenos">210</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 class="c1"># type: ignore</span>
+</span><span id="BigQuery-211"><a href="#BigQuery-211"><span class="linenos">211</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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><span id="BigQuery-212"><a href="#BigQuery-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-213"><a href="#BigQuery-213"><span class="linenos">213</span></a> <span class="p">),</span>
+</span><span id="BigQuery-214"><a href="#BigQuery-214"><span class="linenos">214</span></a> <span class="s2">&quot;OPTIONS&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_with_property</span><span class="p">(),</span>
+</span><span id="BigQuery-215"><a href="#BigQuery-215"><span class="linenos">215</span></a> <span class="p">}</span>
+</span><span id="BigQuery-216"><a href="#BigQuery-216"><span class="linenos">216</span></a>
+</span><span id="BigQuery-217"><a href="#BigQuery-217"><span class="linenos">217</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-218"><a href="#BigQuery-218"><span class="linenos">218</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">CONSTRAINT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-219"><a href="#BigQuery-219"><span class="linenos">219</span></a> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">_parse_with_property</span><span class="p">()),</span>
+</span><span id="BigQuery-220"><a href="#BigQuery-220"><span class="linenos">220</span></a> <span class="p">}</span>
+</span><span id="BigQuery-221"><a href="#BigQuery-221"><span class="linenos">221</span></a>
+</span><span id="BigQuery-222"><a href="#BigQuery-222"><span class="linenos">222</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="BigQuery-223"><a href="#BigQuery-223"><span class="linenos">223</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery-224"><a href="#BigQuery-224"><span class="linenos">224</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-225"><a href="#BigQuery-225"><span class="linenos">225</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-226"><a href="#BigQuery-226"><span class="linenos">226</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery-227"><a href="#BigQuery-227"><span class="linenos">227</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="BigQuery-228"><a href="#BigQuery-228"><span class="linenos">228</span></a>
+</span><span id="BigQuery-229"><a href="#BigQuery-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-230"><a href="#BigQuery-230"><span class="linenos">230</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-231"><a href="#BigQuery-231"><span class="linenos">231</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="BigQuery-232"><a href="#BigQuery-232"><span class="linenos">232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="BigQuery-233"><a href="#BigQuery-233"><span class="linenos">233</span></a> <span class="s2">&quot;TIMESTAMP&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;DATETIME&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;zone&quot;</span><span class="p">))</span>
+</span><span id="BigQuery-234"><a href="#BigQuery-234"><span class="linenos">234</span></a> <span class="p">),</span>
+</span><span id="BigQuery-235"><a href="#BigQuery-235"><span class="linenos">235</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">remove_precision_parameterized_types</span><span class="p">]),</span>
+</span><span id="BigQuery-236"><a href="#BigQuery-236"><span class="linenos">236</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-237"><a href="#BigQuery-237"><span class="linenos">237</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-238"><a href="#BigQuery-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-239"><a href="#BigQuery-239"><span class="linenos">239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-240"><a href="#BigQuery-240"><span class="linenos">240</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="sa">f</span><span class="s2">&quot;DATE_DIFF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">, </span><span class="si">{</span><span 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">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="s1">&#39;DAY&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-241"><a href="#BigQuery-241"><span class="linenos">241</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="BigQuery-242"><a href="#BigQuery-242"><span class="linenos">242</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">func</span><span class="p">(</span><span class="s2">&quot;DATE_TRUNC&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">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
+</span><span id="BigQuery-243"><a href="#BigQuery-243"><span class="linenos">243</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;STRING_AGG&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-244"><a href="#BigQuery-244"><span class="linenos">244</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="BigQuery-245"><a href="#BigQuery-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-246"><a href="#BigQuery-246"><span class="linenos">246</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="BigQuery-247"><a href="#BigQuery-247"><span class="linenos">247</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="BigQuery-248"><a href="#BigQuery-248"><span class="linenos">248</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="BigQuery-249"><a href="#BigQuery-249"><span class="linenos">249</span></a> <span class="p">[</span><span class="n">_unqualify_unnest</span><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><span id="BigQuery-250"><a href="#BigQuery-250"><span class="linenos">250</span></a> <span class="p">),</span>
+</span><span id="BigQuery-251"><a href="#BigQuery-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARSE_TIMESTAMP(</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="BigQuery-252"><a href="#BigQuery-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-253"><a href="#BigQuery-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-254"><a href="#BigQuery-254"><span class="linenos">254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-255"><a href="#BigQuery-255"><span class="linenos">255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-256"><a href="#BigQuery-256"><span class="linenos">256</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="BigQuery-257"><a href="#BigQuery-257"><span class="linenos">257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;bigquery&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-258"><a href="#BigQuery-258"><span class="linenos">258</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-259"><a href="#BigQuery-259"><span class="linenos">259</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="BigQuery-260"><a href="#BigQuery-260"><span class="linenos">260</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="BigQuery-261"><a href="#BigQuery-261"><span class="linenos">261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">:</span> <span class="n">_derived_table_values_to_unnest</span><span class="p">,</span>
+</span><span id="BigQuery-262"><a href="#BigQuery-262"><span class="linenos">262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">_returnsproperty_sql</span><span class="p">,</span>
+</span><span id="BigQuery-263"><a href="#BigQuery-263"><span class="linenos">263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
+</span><span id="BigQuery-264"><a href="#BigQuery-264"><span class="linenos">264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="sa">f</span><span class="s2">&quot;TRIM&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><span id="BigQuery-265"><a href="#BigQuery-265"><span class="linenos">265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span 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;DETERMINISTIC&quot;</span>
+</span><span id="BigQuery-266"><a href="#BigQuery-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;IMMUTABLE&quot;</span>
+</span><span id="BigQuery-267"><a href="#BigQuery-267"><span class="linenos">267</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-268"><a href="#BigQuery-268"><span class="linenos">268</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_CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="BigQuery-269"><a href="#BigQuery-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="BigQuery-270"><a href="#BigQuery-270"><span class="linenos">270</span></a>
+</span><span id="BigQuery-271"><a href="#BigQuery-271"><span class="linenos">271</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-272"><a href="#BigQuery-272"><span class="linenos">272</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-273"><a href="#BigQuery-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-274"><a href="#BigQuery-274"><span class="linenos">274</span></a> <span class="n">exp</span><span 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="BigQuery-275"><a href="#BigQuery-275"><span class="linenos">275</span></a> <span class="n">exp</span><span 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;BYTES&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-276"><a href="#BigQuery-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-277"><a href="#BigQuery-277"><span class="linenos">277</span></a> <span class="n">exp</span><span 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="BigQuery-278"><a href="#BigQuery-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-279"><a href="#BigQuery-279"><span class="linenos">279</span></a> <span class="n">exp</span><span 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="BigQuery-280"><a href="#BigQuery-280"><span class="linenos">280</span></a> <span class="n">exp</span><span 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;FLOAT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-281"><a href="#BigQuery-281"><span class="linenos">281</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-282"><a href="#BigQuery-282"><span class="linenos">282</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-283"><a href="#BigQuery-283"><span class="linenos">283</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-284"><a href="#BigQuery-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">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-285"><a href="#BigQuery-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">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-286"><a href="#BigQuery-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">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-287"><a href="#BigQuery-287"><span class="linenos">287</span></a> <span class="n">exp</span><span 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="BigQuery-288"><a href="#BigQuery-288"><span class="linenos">288</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-289"><a href="#BigQuery-289"><span class="linenos">289</span></a> <span class="n">exp</span><span 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;BYTES&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-290"><a href="#BigQuery-290"><span class="linenos">290</span></a> <span class="n">exp</span><span 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="BigQuery-291"><a href="#BigQuery-291"><span class="linenos">291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;ANY TYPE&quot;</span><span class="p">,</span>
+</span><span id="BigQuery-292"><a href="#BigQuery-292"><span class="linenos">292</span></a> <span class="p">}</span>
+</span><span id="BigQuery-293"><a href="#BigQuery-293"><span class="linenos">293</span></a>
+</span><span id="BigQuery-294"><a href="#BigQuery-294"><span class="linenos">294</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery-295"><a href="#BigQuery-295"><span class="linenos">295</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery-296"><a href="#BigQuery-296"><span class="linenos">296</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="BigQuery-297"><a href="#BigQuery-297"><span class="linenos">297</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="BigQuery-298"><a href="#BigQuery-298"><span class="linenos">298</span></a> <span class="p">}</span>
+</span><span id="BigQuery-299"><a href="#BigQuery-299"><span class="linenos">299</span></a>
+</span><span id="BigQuery-300"><a href="#BigQuery-300"><span class="linenos">300</span></a> <span class="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery-301"><a href="#BigQuery-301"><span class="linenos">301</span></a> <span class="n">first_arg</span> <span class="o">=</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><span id="BigQuery-302"><a href="#BigQuery-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">first_arg</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="BigQuery-303"><a href="#BigQuery-303"><span class="linenos">303</span></a> <span class="k">return</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">wrap</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">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="BigQuery-304"><a href="#BigQuery-304"><span class="linenos">304</span></a>
-</span><span id="BigQuery-305"><a href="#BigQuery-305"><span class="linenos">305</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="BigQuery-306"><a href="#BigQuery-306"><span class="linenos">306</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="BigQuery-307"><a href="#BigQuery-307"><span class="linenos">307</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-308"><a href="#BigQuery-308"><span class="linenos">308</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; DISTINCT&#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="BigQuery-305"><a href="#BigQuery-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">inline_array_sql</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="BigQuery-306"><a href="#BigQuery-306"><span class="linenos">306</span></a>
+</span><span id="BigQuery-307"><a href="#BigQuery-307"><span class="linenos">307</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="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="BigQuery-308"><a href="#BigQuery-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
</span><span id="BigQuery-309"><a href="#BigQuery-309"><span class="linenos">309</span></a>
-</span><span id="BigQuery-310"><a href="#BigQuery-310"><span class="linenos">310</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="BigQuery-311"><a href="#BigQuery-311"><span class="linenos">311</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="BigQuery-312"><a href="#BigQuery-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
-</span><span id="BigQuery-313"><a href="#BigQuery-313"><span class="linenos">313</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; DISTINCT&#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="BigQuery-310"><a href="#BigQuery-310"><span class="linenos">310</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="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="BigQuery-311"><a href="#BigQuery-311"><span class="linenos">311</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
+</span><span id="BigQuery-312"><a href="#BigQuery-312"><span class="linenos">312</span></a>
+</span><span id="BigQuery-313"><a href="#BigQuery-313"><span class="linenos">313</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="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="BigQuery-314"><a href="#BigQuery-314"><span class="linenos">314</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
+</span><span id="BigQuery-315"><a href="#BigQuery-315"><span class="linenos">315</span></a>
+</span><span id="BigQuery-316"><a href="#BigQuery-316"><span class="linenos">316</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">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="BigQuery-317"><a href="#BigQuery-317"><span class="linenos">317</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><span id="BigQuery-318"><a href="#BigQuery-318"><span class="linenos">318</span></a>
+</span><span id="BigQuery-319"><a href="#BigQuery-319"><span class="linenos">319</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="BigQuery-320"><a href="#BigQuery-320"><span class="linenos">320</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="BigQuery-321"><a href="#BigQuery-321"><span class="linenos">321</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-322"><a href="#BigQuery-322"><span class="linenos">322</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; DISTINCT&#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="BigQuery-323"><a href="#BigQuery-323"><span class="linenos">323</span></a>
+</span><span id="BigQuery-324"><a href="#BigQuery-324"><span class="linenos">324</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="BigQuery-325"><a href="#BigQuery-325"><span class="linenos">325</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="BigQuery-326"><a href="#BigQuery-326"><span class="linenos">326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="BigQuery-327"><a href="#BigQuery-327"><span class="linenos">327</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; DISTINCT&#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="BigQuery-328"><a href="#BigQuery-328"><span class="linenos">328</span></a>
+</span><span id="BigQuery-329"><a href="#BigQuery-329"><span class="linenos">329</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="BigQuery-330"><a href="#BigQuery-330"><span class="linenos">330</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;OPTIONS&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -664,31 +698,32 @@
</div>
<a class="headerlink" href="#BigQuery.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Tokenizer-122"><a href="#BigQuery.Tokenizer-122"><span class="linenos">122</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="BigQuery.Tokenizer-123"><a href="#BigQuery.Tokenizer-123"><span class="linenos">123</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="BigQuery.Tokenizer-124"><a href="#BigQuery.Tokenizer-124"><span class="linenos">124</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">quote</span><span class="p">,</span> <span class="n">quote</span><span class="p">)</span> <span class="k">if</span> <span class="n">prefix</span> <span class="k">else</span> <span class="n">quote</span>
-</span><span id="BigQuery.Tokenizer-125"><a href="#BigQuery.Tokenizer-125"><span class="linenos">125</span></a> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;&#39;&#39;&#39;&quot;</span><span class="p">]</span>
-</span><span id="BigQuery.Tokenizer-126"><a href="#BigQuery.Tokenizer-126"><span class="linenos">126</span></a> <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;r&quot;</span><span class="p">,</span> <span class="s2">&quot;R&quot;</span><span class="p">]</span>
-</span><span id="BigQuery.Tokenizer-127"><a href="#BigQuery.Tokenizer-127"><span class="linenos">127</span></a> <span class="p">]</span>
-</span><span id="BigQuery.Tokenizer-128"><a href="#BigQuery.Tokenizer-128"><span class="linenos">128</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="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="BigQuery.Tokenizer-129"><a href="#BigQuery.Tokenizer-129"><span class="linenos">129</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="BigQuery.Tokenizer-130"><a href="#BigQuery.Tokenizer-130"><span class="linenos">130</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><span id="BigQuery.Tokenizer-131"><a href="#BigQuery.Tokenizer-131"><span class="linenos">131</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="BigQuery.Tokenizer-132"><a href="#BigQuery.Tokenizer-132"><span class="linenos">132</span></a>
-</span><span id="BigQuery.Tokenizer-133"><a href="#BigQuery.Tokenizer-133"><span class="linenos">133</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Tokenizer-134"><a href="#BigQuery.Tokenizer-134"><span class="linenos">134</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="BigQuery.Tokenizer-135"><a href="#BigQuery.Tokenizer-135"><span class="linenos">135</span></a> <span class="s2">&quot;ANY TYPE&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="BigQuery.Tokenizer-136"><a href="#BigQuery.Tokenizer-136"><span class="linenos">136</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="BigQuery.Tokenizer-137"><a href="#BigQuery.Tokenizer-137"><span class="linenos">137</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="BigQuery.Tokenizer-138"><a href="#BigQuery.Tokenizer-138"><span class="linenos">138</span></a> <span class="s2">&quot;CURRENT_DATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
-</span><span id="BigQuery.Tokenizer-139"><a href="#BigQuery.Tokenizer-139"><span class="linenos">139</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="BigQuery.Tokenizer-140"><a href="#BigQuery.Tokenizer-140"><span class="linenos">140</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="BigQuery.Tokenizer-141"><a href="#BigQuery.Tokenizer-141"><span class="linenos">141</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="BigQuery.Tokenizer-142"><a href="#BigQuery.Tokenizer-142"><span class="linenos">142</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="BigQuery.Tokenizer-143"><a href="#BigQuery.Tokenizer-143"><span class="linenos">143</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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="BigQuery.Tokenizer-144"><a href="#BigQuery.Tokenizer-144"><span class="linenos">144</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">NULL</span><span class="p">,</span>
-</span><span id="BigQuery.Tokenizer-145"><a href="#BigQuery.Tokenizer-145"><span class="linenos">145</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Tokenizer-146"><a href="#BigQuery.Tokenizer-146"><span class="linenos">146</span></a> <span class="n">KEYWORDS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Tokenizer-125"><a href="#BigQuery.Tokenizer-125"><span class="linenos">125</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="BigQuery.Tokenizer-126"><a href="#BigQuery.Tokenizer-126"><span class="linenos">126</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="BigQuery.Tokenizer-127"><a href="#BigQuery.Tokenizer-127"><span class="linenos">127</span></a> <span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">quote</span><span class="p">,</span> <span class="n">quote</span><span class="p">)</span> <span class="k">if</span> <span class="n">prefix</span> <span class="k">else</span> <span class="n">quote</span>
+</span><span id="BigQuery.Tokenizer-128"><a href="#BigQuery.Tokenizer-128"><span class="linenos">128</span></a> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&quot;&#39;</span><span class="p">,</span> <span class="s2">&quot;&#39;&#39;&#39;&quot;</span><span class="p">]</span>
+</span><span id="BigQuery.Tokenizer-129"><a href="#BigQuery.Tokenizer-129"><span class="linenos">129</span></a> <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;r&quot;</span><span class="p">,</span> <span class="s2">&quot;R&quot;</span><span class="p">]</span>
+</span><span id="BigQuery.Tokenizer-130"><a href="#BigQuery.Tokenizer-130"><span class="linenos">130</span></a> <span class="p">]</span>
+</span><span id="BigQuery.Tokenizer-131"><a href="#BigQuery.Tokenizer-131"><span class="linenos">131</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="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="BigQuery.Tokenizer-132"><a href="#BigQuery.Tokenizer-132"><span class="linenos">132</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="BigQuery.Tokenizer-133"><a href="#BigQuery.Tokenizer-133"><span class="linenos">133</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><span id="BigQuery.Tokenizer-134"><a href="#BigQuery.Tokenizer-134"><span class="linenos">134</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="BigQuery.Tokenizer-135"><a href="#BigQuery.Tokenizer-135"><span class="linenos">135</span></a>
+</span><span id="BigQuery.Tokenizer-136"><a href="#BigQuery.Tokenizer-136"><span class="linenos">136</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Tokenizer-137"><a href="#BigQuery.Tokenizer-137"><span class="linenos">137</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="BigQuery.Tokenizer-138"><a href="#BigQuery.Tokenizer-138"><span class="linenos">138</span></a> <span class="s2">&quot;ANY TYPE&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="BigQuery.Tokenizer-139"><a href="#BigQuery.Tokenizer-139"><span class="linenos">139</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="BigQuery.Tokenizer-140"><a href="#BigQuery.Tokenizer-140"><span class="linenos">140</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="BigQuery.Tokenizer-141"><a href="#BigQuery.Tokenizer-141"><span class="linenos">141</span></a> <span class="s2">&quot;CURRENT_DATETIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
+</span><span id="BigQuery.Tokenizer-142"><a href="#BigQuery.Tokenizer-142"><span class="linenos">142</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="BigQuery.Tokenizer-143"><a href="#BigQuery.Tokenizer-143"><span class="linenos">143</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="BigQuery.Tokenizer-144"><a href="#BigQuery.Tokenizer-144"><span class="linenos">144</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="BigQuery.Tokenizer-145"><a href="#BigQuery.Tokenizer-145"><span class="linenos">145</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="BigQuery.Tokenizer-146"><a href="#BigQuery.Tokenizer-146"><span class="linenos">146</span></a> <span class="s2">&quot;BYTES&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="BigQuery.Tokenizer-147"><a href="#BigQuery.Tokenizer-147"><span class="linenos">147</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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="BigQuery.Tokenizer-148"><a href="#BigQuery.Tokenizer-148"><span class="linenos">148</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">NULL</span><span class="p">,</span>
+</span><span id="BigQuery.Tokenizer-149"><a href="#BigQuery.Tokenizer-149"><span class="linenos">149</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Tokenizer-150"><a href="#BigQuery.Tokenizer-150"><span class="linenos">150</span></a> <span class="n">KEYWORDS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -716,69 +751,75 @@
</div>
<a class="headerlink" href="#BigQuery.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Parser-148"><a href="#BigQuery.Parser-148"><span class="linenos">148</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="BigQuery.Parser-149"><a href="#BigQuery.Parser-149"><span class="linenos">149</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery.Parser-150"><a href="#BigQuery.Parser-150"><span class="linenos">150</span></a>
-</span><span id="BigQuery.Parser-151"><a href="#BigQuery.Parser-151"><span class="linenos">151</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Parser-152"><a href="#BigQuery.Parser-152"><span class="linenos">152</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery.Parser-153"><a href="#BigQuery.Parser-153"><span class="linenos">153</span></a>
-</span><span id="BigQuery.Parser-154"><a href="#BigQuery.Parser-154"><span class="linenos">154</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-155"><a href="#BigQuery.Parser-155"><span class="linenos">155</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Parser-156"><a href="#BigQuery.Parser-156"><span class="linenos">156</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span>
-</span><span id="BigQuery.Parser-157"><a href="#BigQuery.Parser-157"><span class="linenos">157</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">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="o">.</span><span class="n">name</span><span class="p">),</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Parser-158"><a href="#BigQuery.Parser-158"><span class="linenos">158</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="BigQuery.Parser-159"><a href="#BigQuery.Parser-159"><span class="linenos">159</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-160"><a href="#BigQuery.Parser-160"><span class="linenos">160</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery.Parser-161"><a href="#BigQuery.Parser-161"><span class="linenos">161</span></a> <span class="s2">&quot;DATETIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-162"><a href="#BigQuery.Parser-162"><span class="linenos">162</span></a> <span class="s2">&quot;DIV&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">IntDiv</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">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="BigQuery.Parser-163"><a href="#BigQuery.Parser-163"><span class="linenos">163</span></a> <span class="s2">&quot;REGEXP_CONTAINS&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="BigQuery.Parser-164"><a href="#BigQuery.Parser-164"><span class="linenos">164</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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">RegexpExtract</span><span class="p">(</span>
-</span><span id="BigQuery.Parser-165"><a href="#BigQuery.Parser-165"><span class="linenos">165</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="BigQuery.Parser-166"><a href="#BigQuery.Parser-166"><span class="linenos">166</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="BigQuery.Parser-167"><a href="#BigQuery.Parser-167"><span class="linenos">167</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-168"><a href="#BigQuery.Parser-168"><span class="linenos">168</span></a> <span class="n">occurrence</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">3</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-169"><a href="#BigQuery.Parser-169"><span class="linenos">169</span></a> <span class="n">group</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">1</span><span class="p">)</span>
-</span><span id="BigQuery.Parser-170"><a href="#BigQuery.Parser-170"><span class="linenos">170</span></a> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="nb">str</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 class="o">.</span><span class="n">groups</span> <span class="o">==</span> <span class="mi">1</span>
-</span><span id="BigQuery.Parser-171"><a href="#BigQuery.Parser-171"><span class="linenos">171</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-172"><a href="#BigQuery.Parser-172"><span class="linenos">172</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-173"><a href="#BigQuery.Parser-173"><span class="linenos">173</span></a> <span class="s2">&quot;TIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-174"><a href="#BigQuery.Parser-174"><span class="linenos">174</span></a> <span class="s2">&quot;TIMESTAMP_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-175"><a href="#BigQuery.Parser-175"><span class="linenos">175</span></a> <span class="s2">&quot;DATE_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery.Parser-176"><a href="#BigQuery.Parser-176"><span class="linenos">176</span></a> <span class="s2">&quot;DATETIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-177"><a href="#BigQuery.Parser-177"><span class="linenos">177</span></a> <span class="s2">&quot;TIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-178"><a href="#BigQuery.Parser-178"><span class="linenos">178</span></a> <span class="s2">&quot;TIMESTAMP_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">),</span>
-</span><span id="BigQuery.Parser-179"><a href="#BigQuery.Parser-179"><span class="linenos">179</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&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">StrToTime</span><span class="p">(</span>
-</span><span id="BigQuery.Parser-180"><a href="#BigQuery.Parser-180"><span class="linenos">180</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="nb">format</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="BigQuery.Parser-181"><a href="#BigQuery.Parser-181"><span class="linenos">181</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-182"><a href="#BigQuery.Parser-182"><span class="linenos">182</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-183"><a href="#BigQuery.Parser-183"><span class="linenos">183</span></a>
-</span><span id="BigQuery.Parser-184"><a href="#BigQuery.Parser-184"><span class="linenos">184</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-185"><a href="#BigQuery.Parser-185"><span class="linenos">185</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 class="c1"># type: ignore</span>
-</span><span id="BigQuery.Parser-186"><a href="#BigQuery.Parser-186"><span class="linenos">186</span></a> <span class="s2">&quot;ARRAY&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">Array</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_statement</span><span class="p">()]),</span>
-</span><span id="BigQuery.Parser-187"><a href="#BigQuery.Parser-187"><span class="linenos">187</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-188"><a href="#BigQuery.Parser-188"><span class="linenos">188</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;TRIM&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Parser-189"><a href="#BigQuery.Parser-189"><span class="linenos">189</span></a>
-</span><span id="BigQuery.Parser-190"><a href="#BigQuery.Parser-190"><span class="linenos">190</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-191"><a href="#BigQuery.Parser-191"><span class="linenos">191</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">NO_PAREN_FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Parser-192"><a href="#BigQuery.Parser-192"><span class="linenos">192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDatetime</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-193"><a href="#BigQuery.Parser-193"><span class="linenos">193</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-194"><a href="#BigQuery.Parser-194"><span class="linenos">194</span></a>
-</span><span id="BigQuery.Parser-195"><a href="#BigQuery.Parser-195"><span class="linenos">195</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-196"><a href="#BigQuery.Parser-196"><span class="linenos">196</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">NESTED_TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Parser-197"><a href="#BigQuery.Parser-197"><span class="linenos">197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-198"><a href="#BigQuery.Parser-198"><span class="linenos">198</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-199"><a href="#BigQuery.Parser-199"><span class="linenos">199</span></a>
-</span><span id="BigQuery.Parser-200"><a href="#BigQuery.Parser-200"><span class="linenos">200</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-201"><a href="#BigQuery.Parser-201"><span class="linenos">201</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">ID_VAR_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Parser-202"><a href="#BigQuery.Parser-202"><span class="linenos">202</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
-</span><span id="BigQuery.Parser-203"><a href="#BigQuery.Parser-203"><span class="linenos">203</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Parser-204"><a href="#BigQuery.Parser-204"><span class="linenos">204</span></a>
-</span><span id="BigQuery.Parser-205"><a href="#BigQuery.Parser-205"><span class="linenos">205</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Parser-206"><a href="#BigQuery.Parser-206"><span class="linenos">206</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 class="c1"># type: ignore</span>
-</span><span id="BigQuery.Parser-207"><a href="#BigQuery.Parser-207"><span class="linenos">207</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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><span id="BigQuery.Parser-208"><a href="#BigQuery.Parser-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Parser-209"><a href="#BigQuery.Parser-209"><span class="linenos">209</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Parser-210"><a href="#BigQuery.Parser-210"><span class="linenos">210</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Parser-152"><a href="#BigQuery.Parser-152"><span class="linenos">152</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="BigQuery.Parser-153"><a href="#BigQuery.Parser-153"><span class="linenos">153</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery.Parser-154"><a href="#BigQuery.Parser-154"><span class="linenos">154</span></a>
+</span><span id="BigQuery.Parser-155"><a href="#BigQuery.Parser-155"><span class="linenos">155</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Parser-156"><a href="#BigQuery.Parser-156"><span class="linenos">156</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery.Parser-157"><a href="#BigQuery.Parser-157"><span class="linenos">157</span></a>
+</span><span id="BigQuery.Parser-158"><a href="#BigQuery.Parser-158"><span class="linenos">158</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-159"><a href="#BigQuery.Parser-159"><span class="linenos">159</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-160"><a href="#BigQuery.Parser-160"><span class="linenos">160</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span>
+</span><span id="BigQuery.Parser-161"><a href="#BigQuery.Parser-161"><span class="linenos">161</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">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="o">.</span><span class="n">name</span><span class="p">),</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-162"><a href="#BigQuery.Parser-162"><span class="linenos">162</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="BigQuery.Parser-163"><a href="#BigQuery.Parser-163"><span class="linenos">163</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-164"><a href="#BigQuery.Parser-164"><span class="linenos">164</span></a> <span class="s2">&quot;DATE_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery.Parser-165"><a href="#BigQuery.Parser-165"><span class="linenos">165</span></a> <span class="s2">&quot;DATETIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-166"><a href="#BigQuery.Parser-166"><span class="linenos">166</span></a> <span class="s2">&quot;DIV&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">IntDiv</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">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="BigQuery.Parser-167"><a href="#BigQuery.Parser-167"><span class="linenos">167</span></a> <span class="s2">&quot;REGEXP_CONTAINS&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="BigQuery.Parser-168"><a href="#BigQuery.Parser-168"><span class="linenos">168</span></a> <span class="s2">&quot;REGEXP_EXTRACT&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">RegexpExtract</span><span class="p">(</span>
+</span><span id="BigQuery.Parser-169"><a href="#BigQuery.Parser-169"><span class="linenos">169</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="BigQuery.Parser-170"><a href="#BigQuery.Parser-170"><span class="linenos">170</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="BigQuery.Parser-171"><a href="#BigQuery.Parser-171"><span class="linenos">171</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-172"><a href="#BigQuery.Parser-172"><span class="linenos">172</span></a> <span class="n">occurrence</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">3</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-173"><a href="#BigQuery.Parser-173"><span class="linenos">173</span></a> <span class="n">group</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">1</span><span class="p">)</span>
+</span><span id="BigQuery.Parser-174"><a href="#BigQuery.Parser-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="nb">str</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 class="o">.</span><span class="n">groups</span> <span class="o">==</span> <span class="mi">1</span>
+</span><span id="BigQuery.Parser-175"><a href="#BigQuery.Parser-175"><span class="linenos">175</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-176"><a href="#BigQuery.Parser-176"><span class="linenos">176</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-177"><a href="#BigQuery.Parser-177"><span class="linenos">177</span></a> <span class="s2">&quot;TIME_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-178"><a href="#BigQuery.Parser-178"><span class="linenos">178</span></a> <span class="s2">&quot;TIMESTAMP_ADD&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-179"><a href="#BigQuery.Parser-179"><span class="linenos">179</span></a> <span class="s2">&quot;DATE_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</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="BigQuery.Parser-180"><a href="#BigQuery.Parser-180"><span class="linenos">180</span></a> <span class="s2">&quot;DATETIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-181"><a href="#BigQuery.Parser-181"><span class="linenos">181</span></a> <span class="s2">&quot;TIME_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-182"><a href="#BigQuery.Parser-182"><span class="linenos">182</span></a> <span class="s2">&quot;TIMESTAMP_SUB&quot;</span><span class="p">:</span> <span class="n">parse_date_delta_with_interval</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">),</span>
+</span><span id="BigQuery.Parser-183"><a href="#BigQuery.Parser-183"><span class="linenos">183</span></a> <span class="s2">&quot;PARSE_TIMESTAMP&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">StrToTime</span><span class="p">(</span>
+</span><span id="BigQuery.Parser-184"><a href="#BigQuery.Parser-184"><span class="linenos">184</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="nb">format</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="BigQuery.Parser-185"><a href="#BigQuery.Parser-185"><span class="linenos">185</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-186"><a href="#BigQuery.Parser-186"><span class="linenos">186</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-187"><a href="#BigQuery.Parser-187"><span class="linenos">187</span></a>
+</span><span id="BigQuery.Parser-188"><a href="#BigQuery.Parser-188"><span class="linenos">188</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-189"><a href="#BigQuery.Parser-189"><span class="linenos">189</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 class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-190"><a href="#BigQuery.Parser-190"><span class="linenos">190</span></a> <span class="s2">&quot;ARRAY&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">Array</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_statement</span><span class="p">()]),</span>
+</span><span id="BigQuery.Parser-191"><a href="#BigQuery.Parser-191"><span class="linenos">191</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-192"><a href="#BigQuery.Parser-192"><span class="linenos">192</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;TRIM&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Parser-193"><a href="#BigQuery.Parser-193"><span class="linenos">193</span></a>
+</span><span id="BigQuery.Parser-194"><a href="#BigQuery.Parser-194"><span class="linenos">194</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-195"><a href="#BigQuery.Parser-195"><span class="linenos">195</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">NO_PAREN_FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-196"><a href="#BigQuery.Parser-196"><span class="linenos">196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDatetime</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-197"><a href="#BigQuery.Parser-197"><span class="linenos">197</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-198"><a href="#BigQuery.Parser-198"><span class="linenos">198</span></a>
+</span><span id="BigQuery.Parser-199"><a href="#BigQuery.Parser-199"><span class="linenos">199</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-200"><a href="#BigQuery.Parser-200"><span class="linenos">200</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">NESTED_TYPE_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-201"><a href="#BigQuery.Parser-201"><span class="linenos">201</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-202"><a href="#BigQuery.Parser-202"><span class="linenos">202</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-203"><a href="#BigQuery.Parser-203"><span class="linenos">203</span></a>
+</span><span id="BigQuery.Parser-204"><a href="#BigQuery.Parser-204"><span class="linenos">204</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-205"><a href="#BigQuery.Parser-205"><span class="linenos">205</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">ID_VAR_TOKENS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-206"><a href="#BigQuery.Parser-206"><span class="linenos">206</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span>
+</span><span id="BigQuery.Parser-207"><a href="#BigQuery.Parser-207"><span class="linenos">207</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-208"><a href="#BigQuery.Parser-208"><span class="linenos">208</span></a>
+</span><span id="BigQuery.Parser-209"><a href="#BigQuery.Parser-209"><span class="linenos">209</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-210"><a href="#BigQuery.Parser-210"><span class="linenos">210</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 class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-211"><a href="#BigQuery.Parser-211"><span class="linenos">211</span></a> <span class="s2">&quot;NOT DETERMINISTIC&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><span id="BigQuery.Parser-212"><a href="#BigQuery.Parser-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Parser-213"><a href="#BigQuery.Parser-213"><span class="linenos">213</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Parser-214"><a href="#BigQuery.Parser-214"><span class="linenos">214</span></a> <span class="s2">&quot;OPTIONS&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_with_property</span><span class="p">(),</span>
+</span><span id="BigQuery.Parser-215"><a href="#BigQuery.Parser-215"><span class="linenos">215</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Parser-216"><a href="#BigQuery.Parser-216"><span class="linenos">216</span></a>
+</span><span id="BigQuery.Parser-217"><a href="#BigQuery.Parser-217"><span class="linenos">217</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Parser-218"><a href="#BigQuery.Parser-218"><span class="linenos">218</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">CONSTRAINT_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Parser-219"><a href="#BigQuery.Parser-219"><span class="linenos">219</span></a> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">_parse_with_property</span><span class="p">()),</span>
+</span><span id="BigQuery.Parser-220"><a href="#BigQuery.Parser-220"><span class="linenos">220</span></a> <span class="p">}</span>
</span></pre></div>
@@ -835,108 +876,115 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#BigQuery.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator-212"><a href="#BigQuery.Generator-212"><span class="linenos">212</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="BigQuery.Generator-213"><a href="#BigQuery.Generator-213"><span class="linenos">213</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="BigQuery.Generator-214"><a href="#BigQuery.Generator-214"><span class="linenos">214</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-215"><a href="#BigQuery.Generator-215"><span class="linenos">215</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-216"><a href="#BigQuery.Generator-216"><span class="linenos">216</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="BigQuery.Generator-217"><a href="#BigQuery.Generator-217"><span class="linenos">217</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="BigQuery.Generator-218"><a href="#BigQuery.Generator-218"><span class="linenos">218</span></a>
-</span><span id="BigQuery.Generator-219"><a href="#BigQuery.Generator-219"><span class="linenos">219</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Generator-220"><a href="#BigQuery.Generator-220"><span class="linenos">220</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Generator-221"><a href="#BigQuery.Generator-221"><span class="linenos">221</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">REMOVE_PRECISION_PARAMETERIZED_TYPES</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Generator-222"><a href="#BigQuery.Generator-222"><span class="linenos">222</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="BigQuery.Generator-223"><a href="#BigQuery.Generator-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="BigQuery.Generator-224"><a href="#BigQuery.Generator-224"><span class="linenos">224</span></a> <span class="s2">&quot;TIMESTAMP&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;DATETIME&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;zone&quot;</span><span class="p">))</span>
-</span><span id="BigQuery.Generator-225"><a href="#BigQuery.Generator-225"><span class="linenos">225</span></a> <span class="p">),</span>
-</span><span id="BigQuery.Generator-226"><a href="#BigQuery.Generator-226"><span class="linenos">226</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-227"><a href="#BigQuery.Generator-227"><span class="linenos">227</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-228"><a href="#BigQuery.Generator-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-229"><a href="#BigQuery.Generator-229"><span class="linenos">229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-230"><a href="#BigQuery.Generator-230"><span class="linenos">230</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="sa">f</span><span class="s2">&quot;DATE_DIFF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">, </span><span class="si">{</span><span 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">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="s1">&#39;DAY&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-231"><a href="#BigQuery.Generator-231"><span class="linenos">231</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="BigQuery.Generator-232"><a href="#BigQuery.Generator-232"><span class="linenos">232</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">func</span><span class="p">(</span><span class="s2">&quot;DATE_TRUNC&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">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
-</span><span id="BigQuery.Generator-233"><a href="#BigQuery.Generator-233"><span class="linenos">233</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;STRING_AGG&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-234"><a href="#BigQuery.Generator-234"><span class="linenos">234</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="BigQuery.Generator-235"><a href="#BigQuery.Generator-235"><span class="linenos">235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-236"><a href="#BigQuery.Generator-236"><span class="linenos">236</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="BigQuery.Generator-237"><a href="#BigQuery.Generator-237"><span class="linenos">237</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="BigQuery.Generator-238"><a href="#BigQuery.Generator-238"><span class="linenos">238</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">_unqualify_unnest</span><span class="p">]),</span>
-</span><span id="BigQuery.Generator-239"><a href="#BigQuery.Generator-239"><span class="linenos">239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARSE_TIMESTAMP(</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="BigQuery.Generator-240"><a href="#BigQuery.Generator-240"><span class="linenos">240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-241"><a href="#BigQuery.Generator-241"><span class="linenos">241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-242"><a href="#BigQuery.Generator-242"><span class="linenos">242</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-243"><a href="#BigQuery.Generator-243"><span class="linenos">243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-244"><a href="#BigQuery.Generator-244"><span class="linenos">244</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="BigQuery.Generator-245"><a href="#BigQuery.Generator-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;bigquery&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-246"><a href="#BigQuery.Generator-246"><span class="linenos">246</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-247"><a href="#BigQuery.Generator-247"><span class="linenos">247</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="BigQuery.Generator-248"><a href="#BigQuery.Generator-248"><span class="linenos">248</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="BigQuery.Generator-249"><a href="#BigQuery.Generator-249"><span class="linenos">249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">:</span> <span class="n">_derived_table_values_to_unnest</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-250"><a href="#BigQuery.Generator-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">_returnsproperty_sql</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-251"><a href="#BigQuery.Generator-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-252"><a href="#BigQuery.Generator-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="sa">f</span><span class="s2">&quot;TRIM&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><span id="BigQuery.Generator-253"><a href="#BigQuery.Generator-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span 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;DETERMINISTIC&quot;</span>
-</span><span id="BigQuery.Generator-254"><a href="#BigQuery.Generator-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;IMMUTABLE&quot;</span>
-</span><span id="BigQuery.Generator-255"><a href="#BigQuery.Generator-255"><span class="linenos">255</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-256"><a href="#BigQuery.Generator-256"><span class="linenos">256</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_CONTAINS&quot;</span><span class="p">),</span>
-</span><span id="BigQuery.Generator-257"><a href="#BigQuery.Generator-257"><span class="linenos">257</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Generator-258"><a href="#BigQuery.Generator-258"><span class="linenos">258</span></a>
-</span><span id="BigQuery.Generator-259"><a href="#BigQuery.Generator-259"><span class="linenos">259</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Generator-260"><a href="#BigQuery.Generator-260"><span class="linenos">260</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Generator-261"><a href="#BigQuery.Generator-261"><span class="linenos">261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-262"><a href="#BigQuery.Generator-262"><span class="linenos">262</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-263"><a href="#BigQuery.Generator-263"><span class="linenos">263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-264"><a href="#BigQuery.Generator-264"><span class="linenos">264</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-265"><a href="#BigQuery.Generator-265"><span class="linenos">265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-266"><a href="#BigQuery.Generator-266"><span class="linenos">266</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-267"><a href="#BigQuery.Generator-267"><span class="linenos">267</span></a> <span class="n">exp</span><span 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;FLOAT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-268"><a href="#BigQuery.Generator-268"><span class="linenos">268</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-269"><a href="#BigQuery.Generator-269"><span class="linenos">269</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-270"><a href="#BigQuery.Generator-270"><span class="linenos">270</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-271"><a href="#BigQuery.Generator-271"><span class="linenos">271</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-272"><a href="#BigQuery.Generator-272"><span class="linenos">272</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-273"><a href="#BigQuery.Generator-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-274"><a href="#BigQuery.Generator-274"><span class="linenos">274</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-275"><a href="#BigQuery.Generator-275"><span class="linenos">275</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-276"><a href="#BigQuery.Generator-276"><span class="linenos">276</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-277"><a href="#BigQuery.Generator-277"><span class="linenos">277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;ANY TYPE&quot;</span><span class="p">,</span>
-</span><span id="BigQuery.Generator-278"><a href="#BigQuery.Generator-278"><span class="linenos">278</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Generator-279"><a href="#BigQuery.Generator-279"><span class="linenos">279</span></a>
-</span><span id="BigQuery.Generator-280"><a href="#BigQuery.Generator-280"><span class="linenos">280</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="BigQuery.Generator-281"><a href="#BigQuery.Generator-281"><span class="linenos">281</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="BigQuery.Generator-282"><a href="#BigQuery.Generator-282"><span class="linenos">282</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="BigQuery.Generator-283"><a href="#BigQuery.Generator-283"><span class="linenos">283</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="BigQuery.Generator-284"><a href="#BigQuery.Generator-284"><span class="linenos">284</span></a> <span class="p">}</span>
-</span><span id="BigQuery.Generator-285"><a href="#BigQuery.Generator-285"><span class="linenos">285</span></a>
-</span><span id="BigQuery.Generator-286"><a href="#BigQuery.Generator-286"><span class="linenos">286</span></a> <span class="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="BigQuery.Generator-287"><a href="#BigQuery.Generator-287"><span class="linenos">287</span></a> <span class="n">first_arg</span> <span class="o">=</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><span id="BigQuery.Generator-288"><a href="#BigQuery.Generator-288"><span class="linenos">288</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">first_arg</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="BigQuery.Generator-289"><a href="#BigQuery.Generator-289"><span class="linenos">289</span></a> <span class="k">return</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">wrap</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">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="BigQuery.Generator-290"><a href="#BigQuery.Generator-290"><span class="linenos">290</span></a>
-</span><span id="BigQuery.Generator-291"><a href="#BigQuery.Generator-291"><span class="linenos">291</span></a> <span class="k">return</span> <span class="n">inline_array_sql</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="BigQuery.Generator-292"><a href="#BigQuery.Generator-292"><span class="linenos">292</span></a>
-</span><span id="BigQuery.Generator-293"><a href="#BigQuery.Generator-293"><span class="linenos">293</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="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="BigQuery.Generator-294"><a href="#BigQuery.Generator-294"><span class="linenos">294</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
-</span><span id="BigQuery.Generator-295"><a href="#BigQuery.Generator-295"><span class="linenos">295</span></a>
-</span><span id="BigQuery.Generator-296"><a href="#BigQuery.Generator-296"><span class="linenos">296</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="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="BigQuery.Generator-297"><a href="#BigQuery.Generator-297"><span class="linenos">297</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
-</span><span id="BigQuery.Generator-298"><a href="#BigQuery.Generator-298"><span class="linenos">298</span></a>
-</span><span id="BigQuery.Generator-299"><a href="#BigQuery.Generator-299"><span class="linenos">299</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="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="BigQuery.Generator-300"><a href="#BigQuery.Generator-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
-</span><span id="BigQuery.Generator-301"><a href="#BigQuery.Generator-301"><span class="linenos">301</span></a>
-</span><span id="BigQuery.Generator-302"><a href="#BigQuery.Generator-302"><span class="linenos">302</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">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="BigQuery.Generator-303"><a href="#BigQuery.Generator-303"><span class="linenos">303</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator-222"><a href="#BigQuery.Generator-222"><span class="linenos">222</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="BigQuery.Generator-223"><a href="#BigQuery.Generator-223"><span class="linenos">223</span></a> <span class="n">EXPLICIT_UNION</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="BigQuery.Generator-224"><a href="#BigQuery.Generator-224"><span class="linenos">224</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-225"><a href="#BigQuery.Generator-225"><span class="linenos">225</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-226"><a href="#BigQuery.Generator-226"><span class="linenos">226</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="BigQuery.Generator-227"><a href="#BigQuery.Generator-227"><span class="linenos">227</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="BigQuery.Generator-228"><a href="#BigQuery.Generator-228"><span class="linenos">228</span></a>
+</span><span id="BigQuery.Generator-229"><a href="#BigQuery.Generator-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Generator-230"><a href="#BigQuery.Generator-230"><span class="linenos">230</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Generator-231"><a href="#BigQuery.Generator-231"><span class="linenos">231</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="BigQuery.Generator-232"><a href="#BigQuery.Generator-232"><span class="linenos">232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="BigQuery.Generator-233"><a href="#BigQuery.Generator-233"><span class="linenos">233</span></a> <span class="s2">&quot;TIMESTAMP&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;DATETIME&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;zone&quot;</span><span class="p">))</span>
+</span><span id="BigQuery.Generator-234"><a href="#BigQuery.Generator-234"><span class="linenos">234</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Generator-235"><a href="#BigQuery.Generator-235"><span class="linenos">235</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">remove_precision_parameterized_types</span><span class="p">]),</span>
+</span><span id="BigQuery.Generator-236"><a href="#BigQuery.Generator-236"><span class="linenos">236</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-237"><a href="#BigQuery.Generator-237"><span class="linenos">237</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-238"><a href="#BigQuery.Generator-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-239"><a href="#BigQuery.Generator-239"><span class="linenos">239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DatetimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-240"><a href="#BigQuery.Generator-240"><span class="linenos">240</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="sa">f</span><span class="s2">&quot;DATE_DIFF(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">, </span><span class="si">{</span><span 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">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="s1">&#39;DAY&#39;</span><span class="p">))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-241"><a href="#BigQuery.Generator-241"><span class="linenos">241</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="BigQuery.Generator-242"><a href="#BigQuery.Generator-242"><span class="linenos">242</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">func</span><span class="p">(</span><span class="s2">&quot;DATE_TRUNC&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">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
+</span><span id="BigQuery.Generator-243"><a href="#BigQuery.Generator-243"><span class="linenos">243</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;STRING_AGG&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-244"><a href="#BigQuery.Generator-244"><span class="linenos">244</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="BigQuery.Generator-245"><a href="#BigQuery.Generator-245"><span class="linenos">245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DIV&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-246"><a href="#BigQuery.Generator-246"><span class="linenos">246</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="BigQuery.Generator-247"><a href="#BigQuery.Generator-247"><span class="linenos">247</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="BigQuery.Generator-248"><a href="#BigQuery.Generator-248"><span class="linenos">248</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="BigQuery.Generator-249"><a href="#BigQuery.Generator-249"><span class="linenos">249</span></a> <span class="p">[</span><span class="n">_unqualify_unnest</span><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><span id="BigQuery.Generator-250"><a href="#BigQuery.Generator-250"><span class="linenos">250</span></a> <span class="p">),</span>
+</span><span id="BigQuery.Generator-251"><a href="#BigQuery.Generator-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;PARSE_TIMESTAMP(</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">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="BigQuery.Generator-252"><a href="#BigQuery.Generator-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-253"><a href="#BigQuery.Generator-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-254"><a href="#BigQuery.Generator-254"><span class="linenos">254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-255"><a href="#BigQuery.Generator-255"><span class="linenos">255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampSub</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">(</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;SUB&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-256"><a href="#BigQuery.Generator-256"><span class="linenos">256</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="BigQuery.Generator-257"><a href="#BigQuery.Generator-257"><span class="linenos">257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;bigquery&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-258"><a href="#BigQuery.Generator-258"><span class="linenos">258</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;DATE&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-259"><a href="#BigQuery.Generator-259"><span class="linenos">259</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="BigQuery.Generator-260"><a href="#BigQuery.Generator-260"><span class="linenos">260</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="BigQuery.Generator-261"><a href="#BigQuery.Generator-261"><span class="linenos">261</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">:</span> <span class="n">_derived_table_values_to_unnest</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-262"><a href="#BigQuery.Generator-262"><span class="linenos">262</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span> <span class="n">_returnsproperty_sql</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-263"><a href="#BigQuery.Generator-263"><span class="linenos">263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-264"><a href="#BigQuery.Generator-264"><span class="linenos">264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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="sa">f</span><span class="s2">&quot;TRIM&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><span id="BigQuery.Generator-265"><a href="#BigQuery.Generator-265"><span class="linenos">265</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span 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;DETERMINISTIC&quot;</span>
+</span><span id="BigQuery.Generator-266"><a href="#BigQuery.Generator-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;IMMUTABLE&quot;</span>
+</span><span id="BigQuery.Generator-267"><a href="#BigQuery.Generator-267"><span class="linenos">267</span></a> <span class="k">else</span> <span class="s2">&quot;NOT DETERMINISTIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-268"><a href="#BigQuery.Generator-268"><span class="linenos">268</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_CONTAINS&quot;</span><span class="p">),</span>
+</span><span id="BigQuery.Generator-269"><a href="#BigQuery.Generator-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Generator-270"><a href="#BigQuery.Generator-270"><span class="linenos">270</span></a>
+</span><span id="BigQuery.Generator-271"><a href="#BigQuery.Generator-271"><span class="linenos">271</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Generator-272"><a href="#BigQuery.Generator-272"><span class="linenos">272</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Generator-273"><a href="#BigQuery.Generator-273"><span class="linenos">273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">:</span> <span class="s2">&quot;BIGNUMERIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-274"><a href="#BigQuery.Generator-274"><span class="linenos">274</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-275"><a href="#BigQuery.Generator-275"><span class="linenos">275</span></a> <span class="n">exp</span><span 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;BYTES&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-276"><a href="#BigQuery.Generator-276"><span class="linenos">276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">:</span> <span class="s2">&quot;BOOL&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-277"><a href="#BigQuery.Generator-277"><span class="linenos">277</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-278"><a href="#BigQuery.Generator-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMERIC&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-279"><a href="#BigQuery.Generator-279"><span class="linenos">279</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-280"><a href="#BigQuery.Generator-280"><span class="linenos">280</span></a> <span class="n">exp</span><span 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;FLOAT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-281"><a href="#BigQuery.Generator-281"><span class="linenos">281</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-282"><a href="#BigQuery.Generator-282"><span class="linenos">282</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-283"><a href="#BigQuery.Generator-283"><span class="linenos">283</span></a> <span class="n">exp</span><span 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;STRING&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-284"><a href="#BigQuery.Generator-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">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;INT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-285"><a href="#BigQuery.Generator-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">TEXT</span><span class="p">:</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-286"><a href="#BigQuery.Generator-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">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;DATETIME&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-287"><a href="#BigQuery.Generator-287"><span class="linenos">287</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-288"><a href="#BigQuery.Generator-288"><span class="linenos">288</span></a> <span class="n">exp</span><span 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;INT64&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-289"><a href="#BigQuery.Generator-289"><span class="linenos">289</span></a> <span class="n">exp</span><span 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;BYTES&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-290"><a href="#BigQuery.Generator-290"><span class="linenos">290</span></a> <span class="n">exp</span><span 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="BigQuery.Generator-291"><a href="#BigQuery.Generator-291"><span class="linenos">291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">:</span> <span class="s2">&quot;ANY TYPE&quot;</span><span class="p">,</span>
+</span><span id="BigQuery.Generator-292"><a href="#BigQuery.Generator-292"><span class="linenos">292</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Generator-293"><a href="#BigQuery.Generator-293"><span class="linenos">293</span></a>
+</span><span id="BigQuery.Generator-294"><a href="#BigQuery.Generator-294"><span class="linenos">294</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="BigQuery.Generator-295"><a href="#BigQuery.Generator-295"><span class="linenos">295</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="BigQuery.Generator-296"><a href="#BigQuery.Generator-296"><span class="linenos">296</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="BigQuery.Generator-297"><a href="#BigQuery.Generator-297"><span class="linenos">297</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="BigQuery.Generator-298"><a href="#BigQuery.Generator-298"><span class="linenos">298</span></a> <span class="p">}</span>
+</span><span id="BigQuery.Generator-299"><a href="#BigQuery.Generator-299"><span class="linenos">299</span></a>
+</span><span id="BigQuery.Generator-300"><a href="#BigQuery.Generator-300"><span class="linenos">300</span></a> <span class="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery.Generator-301"><a href="#BigQuery.Generator-301"><span class="linenos">301</span></a> <span class="n">first_arg</span> <span class="o">=</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><span id="BigQuery.Generator-302"><a href="#BigQuery.Generator-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">first_arg</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="BigQuery.Generator-303"><a href="#BigQuery.Generator-303"><span class="linenos">303</span></a> <span class="k">return</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">wrap</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">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="BigQuery.Generator-304"><a href="#BigQuery.Generator-304"><span class="linenos">304</span></a>
-</span><span id="BigQuery.Generator-305"><a href="#BigQuery.Generator-305"><span class="linenos">305</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="BigQuery.Generator-306"><a href="#BigQuery.Generator-306"><span class="linenos">306</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="BigQuery.Generator-307"><a href="#BigQuery.Generator-307"><span class="linenos">307</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Generator-308"><a href="#BigQuery.Generator-308"><span class="linenos">308</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; DISTINCT&#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="BigQuery.Generator-305"><a href="#BigQuery.Generator-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">inline_array_sql</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="BigQuery.Generator-306"><a href="#BigQuery.Generator-306"><span class="linenos">306</span></a>
+</span><span id="BigQuery.Generator-307"><a href="#BigQuery.Generator-307"><span class="linenos">307</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="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="BigQuery.Generator-308"><a href="#BigQuery.Generator-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
</span><span id="BigQuery.Generator-309"><a href="#BigQuery.Generator-309"><span class="linenos">309</span></a>
-</span><span id="BigQuery.Generator-310"><a href="#BigQuery.Generator-310"><span class="linenos">310</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="BigQuery.Generator-311"><a href="#BigQuery.Generator-311"><span class="linenos">311</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="BigQuery.Generator-312"><a href="#BigQuery.Generator-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Generator-313"><a href="#BigQuery.Generator-313"><span class="linenos">313</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; DISTINCT&#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="BigQuery.Generator-310"><a href="#BigQuery.Generator-310"><span class="linenos">310</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="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="BigQuery.Generator-311"><a href="#BigQuery.Generator-311"><span class="linenos">311</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
+</span><span id="BigQuery.Generator-312"><a href="#BigQuery.Generator-312"><span class="linenos">312</span></a>
+</span><span id="BigQuery.Generator-313"><a href="#BigQuery.Generator-313"><span class="linenos">313</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="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="BigQuery.Generator-314"><a href="#BigQuery.Generator-314"><span class="linenos">314</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
+</span><span id="BigQuery.Generator-315"><a href="#BigQuery.Generator-315"><span class="linenos">315</span></a>
+</span><span id="BigQuery.Generator-316"><a href="#BigQuery.Generator-316"><span class="linenos">316</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">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="BigQuery.Generator-317"><a href="#BigQuery.Generator-317"><span class="linenos">317</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><span id="BigQuery.Generator-318"><a href="#BigQuery.Generator-318"><span class="linenos">318</span></a>
+</span><span id="BigQuery.Generator-319"><a href="#BigQuery.Generator-319"><span class="linenos">319</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="BigQuery.Generator-320"><a href="#BigQuery.Generator-320"><span class="linenos">320</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="BigQuery.Generator-321"><a href="#BigQuery.Generator-321"><span class="linenos">321</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator-322"><a href="#BigQuery.Generator-322"><span class="linenos">322</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; DISTINCT&#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="BigQuery.Generator-323"><a href="#BigQuery.Generator-323"><span class="linenos">323</span></a>
+</span><span id="BigQuery.Generator-324"><a href="#BigQuery.Generator-324"><span class="linenos">324</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="BigQuery.Generator-325"><a href="#BigQuery.Generator-325"><span class="linenos">325</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="BigQuery.Generator-326"><a href="#BigQuery.Generator-326"><span class="linenos">326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator-327"><a href="#BigQuery.Generator-327"><span class="linenos">327</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; DISTINCT&#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="BigQuery.Generator-328"><a href="#BigQuery.Generator-328"><span class="linenos">328</span></a>
+</span><span id="BigQuery.Generator-329"><a href="#BigQuery.Generator-329"><span class="linenos">329</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="BigQuery.Generator-330"><a href="#BigQuery.Generator-330"><span class="linenos">330</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;OPTIONS&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -995,12 +1043,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.array_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.array_sql-286"><a href="#BigQuery.Generator.array_sql-286"><span class="linenos">286</span></a> <span class="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="BigQuery.Generator.array_sql-287"><a href="#BigQuery.Generator.array_sql-287"><span class="linenos">287</span></a> <span class="n">first_arg</span> <span class="o">=</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><span id="BigQuery.Generator.array_sql-288"><a href="#BigQuery.Generator.array_sql-288"><span class="linenos">288</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">first_arg</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="BigQuery.Generator.array_sql-289"><a href="#BigQuery.Generator.array_sql-289"><span class="linenos">289</span></a> <span class="k">return</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">wrap</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">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="BigQuery.Generator.array_sql-290"><a href="#BigQuery.Generator.array_sql-290"><span class="linenos">290</span></a>
-</span><span id="BigQuery.Generator.array_sql-291"><a href="#BigQuery.Generator.array_sql-291"><span class="linenos">291</span></a> <span class="k">return</span> <span class="n">inline_array_sql</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="BigQuery.Generator.array_sql-300"><a href="#BigQuery.Generator.array_sql-300"><span class="linenos">300</span></a> <span class="k">def</span> <span class="nf">array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="BigQuery.Generator.array_sql-301"><a href="#BigQuery.Generator.array_sql-301"><span class="linenos">301</span></a> <span class="n">first_arg</span> <span class="o">=</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><span id="BigQuery.Generator.array_sql-302"><a href="#BigQuery.Generator.array_sql-302"><span class="linenos">302</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">first_arg</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="BigQuery.Generator.array_sql-303"><a href="#BigQuery.Generator.array_sql-303"><span class="linenos">303</span></a> <span class="k">return</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">wrap</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">first_arg</span><span class="p">))</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="BigQuery.Generator.array_sql-304"><a href="#BigQuery.Generator.array_sql-304"><span class="linenos">304</span></a>
+</span><span id="BigQuery.Generator.array_sql-305"><a href="#BigQuery.Generator.array_sql-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">inline_array_sql</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>
@@ -1018,8 +1066,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.transaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.transaction_sql-293"><a href="#BigQuery.Generator.transaction_sql-293"><span class="linenos">293</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="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="BigQuery.Generator.transaction_sql-294"><a href="#BigQuery.Generator.transaction_sql-294"><span class="linenos">294</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.transaction_sql-307"><a href="#BigQuery.Generator.transaction_sql-307"><span class="linenos">307</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="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="BigQuery.Generator.transaction_sql-308"><a href="#BigQuery.Generator.transaction_sql-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN TRANSACTION&quot;</span>
</span></pre></div>
@@ -1037,8 +1085,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.commit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.commit_sql-296"><a href="#BigQuery.Generator.commit_sql-296"><span class="linenos">296</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="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="BigQuery.Generator.commit_sql-297"><a href="#BigQuery.Generator.commit_sql-297"><span class="linenos">297</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.commit_sql-310"><a href="#BigQuery.Generator.commit_sql-310"><span class="linenos">310</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="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="BigQuery.Generator.commit_sql-311"><a href="#BigQuery.Generator.commit_sql-311"><span class="linenos">311</span></a> <span class="k">return</span> <span class="s2">&quot;COMMIT TRANSACTION&quot;</span>
</span></pre></div>
@@ -1056,8 +1104,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.rollback_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.rollback_sql-299"><a href="#BigQuery.Generator.rollback_sql-299"><span class="linenos">299</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="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="BigQuery.Generator.rollback_sql-300"><a href="#BigQuery.Generator.rollback_sql-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.rollback_sql-313"><a href="#BigQuery.Generator.rollback_sql-313"><span class="linenos">313</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="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="BigQuery.Generator.rollback_sql-314"><a href="#BigQuery.Generator.rollback_sql-314"><span class="linenos">314</span></a> <span class="k">return</span> <span class="s2">&quot;ROLLBACK TRANSACTION&quot;</span>
</span></pre></div>
@@ -1075,8 +1123,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.in_unnest_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.in_unnest_op-302"><a href="#BigQuery.Generator.in_unnest_op-302"><span class="linenos">302</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">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="BigQuery.Generator.in_unnest_op-303"><a href="#BigQuery.Generator.in_unnest_op-303"><span class="linenos">303</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.in_unnest_op-316"><a href="#BigQuery.Generator.in_unnest_op-316"><span class="linenos">316</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">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="BigQuery.Generator.in_unnest_op-317"><a href="#BigQuery.Generator.in_unnest_op-317"><span class="linenos">317</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></pre></div>
@@ -1094,10 +1142,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.except_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.except_op-305"><a href="#BigQuery.Generator.except_op-305"><span class="linenos">305</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="BigQuery.Generator.except_op-306"><a href="#BigQuery.Generator.except_op-306"><span class="linenos">306</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="BigQuery.Generator.except_op-307"><a href="#BigQuery.Generator.except_op-307"><span class="linenos">307</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Generator.except_op-308"><a href="#BigQuery.Generator.except_op-308"><span class="linenos">308</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; DISTINCT&#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="BigQuery.Generator.except_op-319"><a href="#BigQuery.Generator.except_op-319"><span class="linenos">319</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="BigQuery.Generator.except_op-320"><a href="#BigQuery.Generator.except_op-320"><span class="linenos">320</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="BigQuery.Generator.except_op-321"><a href="#BigQuery.Generator.except_op-321"><span class="linenos">321</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator.except_op-322"><a href="#BigQuery.Generator.except_op-322"><span class="linenos">322</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; DISTINCT&#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>
@@ -1115,10 +1163,29 @@ Default: True</li>
</div>
<a class="headerlink" href="#BigQuery.Generator.intersect_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.intersect_op-310"><a href="#BigQuery.Generator.intersect_op-310"><span class="linenos">310</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="BigQuery.Generator.intersect_op-311"><a href="#BigQuery.Generator.intersect_op-311"><span class="linenos">311</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="BigQuery.Generator.intersect_op-312"><a href="#BigQuery.Generator.intersect_op-312"><span class="linenos">312</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
-</span><span id="BigQuery.Generator.intersect_op-313"><a href="#BigQuery.Generator.intersect_op-313"><span class="linenos">313</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; DISTINCT&#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="BigQuery.Generator.intersect_op-324"><a href="#BigQuery.Generator.intersect_op-324"><span class="linenos">324</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="BigQuery.Generator.intersect_op-325"><a href="#BigQuery.Generator.intersect_op-325"><span class="linenos">325</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="BigQuery.Generator.intersect_op-326"><a href="#BigQuery.Generator.intersect_op-326"><span class="linenos">326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT without DISTINCT is not supported in BigQuery&quot;</span><span class="p">)</span>
+</span><span id="BigQuery.Generator.intersect_op-327"><a href="#BigQuery.Generator.intersect_op-327"><span class="linenos">327</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; DISTINCT&#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>
+
+
+
+
+ </div>
+ <div id="BigQuery.Generator.with_properties" class="classattr">
+ <input id="BigQuery.Generator.with_properties-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">with_properties</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">properties</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Properties">sqlglot.expressions.Properties</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="BigQuery.Generator.with_properties-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#BigQuery.Generator.with_properties"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BigQuery.Generator.with_properties-329"><a href="#BigQuery.Generator.with_properties-329"><span class="linenos">329</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="BigQuery.Generator.with_properties-330"><a href="#BigQuery.Generator.with_properties-330"><span class="linenos">330</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;OPTIONS&quot;</span><span class="p">))</span>
</span></pre></div>
@@ -1179,7 +1246,6 @@ Default: True</li>
<dd id="BigQuery.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
<dd id="BigQuery.Generator.root_properties" class="function"><a href="../generator.html#Generator.root_properties">root_properties</a></dd>
<dd id="BigQuery.Generator.properties" class="function"><a href="../generator.html#Generator.properties">properties</a></dd>
- <dd id="BigQuery.Generator.with_properties" class="function"><a href="../generator.html#Generator.with_properties">with_properties</a></dd>
<dd id="BigQuery.Generator.locate_properties" class="function"><a href="../generator.html#Generator.locate_properties">locate_properties</a></dd>
<dd id="BigQuery.Generator.property_sql" class="function"><a href="../generator.html#Generator.property_sql">property_sql</a></dd>
<dd id="BigQuery.Generator.likeproperty_sql" class="function"><a href="../generator.html#Generator.likeproperty_sql">likeproperty_sql</a></dd>
@@ -1247,7 +1313,7 @@ Default: True</li>
<dd id="BigQuery.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="BigQuery.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="BigQuery.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="BigQuery.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="BigQuery.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="BigQuery.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="BigQuery.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="BigQuery.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1256,6 +1322,7 @@ Default: True</li>
<dd id="BigQuery.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="BigQuery.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="BigQuery.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="BigQuery.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="BigQuery.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="BigQuery.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="BigQuery.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/clickhouse.html b/docs/sqlglot/dialects/clickhouse.html
index f1de27d..3d86e48 100644
--- a/docs/sqlglot/dialects/clickhouse.html
+++ b/docs/sqlglot/dialects/clickhouse.html
@@ -910,7 +910,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="ClickHouse.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="ClickHouse.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="ClickHouse.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="ClickHouse.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="ClickHouse.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="ClickHouse.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="ClickHouse.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -919,6 +919,7 @@ Default: True</li>
<dd id="ClickHouse.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="ClickHouse.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="ClickHouse.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="ClickHouse.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="ClickHouse.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="ClickHouse.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="ClickHouse.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/databricks.html b/docs/sqlglot/dialects/databricks.html
index c6b2049..d7f8063 100644
--- a/docs/sqlglot/dialects/databricks.html
+++ b/docs/sqlglot/dialects/databricks.html
@@ -79,7 +79,7 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
-</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">parse_date_delta</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.spark</span> <span class="kn">import</span> <span class="n">Spark</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.tsql</span> <span class="kn">import</span> <span class="n">generate_date_delta_with_unit_sql</span>
@@ -108,17 +108,22 @@
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">),</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="p">}</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a>
-</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a>
-</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="p">}</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="p">[</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</span><span class="p">,</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="p">]</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="p">),</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span 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-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="p">}</span>
+</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="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos">46</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-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="p">}</span>
</span></pre></div>
@@ -156,17 +161,22 @@
</span><span id="Databricks-30"><a href="#Databricks-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks-31"><a href="#Databricks-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks-32"><a href="#Databricks-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">),</span>
-</span><span id="Databricks-33"><a href="#Databricks-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Databricks-34"><a href="#Databricks-34"><span class="linenos">34</span></a> <span class="p">}</span>
-</span><span id="Databricks-35"><a href="#Databricks-35"><span class="linenos">35</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
-</span><span id="Databricks-36"><a href="#Databricks-36"><span class="linenos">36</span></a>
-</span><span id="Databricks-37"><a href="#Databricks-37"><span class="linenos">37</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Databricks-38"><a href="#Databricks-38"><span class="linenos">38</span></a>
-</span><span id="Databricks-39"><a href="#Databricks-39"><span class="linenos">39</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Databricks-40"><a href="#Databricks-40"><span class="linenos">40</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Databricks-41"><a href="#Databricks-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="Databricks-42"><a href="#Databricks-42"><span class="linenos">42</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
-</span><span id="Databricks-43"><a href="#Databricks-43"><span class="linenos">43</span></a> <span class="p">}</span>
+</span><span id="Databricks-33"><a href="#Databricks-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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="Databricks-34"><a href="#Databricks-34"><span class="linenos">34</span></a> <span class="p">[</span>
+</span><span id="Databricks-35"><a href="#Databricks-35"><span class="linenos">35</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
+</span><span id="Databricks-36"><a href="#Databricks-36"><span class="linenos">36</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</span><span class="p">,</span>
+</span><span id="Databricks-37"><a href="#Databricks-37"><span class="linenos">37</span></a> <span class="p">]</span>
+</span><span id="Databricks-38"><a href="#Databricks-38"><span class="linenos">38</span></a> <span class="p">),</span>
+</span><span id="Databricks-39"><a href="#Databricks-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Databricks-40"><a href="#Databricks-40"><span class="linenos">40</span></a> <span class="p">}</span>
+</span><span id="Databricks-41"><a href="#Databricks-41"><span class="linenos">41</span></a>
+</span><span id="Databricks-42"><a href="#Databricks-42"><span class="linenos">42</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Databricks-43"><a href="#Databricks-43"><span class="linenos">43</span></a>
+</span><span id="Databricks-44"><a href="#Databricks-44"><span class="linenos">44</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Databricks-45"><a href="#Databricks-45"><span class="linenos">45</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Databricks-46"><a href="#Databricks-46"><span class="linenos">46</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="Databricks-47"><a href="#Databricks-47"><span class="linenos">47</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
+</span><span id="Databricks-48"><a href="#Databricks-48"><span class="linenos">48</span></a> <span class="p">}</span>
</span></pre></div>
@@ -277,11 +287,16 @@ Default: "nulls_are_small"</li>
</span><span id="Databricks.Generator-30"><a href="#Databricks.Generator-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks.Generator-31"><a href="#Databricks.Generator-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="Databricks.Generator-32"><a href="#Databricks.Generator-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">binary</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">),</span>
-</span><span id="Databricks.Generator-33"><a href="#Databricks.Generator-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Databricks.Generator-34"><a href="#Databricks.Generator-34"><span class="linenos">34</span></a> <span class="p">}</span>
-</span><span id="Databricks.Generator-35"><a href="#Databricks.Generator-35"><span class="linenos">35</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="c1"># Remove the ELIMINATE_QUALIFY transformation</span>
-</span><span id="Databricks.Generator-36"><a href="#Databricks.Generator-36"><span class="linenos">36</span></a>
-</span><span id="Databricks.Generator-37"><a href="#Databricks.Generator-37"><span class="linenos">37</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Databricks.Generator-33"><a href="#Databricks.Generator-33"><span class="linenos">33</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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="Databricks.Generator-34"><a href="#Databricks.Generator-34"><span class="linenos">34</span></a> <span class="p">[</span>
+</span><span id="Databricks.Generator-35"><a href="#Databricks.Generator-35"><span class="linenos">35</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">,</span>
+</span><span id="Databricks.Generator-36"><a href="#Databricks.Generator-36"><span class="linenos">36</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</span><span class="p">,</span>
+</span><span id="Databricks.Generator-37"><a href="#Databricks.Generator-37"><span class="linenos">37</span></a> <span class="p">]</span>
+</span><span id="Databricks.Generator-38"><a href="#Databricks.Generator-38"><span class="linenos">38</span></a> <span class="p">),</span>
+</span><span id="Databricks.Generator-39"><a href="#Databricks.Generator-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Databricks.Generator-40"><a href="#Databricks.Generator-40"><span class="linenos">40</span></a> <span class="p">}</span>
+</span><span id="Databricks.Generator-41"><a href="#Databricks.Generator-41"><span class="linenos">41</span></a>
+</span><span id="Databricks.Generator-42"><a href="#Databricks.Generator-42"><span class="linenos">42</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
</span></pre></div>
@@ -451,7 +466,7 @@ Default: True</li>
<dd id="Databricks.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Databricks.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Databricks.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Databricks.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Databricks.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Databricks.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Databricks.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Databricks.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -460,6 +475,7 @@ Default: True</li>
<dd id="Databricks.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Databricks.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Databricks.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Databricks.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Databricks.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Databricks.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Databricks.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
@@ -557,7 +573,11 @@ Default: True</li>
</div>
<div><dt><a href="spark.html#Spark.Generator">sqlglot.dialects.spark.Spark.Generator</a></dt>
- <dd id="Databricks.Generator.cast_sql" class="function"><a href="spark.html#Spark.Generator.cast_sql">cast_sql</a></dd>
+ <dd id="Databricks.Generator.datediff_sql" class="function"><a href="spark.html#Spark.Generator.datediff_sql">datediff_sql</a></dd>
+
+ </div>
+ <div><dt><a href="spark2.html#Spark2.Generator">sqlglot.dialects.spark2.Spark2.Generator</a></dt>
+ <dd id="Databricks.Generator.cast_sql" class="function"><a href="spark2.html#Spark2.Generator.cast_sql">cast_sql</a></dd>
</div>
<div><dt><a href="hive.html#Hive.Generator">sqlglot.dialects.hive.Hive.Generator</a></dt>
@@ -574,17 +594,17 @@ Default: True</li>
<div class="attr class">
<span class="def">class</span>
- <span class="name">Databricks.Tokenizer</span><wbr>(<span class="base"><a href="spark.html#Spark.Tokenizer">sqlglot.dialects.spark.Spark.Tokenizer</a></span>):
+ <span class="name">Databricks.Tokenizer</span><wbr>(<span class="base"><a href="spark2.html#Spark2.Tokenizer">sqlglot.dialects.spark2.Spark2.Tokenizer</a></span>):
<label class="view-source-button" for="Databricks.Tokenizer-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Databricks.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Tokenizer-39"><a href="#Databricks.Tokenizer-39"><span class="linenos">39</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Databricks.Tokenizer-40"><a href="#Databricks.Tokenizer-40"><span class="linenos">40</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Databricks.Tokenizer-41"><a href="#Databricks.Tokenizer-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
-</span><span id="Databricks.Tokenizer-42"><a href="#Databricks.Tokenizer-42"><span class="linenos">42</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
-</span><span id="Databricks.Tokenizer-43"><a href="#Databricks.Tokenizer-43"><span class="linenos">43</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Databricks.Tokenizer-44"><a href="#Databricks.Tokenizer-44"><span class="linenos">44</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Databricks.Tokenizer-45"><a href="#Databricks.Tokenizer-45"><span class="linenos">45</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Databricks.Tokenizer-46"><a href="#Databricks.Tokenizer-46"><span class="linenos">46</span></a> <span class="o">**</span><span class="n">Spark</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
+</span><span id="Databricks.Tokenizer-47"><a href="#Databricks.Tokenizer-47"><span class="linenos">47</span></a> <span class="s2">&quot;$&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">,</span>
+</span><span id="Databricks.Tokenizer-48"><a href="#Databricks.Tokenizer-48"><span class="linenos">48</span></a> <span class="p">}</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/dialect.html b/docs/sqlglot/dialects/dialect.html
index 16d62bb..bae1758 100644
--- a/docs/sqlglot/dialects/dialect.html
+++ b/docs/sqlglot/dialects/dialect.html
@@ -70,6 +70,9 @@
<a class="variable" href="#Dialects.SPARK">SPARK</a>
</li>
<li>
+ <a class="variable" href="#Dialects.SPARK2">SPARK2</a>
+ </li>
+ <li>
<a class="variable" href="#Dialects.SQLITE">SQLITE</a>
</li>
<li>
@@ -284,480 +287,481 @@
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&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">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
+</span><span id="L-37"><a href="#L-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="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">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
</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">class</span> <span class="nc">_Dialect</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</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-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="nd">@classmethod</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</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-46"><a href="#L-46"><span class="linenos"> 46</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-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="nd">@classmethod</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</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-51"><a href="#L-51"><span class="linenos"> 51</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-52"><a href="#L-52"><span class="linenos"> 52</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-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="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-55"><a href="#L-55"><span class="linenos"> 55</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-56"><a href="#L-56"><span class="linenos"> 56</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-57"><a href="#L-57"><span class="linenos"> 57</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-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">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-60"><a href="#L-60"><span class="linenos"> 60</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-61"><a href="#L-61"><span class="linenos"> 61</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-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">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-64"><a href="#L-64"><span class="linenos"> 64</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-65"><a href="#L-65"><span class="linenos"> 65</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-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">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-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="p">)[</span><span class="mi">0</span><span class="p">]</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="p">(</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_BIT_STRINGS</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="ow">and</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="p">):</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">bs_start</span><span class="p">,</span> <span class="n">bs_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">_BIT_STRINGS</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-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">[</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="p">]</span> <span class="o">=</span> <span 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="n">bs_start</span><span class="si">}{</span><span class="nb">int</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="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">))</span><span class="si">:</span><span class="s2">b</span><span class="si">}{</span><span class="n">bs_end</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">if</span> <span class="p">(</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_HEX_STRINGS</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="ow">and</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="p">):</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">hs_start</span><span class="p">,</span> <span class="n">hs_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">_HEX_STRINGS</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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">[</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="p">]</span> <span class="o">=</span> <span 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="n">hs_start</span><span class="si">}{</span><span class="nb">int</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="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">))</span><span class="si">:</span><span class="s2">X</span><span class="si">}{</span><span class="n">hs_end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="ow">and</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="p">):</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">be_start</span><span class="p">,</span> <span class="n">be_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">_BYTE_STRINGS</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-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">[</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="p">]</span> <span class="o">=</span> <span 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="n">be_start</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span 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">be_end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="n">klass</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
+</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">class</span> <span class="nc">_Dialect</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</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-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="nd">@classmethod</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</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-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="nd">@classmethod</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</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-52"><a href="#L-52"><span class="linenos"> 52</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-53"><a href="#L-53"><span class="linenos"> 53</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-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">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-56"><a href="#L-56"><span class="linenos"> 56</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-57"><a href="#L-57"><span class="linenos"> 57</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-58"><a href="#L-58"><span class="linenos"> 58</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-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">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-61"><a href="#L-61"><span class="linenos"> 61</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-62"><a href="#L-62"><span class="linenos"> 62</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-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">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-65"><a href="#L-65"><span class="linenos"> 65</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-66"><a href="#L-66"><span class="linenos"> 66</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-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">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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</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-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="p">)[</span><span class="mi">0</span><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">if</span> <span class="p">(</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_BIT_STRINGS</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="ow">and</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">):</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">bs_start</span><span class="p">,</span> <span class="n">bs_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">_BIT_STRINGS</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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">[</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitString</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="p">]</span> <span class="o">=</span> <span 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="n">bs_start</span><span class="si">}{</span><span class="nb">int</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="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">))</span><span class="si">:</span><span class="s2">b</span><span class="si">}{</span><span class="n">bs_end</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">if</span> <span class="p">(</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_HEX_STRINGS</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="ow">and</span> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="p">):</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">hs_start</span><span class="p">,</span> <span class="n">hs_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">_HEX_STRINGS</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-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">[</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="p">]</span> <span class="o">=</span> <span 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="n">hs_start</span><span class="si">}{</span><span class="nb">int</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="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">))</span><span class="si">:</span><span class="s2">X</span><span class="si">}{</span><span class="n">hs_end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">tokenizer_class</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="ow">and</span> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="p">):</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">be_start</span><span class="p">,</span> <span class="n">be_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">_BYTE_STRINGS</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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">generator_class</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">[</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="p">]</span> <span class="o">=</span> <span 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="n">be_start</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span 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">be_end</span><span class="si">}</span><span class="s2">&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="n">klass</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">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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">unnest_column_only</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span 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="p">]</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</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-106"><a href="#L-106"><span class="linenos">106</span></a>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="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-108"><a href="#L-108"><span class="linenos">108</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-109"><a href="#L-109"><span class="linenos">109</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-110"><a href="#L-110"><span class="linenos">110</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-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="c1"># autofilled</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">quote_start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">identifier_start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">identifier_end</span> <span class="o">=</span> <span class="kc">None</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="n">time_trie</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">inverse_time_mapping</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">inverse_time_trie</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="kc">None</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="nd">@classmethod</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</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">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-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="bp">cls</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">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</span><span class="p">)</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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</span><span class="si">}</span><span class="s2">&#39;&quot;</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">return</span> <span class="n">result</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">@classmethod</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <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="c1"># the time formats are quoted</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="p">)</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="p">)</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="p">)</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="p">)</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">expression</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">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-163"><a href="#L-163"><span class="linenos">163</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-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">parse_into</span><span class="p">(</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</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-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><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">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</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><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">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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="p">[</span><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="o">**</span><span class="n">opts</span><span class="p">)</span> <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-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">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-177"><a href="#L-177"><span class="linenos">177</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-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="nd">@property</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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="c1"># type: ignore</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</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-184"><a href="#L-184"><span class="linenos">184</span></a>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</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="c1"># type: ignore</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="p">},</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="p">)</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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="c1"># type: ignore</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="s2">&quot;quote_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_start</span><span class="p">,</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="s2">&quot;quote_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_end</span><span class="p">,</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">&quot;identifier_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_start</span><span class="p">,</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">&quot;identifier_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_end</span><span class="p">,</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">&quot;string_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;identifier_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;time_mapping&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">,</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;time_trie&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_trie</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">,</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="p">}</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="p">)</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a><span class="k">class</span> <span class="nc">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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">unnest_column_only</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">alias_post_tablesample</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 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="p">]</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</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-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="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-109"><a href="#L-109"><span class="linenos">109</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-110"><a href="#L-110"><span class="linenos">110</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-111"><a href="#L-111"><span class="linenos">111</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-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="c1"># autofilled</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">quote_start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">identifier_start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">identifier_end</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">time_trie</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">inverse_time_mapping</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">inverse_time_trie</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</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">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-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="bp">cls</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="o">.</span><span class="vm">__class__</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="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</span><span class="p">)</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</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-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="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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <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="c1"># the time formats are quoted</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="p">)</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="p">)</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="p">)</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span 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">expression</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">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-164"><a href="#L-164"><span class="linenos">164</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-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">parse_into</span><span class="p">(</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</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-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="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">t</span><span class="o">.</span><span class="n">Optional</span><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">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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><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">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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="p">[</span><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="o">**</span><span class="n">opts</span><span class="p">)</span> <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-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="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-178"><a href="#L-178"><span class="linenos">178</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-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="nd">@property</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</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="c1"># type: ignore</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</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-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="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-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">parser_class</span><span class="p">(</span> <span class="c1"># type: ignore</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <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><span id="L-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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="c1"># type: ignore</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <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;quote_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_start</span><span class="p">,</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="s2">&quot;quote_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_end</span><span class="p">,</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">&quot;identifier_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_start</span><span class="p">,</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">&quot;identifier_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_end</span><span class="p">,</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;string_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;identifier_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;time_mapping&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">,</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;time_trie&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_trie</span><span class="p">,</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="p">}</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <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="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-218"><a href="#L-218"><span class="linenos">218</span></a>
+</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="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-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="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-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</span></a>
+</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="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-222"><a href="#L-222"><span class="linenos">222</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-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="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-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</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-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">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-228"><a href="#L-228"><span class="linenos">228</span></a>
+</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">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-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</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-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="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-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;true&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="p">)</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</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-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">func</span><span class="p">(</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;true&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <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="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">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">JSONBExtract</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="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-238"><a href="#L-238"><span class="linenos">238</span></a>
+</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="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">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">JSONBExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</span></a>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_scalar_sql</span><span class="p">(</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</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">JSONExtractScalar</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</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">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-244"><a href="#L-244"><span class="linenos">244</span></a>
+</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">arrow_json_extract_scalar_sql</span><span class="p">(</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</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">JSONExtractScalar</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="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-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">inline_array_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">Array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="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="si">}</span><span class="s2">]&quot;</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>
+</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">def</span> <span class="nf">inline_array_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">Array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="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="si">}</span><span class="s2">]&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="k">def</span> <span class="nf">no_ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">like_sql</span><span class="p">(</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">(</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Lower</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><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">expression</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;expression&quot;</span><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 class="p">)</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a><span class="k">def</span> <span class="nf">no_ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">like_sql</span><span class="p">(</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">(</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Lower</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><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">expression</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;expression&quot;</span><span class="p">],</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="p">)</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="p">)</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a><span class="k">def</span> <span class="nf">no_paren_current_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</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">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-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE AT TIME ZONE </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-262"><a href="#L-262"><span class="linenos">262</span></a>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a><span class="k">def</span> <span class="nf">no_paren_current_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE AT TIME ZONE </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-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="k">def</span> <span class="nf">no_recursive_cte_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</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;recursive&quot;</span><span class="p">):</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Recursive CTEs are unsupported&quot;</span><span class="p">)</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;recursive&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>
+</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="k">def</span> <span class="nf">no_recursive_cte_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</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;recursive&quot;</span><span class="p">):</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Recursive CTEs are unsupported&quot;</span><span class="p">)</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;recursive&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="k">def</span> <span class="nf">no_safe_divide_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">SafeDivide</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="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-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IF(</span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2"> &lt;&gt; 0, </span><span class="si">{</span><span class="n">n</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2">, NULL)&quot;</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>
+</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="k">def</span> <span class="nf">no_safe_divide_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">SafeDivide</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="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-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IF(</span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2"> &lt;&gt; 0, </span><span class="si">{</span><span class="n">n</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2">, NULL)&quot;</span>
</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="k">def</span> <span class="nf">no_tablesample_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">TableSample</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;TABLESAMPLE unsupported&quot;</span><span class="p">)</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</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="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>
+</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">def</span> <span class="nf">no_tablesample_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">TableSample</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;TABLESAMPLE unsupported&quot;</span><span class="p">)</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</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="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a><span class="k">def</span> <span class="nf">no_pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;PIVOT unsupported&quot;</span><span class="p">)</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</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><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
+</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="k">def</span> <span class="nf">no_pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;PIVOT unsupported&quot;</span><span class="p">)</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</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><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="k">def</span> <span class="nf">no_trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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 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><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>
+</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">def</span> <span class="nf">no_trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</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><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="k">def</span> <span class="nf">no_properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Properties unsupported&quot;</span><span class="p">)</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>
+</span><span id="L-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="k">def</span> <span class="nf">no_properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Properties unsupported&quot;</span><span class="p">)</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>
+</span><span id="L-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">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>
+</span><span id="L-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="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">if</span> <span class="n">position</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="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>
+</span><span id="L-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="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
+</span><span id="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">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
+</span><span id="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">args</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="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="sd"> Args:</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd"> dialect: target sql dialect.</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd"> default: the default format, True being time.</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a><span class="sd"> Returns:</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="p">),</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="p">)</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="k">return</span> <span class="n">_format_time</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>
+</span><span id="L-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">format_time_lambda</span><span class="p">(</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
+</span><span id="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="sd"> Args:</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd"> dialect: target sql dialect.</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a><span class="sd"> default: the default format, True being time.</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="sd"> Returns:</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a><span class="sd"> &quot;&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="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="p">),</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span 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">return</span> <span class="n">_format_time</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">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a><span class="sd"> columns are removed from the create statement.</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>
+</span><span id="L-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">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a><span class="sd"> columns are removed from the create statement.</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
+</span><span id="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="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
+</span><span id="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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">return</span> <span class="n">inner_func</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="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">inner_func</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">parse_date_delta_with_interval</span><span class="p">(</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="p">)</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a>
+</span><span id="L-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">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
+</span><span id="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">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="k">return</span> <span class="kc">None</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">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="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">return</span> <span class="n">expression_class</span><span class="p">(</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="p">)</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">func</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">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span><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">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="p">)</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">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_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <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="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="p">)</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
+</span><span id="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><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="p">)</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a>
+</span><span id="L-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">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="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">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
+</span><span id="L-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">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="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="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-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">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>
+</span><span id="L-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">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
+</span><span id="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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a>
+</span><span id="L-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">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
+</span><span id="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="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
+</span><span id="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">trim_sql</span><span class="p">(</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><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
+</span><span id="L-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">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-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;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
+</span><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">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
+</span><span id="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">_ts_or_ds_to_date_sql</span>
</span></pre></div>
@@ -787,14 +791,15 @@
</span><span id="Dialects-29"><a href="#Dialects-29"><span class="linenos">29</span></a> <span class="n">REDSHIFT</span> <span class="o">=</span> <span class="s2">&quot;redshift&quot;</span>
</span><span id="Dialects-30"><a href="#Dialects-30"><span class="linenos">30</span></a> <span class="n">SNOWFLAKE</span> <span class="o">=</span> <span class="s2">&quot;snowflake&quot;</span>
</span><span id="Dialects-31"><a href="#Dialects-31"><span class="linenos">31</span></a> <span class="n">SPARK</span> <span class="o">=</span> <span class="s2">&quot;spark&quot;</span>
-</span><span id="Dialects-32"><a href="#Dialects-32"><span class="linenos">32</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
-</span><span id="Dialects-33"><a href="#Dialects-33"><span class="linenos">33</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
-</span><span id="Dialects-34"><a href="#Dialects-34"><span class="linenos">34</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
-</span><span id="Dialects-35"><a href="#Dialects-35"><span class="linenos">35</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
-</span><span id="Dialects-36"><a href="#Dialects-36"><span class="linenos">36</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&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">DRILL</span> <span class="o">=</span> <span class="s2">&quot;drill&quot;</span>
-</span><span id="Dialects-39"><a href="#Dialects-39"><span class="linenos">39</span></a> <span class="n">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
+</span><span id="Dialects-32"><a href="#Dialects-32"><span class="linenos">32</span></a> <span class="n">SPARK2</span> <span class="o">=</span> <span class="s2">&quot;spark2&quot;</span>
+</span><span id="Dialects-33"><a href="#Dialects-33"><span class="linenos">33</span></a> <span class="n">SQLITE</span> <span class="o">=</span> <span class="s2">&quot;sqlite&quot;</span>
+</span><span id="Dialects-34"><a href="#Dialects-34"><span class="linenos">34</span></a> <span class="n">STARROCKS</span> <span class="o">=</span> <span class="s2">&quot;starrocks&quot;</span>
+</span><span id="Dialects-35"><a href="#Dialects-35"><span class="linenos">35</span></a> <span class="n">TABLEAU</span> <span class="o">=</span> <span class="s2">&quot;tableau&quot;</span>
+</span><span id="Dialects-36"><a href="#Dialects-36"><span class="linenos">36</span></a> <span class="n">TRINO</span> <span class="o">=</span> <span class="s2">&quot;trino&quot;</span>
+</span><span id="Dialects-37"><a href="#Dialects-37"><span class="linenos">37</span></a> <span class="n">TSQL</span> <span class="o">=</span> <span class="s2">&quot;tsql&quot;</span>
+</span><span id="Dialects-38"><a href="#Dialects-38"><span class="linenos">38</span></a> <span class="n">DATABRICKS</span> <span class="o">=</span> <span class="s2">&quot;databricks&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">TERADATA</span> <span class="o">=</span> <span class="s2">&quot;teradata&quot;</span>
</span></pre></div>
@@ -946,6 +951,18 @@
</div>
+ <div id="Dialects.SPARK2" class="classattr">
+ <div class="attr variable">
+ <span class="name">SPARK2</span> =
+<span class="default_value">&lt;<a href="#Dialects.SPARK2">Dialects.SPARK2</a>: &#39;spark2&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#Dialects.SPARK2"></a>
+
+
+
+ </div>
<div id="Dialects.SQLITE" class="classattr">
<div class="attr variable">
<span class="name">SQLITE</span> =
@@ -1114,121 +1131,121 @@
</div>
<a class="headerlink" href="#Dialect"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect-101"><a href="#Dialect-101"><span class="linenos">101</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-102"><a href="#Dialect-102"><span class="linenos">102</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Dialect-103"><a href="#Dialect-103"><span class="linenos">103</span></a> <span class="n">unnest_column_only</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-104"><a href="#Dialect-104"><span class="linenos">104</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Dialect-105"><a href="#Dialect-105"><span class="linenos">105</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="p">]</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
-</span><span id="Dialect-106"><a href="#Dialect-106"><span class="linenos">106</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-107"><a href="#Dialect-107"><span class="linenos">107</span></a>
-</span><span id="Dialect-108"><a href="#Dialect-108"><span class="linenos">108</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-109"><a href="#Dialect-109"><span class="linenos">109</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-110"><a href="#Dialect-110"><span class="linenos">110</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-111"><a href="#Dialect-111"><span class="linenos">111</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-112"><a href="#Dialect-112"><span class="linenos">112</span></a>
-</span><span id="Dialect-113"><a href="#Dialect-113"><span class="linenos">113</span></a> <span class="c1"># autofilled</span>
-</span><span id="Dialect-114"><a href="#Dialect-114"><span class="linenos">114</span></a> <span class="n">quote_start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-115"><a href="#Dialect-115"><span class="linenos">115</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-116"><a href="#Dialect-116"><span class="linenos">116</span></a> <span class="n">identifier_start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-117"><a href="#Dialect-117"><span class="linenos">117</span></a> <span class="n">identifier_end</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-118"><a href="#Dialect-118"><span class="linenos">118</span></a>
-</span><span id="Dialect-119"><a href="#Dialect-119"><span class="linenos">119</span></a> <span class="n">time_trie</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-120"><a href="#Dialect-120"><span class="linenos">120</span></a> <span class="n">inverse_time_mapping</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-121"><a href="#Dialect-121"><span class="linenos">121</span></a> <span class="n">inverse_time_trie</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-122"><a href="#Dialect-122"><span class="linenos">122</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-123"><a href="#Dialect-123"><span class="linenos">123</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-124"><a href="#Dialect-124"><span class="linenos">124</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Dialect-125"><a href="#Dialect-125"><span class="linenos">125</span></a>
-</span><span id="Dialect-126"><a href="#Dialect-126"><span class="linenos">126</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-127"><a href="#Dialect-127"><span class="linenos">127</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">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="Dialect-128"><a href="#Dialect-128"><span class="linenos">128</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-129"><a href="#Dialect-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="bp">cls</span>
-</span><span id="Dialect-130"><a href="#Dialect-130"><span class="linenos">130</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-131"><a href="#Dialect-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="Dialect-132"><a href="#Dialect-132"><span class="linenos">132</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-133"><a href="#Dialect-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="Dialect-134"><a href="#Dialect-134"><span class="linenos">134</span></a>
-</span><span id="Dialect-135"><a href="#Dialect-135"><span class="linenos">135</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</span><span class="p">)</span>
-</span><span id="Dialect-136"><a href="#Dialect-136"><span class="linenos">136</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-137"><a href="#Dialect-137"><span class="linenos">137</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</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="Dialect-138"><a href="#Dialect-138"><span class="linenos">138</span></a>
-</span><span id="Dialect-139"><a href="#Dialect-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">result</span>
-</span><span id="Dialect-140"><a href="#Dialect-140"><span class="linenos">140</span></a>
-</span><span id="Dialect-141"><a href="#Dialect-141"><span class="linenos">141</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect-142"><a href="#Dialect-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="Dialect-143"><a href="#Dialect-143"><span class="linenos">143</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-144"><a href="#Dialect-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="Dialect-145"><a href="#Dialect-145"><span class="linenos">145</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-146"><a href="#Dialect-146"><span class="linenos">146</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-147"><a href="#Dialect-147"><span class="linenos">147</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Dialect-148"><a href="#Dialect-148"><span class="linenos">148</span></a> <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="c1"># the time formats are quoted</span>
-</span><span id="Dialect-149"><a href="#Dialect-149"><span class="linenos">149</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
-</span><span id="Dialect-150"><a href="#Dialect-150"><span class="linenos">150</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
-</span><span id="Dialect-151"><a href="#Dialect-151"><span class="linenos">151</span></a> <span class="p">)</span>
-</span><span id="Dialect-152"><a href="#Dialect-152"><span class="linenos">152</span></a> <span class="p">)</span>
-</span><span id="Dialect-153"><a href="#Dialect-153"><span class="linenos">153</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-154"><a href="#Dialect-154"><span class="linenos">154</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-155"><a href="#Dialect-155"><span class="linenos">155</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Dialect-156"><a href="#Dialect-156"><span class="linenos">156</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Dialect-157"><a href="#Dialect-157"><span class="linenos">157</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
-</span><span id="Dialect-158"><a href="#Dialect-158"><span class="linenos">158</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
-</span><span id="Dialect-159"><a href="#Dialect-159"><span class="linenos">159</span></a> <span class="p">)</span>
-</span><span id="Dialect-160"><a href="#Dialect-160"><span class="linenos">160</span></a> <span class="p">)</span>
-</span><span id="Dialect-161"><a href="#Dialect-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="n">expression</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="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-164"><a href="#Dialect-164"><span class="linenos">164</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-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="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Dialect-167"><a href="#Dialect-167"><span class="linenos">167</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-168"><a href="#Dialect-168"><span class="linenos">168</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-169"><a href="#Dialect-169"><span class="linenos">169</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-170"><a href="#Dialect-170"><span class="linenos">170</span></a>
-</span><span id="Dialect-171"><a href="#Dialect-171"><span class="linenos">171</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">t</span><span class="o">.</span><span class="n">Optional</span><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">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Dialect-172"><a href="#Dialect-172"><span class="linenos">172</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><span id="Dialect-173"><a href="#Dialect-173"><span class="linenos">173</span></a>
-</span><span id="Dialect-174"><a href="#Dialect-174"><span class="linenos">174</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-175"><a href="#Dialect-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="p">[</span><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="o">**</span><span class="n">opts</span><span class="p">)</span> <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-176"><a href="#Dialect-176"><span class="linenos">176</span></a>
-</span><span id="Dialect-177"><a href="#Dialect-177"><span class="linenos">177</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-178"><a href="#Dialect-178"><span class="linenos">178</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-179"><a href="#Dialect-179"><span class="linenos">179</span></a>
-</span><span id="Dialect-180"><a href="#Dialect-180"><span class="linenos">180</span></a> <span class="nd">@property</span>
-</span><span id="Dialect-181"><a href="#Dialect-181"><span class="linenos">181</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-182"><a href="#Dialect-182"><span class="linenos">182</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-183"><a href="#Dialect-183"><span class="linenos">183</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="c1"># type: ignore</span>
-</span><span id="Dialect-184"><a href="#Dialect-184"><span class="linenos">184</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-185"><a href="#Dialect-185"><span class="linenos">185</span></a>
-</span><span id="Dialect-186"><a href="#Dialect-186"><span class="linenos">186</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-187"><a href="#Dialect-187"><span class="linenos">187</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="c1"># type: ignore</span>
-</span><span id="Dialect-188"><a href="#Dialect-188"><span class="linenos">188</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="Dialect-189"><a href="#Dialect-189"><span class="linenos">189</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
-</span><span id="Dialect-190"><a href="#Dialect-190"><span class="linenos">190</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
-</span><span id="Dialect-191"><a href="#Dialect-191"><span class="linenos">191</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
-</span><span id="Dialect-192"><a href="#Dialect-192"><span class="linenos">192</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
-</span><span id="Dialect-193"><a href="#Dialect-193"><span class="linenos">193</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Dialect-194"><a href="#Dialect-194"><span class="linenos">194</span></a> <span class="p">},</span>
-</span><span id="Dialect-195"><a href="#Dialect-195"><span class="linenos">195</span></a> <span class="p">)</span>
-</span><span id="Dialect-196"><a href="#Dialect-196"><span class="linenos">196</span></a>
-</span><span id="Dialect-197"><a href="#Dialect-197"><span class="linenos">197</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-198"><a href="#Dialect-198"><span class="linenos">198</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="c1"># type: ignore</span>
-</span><span id="Dialect-199"><a href="#Dialect-199"><span class="linenos">199</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="Dialect-200"><a href="#Dialect-200"><span class="linenos">200</span></a> <span class="s2">&quot;quote_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_start</span><span class="p">,</span>
-</span><span id="Dialect-201"><a href="#Dialect-201"><span class="linenos">201</span></a> <span class="s2">&quot;quote_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_end</span><span class="p">,</span>
-</span><span id="Dialect-202"><a href="#Dialect-202"><span class="linenos">202</span></a> <span class="s2">&quot;identifier_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_start</span><span class="p">,</span>
-</span><span id="Dialect-203"><a href="#Dialect-203"><span class="linenos">203</span></a> <span class="s2">&quot;identifier_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_end</span><span class="p">,</span>
-</span><span id="Dialect-204"><a href="#Dialect-204"><span class="linenos">204</span></a> <span class="s2">&quot;string_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect-205"><a href="#Dialect-205"><span class="linenos">205</span></a> <span class="s2">&quot;identifier_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect-206"><a href="#Dialect-206"><span class="linenos">206</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
-</span><span id="Dialect-207"><a href="#Dialect-207"><span class="linenos">207</span></a> <span class="s2">&quot;time_mapping&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">,</span>
-</span><span id="Dialect-208"><a href="#Dialect-208"><span class="linenos">208</span></a> <span class="s2">&quot;time_trie&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_trie</span><span class="p">,</span>
-</span><span id="Dialect-209"><a href="#Dialect-209"><span class="linenos">209</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
-</span><span id="Dialect-210"><a href="#Dialect-210"><span class="linenos">210</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
-</span><span id="Dialect-211"><a href="#Dialect-211"><span class="linenos">211</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">,</span>
-</span><span id="Dialect-212"><a href="#Dialect-212"><span class="linenos">212</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
-</span><span id="Dialect-213"><a href="#Dialect-213"><span class="linenos">213</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Dialect-214"><a href="#Dialect-214"><span class="linenos">214</span></a> <span class="p">}</span>
-</span><span id="Dialect-215"><a href="#Dialect-215"><span class="linenos">215</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect-102"><a href="#Dialect-102"><span class="linenos">102</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-103"><a href="#Dialect-103"><span class="linenos">103</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Dialect-104"><a href="#Dialect-104"><span class="linenos">104</span></a> <span class="n">unnest_column_only</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-105"><a href="#Dialect-105"><span class="linenos">105</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Dialect-106"><a href="#Dialect-106"><span class="linenos">106</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="p">]</span> <span class="o">=</span> <span class="s2">&quot;upper&quot;</span>
+</span><span id="Dialect-107"><a href="#Dialect-107"><span class="linenos">107</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-108"><a href="#Dialect-108"><span class="linenos">108</span></a>
+</span><span id="Dialect-109"><a href="#Dialect-109"><span class="linenos">109</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-110"><a href="#Dialect-110"><span class="linenos">110</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-111"><a href="#Dialect-111"><span class="linenos">111</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-112"><a href="#Dialect-112"><span class="linenos">112</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-113"><a href="#Dialect-113"><span class="linenos">113</span></a>
+</span><span id="Dialect-114"><a href="#Dialect-114"><span class="linenos">114</span></a> <span class="c1"># autofilled</span>
+</span><span id="Dialect-115"><a href="#Dialect-115"><span class="linenos">115</span></a> <span class="n">quote_start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-116"><a href="#Dialect-116"><span class="linenos">116</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-117"><a href="#Dialect-117"><span class="linenos">117</span></a> <span class="n">identifier_start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-118"><a href="#Dialect-118"><span class="linenos">118</span></a> <span class="n">identifier_end</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-119"><a href="#Dialect-119"><span class="linenos">119</span></a>
+</span><span id="Dialect-120"><a href="#Dialect-120"><span class="linenos">120</span></a> <span class="n">time_trie</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-121"><a href="#Dialect-121"><span class="linenos">121</span></a> <span class="n">inverse_time_mapping</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-122"><a href="#Dialect-122"><span class="linenos">122</span></a> <span class="n">inverse_time_trie</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-123"><a href="#Dialect-123"><span class="linenos">123</span></a> <span class="n">tokenizer_class</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-124"><a href="#Dialect-124"><span class="linenos">124</span></a> <span class="n">parser_class</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-125"><a href="#Dialect-125"><span class="linenos">125</span></a> <span class="n">generator_class</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Dialect-126"><a href="#Dialect-126"><span class="linenos">126</span></a>
+</span><span id="Dialect-127"><a href="#Dialect-127"><span class="linenos">127</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-128"><a href="#Dialect-128"><span class="linenos">128</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">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="Dialect-129"><a href="#Dialect-129"><span class="linenos">129</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-130"><a href="#Dialect-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="bp">cls</span>
+</span><span id="Dialect-131"><a href="#Dialect-131"><span class="linenos">131</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-132"><a href="#Dialect-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="Dialect-133"><a href="#Dialect-133"><span class="linenos">133</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-134"><a href="#Dialect-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="Dialect-135"><a href="#Dialect-135"><span class="linenos">135</span></a>
+</span><span id="Dialect-136"><a href="#Dialect-136"><span class="linenos">136</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</span><span class="p">)</span>
+</span><span id="Dialect-137"><a href="#Dialect-137"><span class="linenos">137</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-138"><a href="#Dialect-138"><span class="linenos">138</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</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="Dialect-139"><a href="#Dialect-139"><span class="linenos">139</span></a>
+</span><span id="Dialect-140"><a href="#Dialect-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="n">result</span>
+</span><span id="Dialect-141"><a href="#Dialect-141"><span class="linenos">141</span></a>
+</span><span id="Dialect-142"><a href="#Dialect-142"><span class="linenos">142</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect-143"><a href="#Dialect-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="Dialect-144"><a href="#Dialect-144"><span class="linenos">144</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-145"><a href="#Dialect-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="Dialect-146"><a href="#Dialect-146"><span class="linenos">146</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-147"><a href="#Dialect-147"><span class="linenos">147</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-148"><a href="#Dialect-148"><span class="linenos">148</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Dialect-149"><a href="#Dialect-149"><span class="linenos">149</span></a> <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="c1"># the time formats are quoted</span>
+</span><span id="Dialect-150"><a href="#Dialect-150"><span class="linenos">150</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
+</span><span id="Dialect-151"><a href="#Dialect-151"><span class="linenos">151</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
+</span><span id="Dialect-152"><a href="#Dialect-152"><span class="linenos">152</span></a> <span class="p">)</span>
+</span><span id="Dialect-153"><a href="#Dialect-153"><span class="linenos">153</span></a> <span class="p">)</span>
+</span><span id="Dialect-154"><a href="#Dialect-154"><span class="linenos">154</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-155"><a href="#Dialect-155"><span class="linenos">155</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-156"><a href="#Dialect-156"><span class="linenos">156</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Dialect-157"><a href="#Dialect-157"><span class="linenos">157</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Dialect-158"><a href="#Dialect-158"><span class="linenos">158</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
+</span><span id="Dialect-159"><a href="#Dialect-159"><span class="linenos">159</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_trie</span><span class="p">,</span>
+</span><span id="Dialect-160"><a href="#Dialect-160"><span class="linenos">160</span></a> <span class="p">)</span>
+</span><span id="Dialect-161"><a href="#Dialect-161"><span class="linenos">161</span></a> <span class="p">)</span>
+</span><span id="Dialect-162"><a href="#Dialect-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">expression</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="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-165"><a href="#Dialect-165"><span class="linenos">165</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-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="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Dialect-168"><a href="#Dialect-168"><span class="linenos">168</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-169"><a href="#Dialect-169"><span class="linenos">169</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-170"><a href="#Dialect-170"><span class="linenos">170</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-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="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">t</span><span class="o">.</span><span class="n">Optional</span><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">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Dialect-173"><a href="#Dialect-173"><span class="linenos">173</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><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="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-176"><a href="#Dialect-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="p">[</span><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="o">**</span><span class="n">opts</span><span class="p">)</span> <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-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="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-179"><a href="#Dialect-179"><span class="linenos">179</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-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="nd">@property</span>
+</span><span id="Dialect-182"><a href="#Dialect-182"><span class="linenos">182</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-183"><a href="#Dialect-183"><span class="linenos">183</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-184"><a href="#Dialect-184"><span class="linenos">184</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="c1"># type: ignore</span>
+</span><span id="Dialect-185"><a href="#Dialect-185"><span class="linenos">185</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-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="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-188"><a href="#Dialect-188"><span class="linenos">188</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="c1"># type: ignore</span>
+</span><span id="Dialect-189"><a href="#Dialect-189"><span class="linenos">189</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="Dialect-190"><a href="#Dialect-190"><span class="linenos">190</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
+</span><span id="Dialect-191"><a href="#Dialect-191"><span class="linenos">191</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
+</span><span id="Dialect-192"><a href="#Dialect-192"><span class="linenos">192</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
+</span><span id="Dialect-193"><a href="#Dialect-193"><span class="linenos">193</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
+</span><span id="Dialect-194"><a href="#Dialect-194"><span class="linenos">194</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Dialect-195"><a href="#Dialect-195"><span class="linenos">195</span></a> <span class="p">},</span>
+</span><span id="Dialect-196"><a href="#Dialect-196"><span class="linenos">196</span></a> <span class="p">)</span>
+</span><span id="Dialect-197"><a href="#Dialect-197"><span class="linenos">197</span></a>
+</span><span id="Dialect-198"><a href="#Dialect-198"><span class="linenos">198</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-199"><a href="#Dialect-199"><span class="linenos">199</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="c1"># type: ignore</span>
+</span><span id="Dialect-200"><a href="#Dialect-200"><span class="linenos">200</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="Dialect-201"><a href="#Dialect-201"><span class="linenos">201</span></a> <span class="s2">&quot;quote_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_start</span><span class="p">,</span>
+</span><span id="Dialect-202"><a href="#Dialect-202"><span class="linenos">202</span></a> <span class="s2">&quot;quote_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_end</span><span class="p">,</span>
+</span><span id="Dialect-203"><a href="#Dialect-203"><span class="linenos">203</span></a> <span class="s2">&quot;identifier_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_start</span><span class="p">,</span>
+</span><span id="Dialect-204"><a href="#Dialect-204"><span class="linenos">204</span></a> <span class="s2">&quot;identifier_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_end</span><span class="p">,</span>
+</span><span id="Dialect-205"><a href="#Dialect-205"><span class="linenos">205</span></a> <span class="s2">&quot;string_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect-206"><a href="#Dialect-206"><span class="linenos">206</span></a> <span class="s2">&quot;identifier_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect-207"><a href="#Dialect-207"><span class="linenos">207</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
+</span><span id="Dialect-208"><a href="#Dialect-208"><span class="linenos">208</span></a> <span class="s2">&quot;time_mapping&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">,</span>
+</span><span id="Dialect-209"><a href="#Dialect-209"><span class="linenos">209</span></a> <span class="s2">&quot;time_trie&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_trie</span><span class="p">,</span>
+</span><span id="Dialect-210"><a href="#Dialect-210"><span class="linenos">210</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
+</span><span id="Dialect-211"><a href="#Dialect-211"><span class="linenos">211</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
+</span><span id="Dialect-212"><a href="#Dialect-212"><span class="linenos">212</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">,</span>
+</span><span id="Dialect-213"><a href="#Dialect-213"><span class="linenos">213</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
+</span><span id="Dialect-214"><a href="#Dialect-214"><span class="linenos">214</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Dialect-215"><a href="#Dialect-215"><span class="linenos">215</span></a> <span class="p">}</span>
+</span><span id="Dialect-216"><a href="#Dialect-216"><span class="linenos">216</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1246,20 +1263,20 @@
</div>
<a class="headerlink" href="#Dialect.get_or_raise"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.get_or_raise-126"><a href="#Dialect.get_or_raise-126"><span class="linenos">126</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.get_or_raise-127"><a href="#Dialect.get_or_raise-127"><span class="linenos">127</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">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="Dialect.get_or_raise-128"><a href="#Dialect.get_or_raise-128"><span class="linenos">128</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-129"><a href="#Dialect.get_or_raise-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="bp">cls</span>
-</span><span id="Dialect.get_or_raise-130"><a href="#Dialect.get_or_raise-130"><span class="linenos">130</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-131"><a href="#Dialect.get_or_raise-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="n">dialect</span>
-</span><span id="Dialect.get_or_raise-132"><a href="#Dialect.get_or_raise-132"><span class="linenos">132</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-133"><a href="#Dialect.get_or_raise-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="o">.</span><span class="vm">__class__</span>
-</span><span id="Dialect.get_or_raise-134"><a href="#Dialect.get_or_raise-134"><span class="linenos">134</span></a>
-</span><span id="Dialect.get_or_raise-135"><a href="#Dialect.get_or_raise-135"><span class="linenos">135</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</span><span class="p">)</span>
-</span><span id="Dialect.get_or_raise-136"><a href="#Dialect.get_or_raise-136"><span class="linenos">136</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-137"><a href="#Dialect.get_or_raise-137"><span class="linenos">137</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</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="Dialect.get_or_raise-138"><a href="#Dialect.get_or_raise-138"><span class="linenos">138</span></a>
-</span><span id="Dialect.get_or_raise-139"><a href="#Dialect.get_or_raise-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">result</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.get_or_raise-127"><a href="#Dialect.get_or_raise-127"><span class="linenos">127</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.get_or_raise-128"><a href="#Dialect.get_or_raise-128"><span class="linenos">128</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">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="Dialect.get_or_raise-129"><a href="#Dialect.get_or_raise-129"><span class="linenos">129</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-130"><a href="#Dialect.get_or_raise-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="bp">cls</span>
+</span><span id="Dialect.get_or_raise-131"><a href="#Dialect.get_or_raise-131"><span class="linenos">131</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-132"><a href="#Dialect.get_or_raise-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="n">dialect</span>
+</span><span id="Dialect.get_or_raise-133"><a href="#Dialect.get_or_raise-133"><span class="linenos">133</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-134"><a href="#Dialect.get_or_raise-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">dialect</span><span class="o">.</span><span class="vm">__class__</span>
+</span><span id="Dialect.get_or_raise-135"><a href="#Dialect.get_or_raise-135"><span class="linenos">135</span></a>
+</span><span id="Dialect.get_or_raise-136"><a href="#Dialect.get_or_raise-136"><span class="linenos">136</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</span><span class="p">)</span>
+</span><span id="Dialect.get_or_raise-137"><a href="#Dialect.get_or_raise-137"><span class="linenos">137</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-138"><a href="#Dialect.get_or_raise-138"><span class="linenos">138</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</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="Dialect.get_or_raise-139"><a href="#Dialect.get_or_raise-139"><span class="linenos">139</span></a>
+</span><span id="Dialect.get_or_raise-140"><a href="#Dialect.get_or_raise-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="n">result</span>
</span></pre></div>
@@ -1278,27 +1295,27 @@
</div>
<a class="headerlink" href="#Dialect.format_time"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.format_time-141"><a href="#Dialect.format_time-141"><span class="linenos">141</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dialect.format_time-142"><a href="#Dialect.format_time-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
-</span><span id="Dialect.format_time-143"><a href="#Dialect.format_time-143"><span class="linenos">143</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-144"><a href="#Dialect.format_time-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="Dialect.format_time-145"><a href="#Dialect.format_time-145"><span class="linenos">145</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-146"><a href="#Dialect.format_time-146"><span class="linenos">146</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-147"><a href="#Dialect.format_time-147"><span class="linenos">147</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Dialect.format_time-148"><a href="#Dialect.format_time-148"><span class="linenos">148</span></a> <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="c1"># the time formats are quoted</span>
-</span><span id="Dialect.format_time-149"><a href="#Dialect.format_time-149"><span class="linenos">149</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
-</span><span id="Dialect.format_time-150"><a href="#Dialect.format_time-150"><span class="linenos">150</span></a> <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-151"><a href="#Dialect.format_time-151"><span class="linenos">151</span></a> <span class="p">)</span>
-</span><span id="Dialect.format_time-152"><a href="#Dialect.format_time-152"><span class="linenos">152</span></a> <span class="p">)</span>
-</span><span id="Dialect.format_time-153"><a href="#Dialect.format_time-153"><span class="linenos">153</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-154"><a href="#Dialect.format_time-154"><span class="linenos">154</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-155"><a href="#Dialect.format_time-155"><span class="linenos">155</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Dialect.format_time-156"><a href="#Dialect.format_time-156"><span class="linenos">156</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Dialect.format_time-157"><a href="#Dialect.format_time-157"><span class="linenos">157</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
-</span><span id="Dialect.format_time-158"><a href="#Dialect.format_time-158"><span class="linenos">158</span></a> <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-159"><a href="#Dialect.format_time-159"><span class="linenos">159</span></a> <span class="p">)</span>
-</span><span id="Dialect.format_time-160"><a href="#Dialect.format_time-160"><span class="linenos">160</span></a> <span class="p">)</span>
-</span><span id="Dialect.format_time-161"><a href="#Dialect.format_time-161"><span class="linenos">161</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-142"><a href="#Dialect.format_time-142"><span class="linenos">142</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dialect.format_time-143"><a href="#Dialect.format_time-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">format_time</span><span class="p">(</span>
+</span><span id="Dialect.format_time-144"><a href="#Dialect.format_time-144"><span class="linenos">144</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-145"><a href="#Dialect.format_time-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="Dialect.format_time-146"><a href="#Dialect.format_time-146"><span class="linenos">146</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-147"><a href="#Dialect.format_time-147"><span class="linenos">147</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-148"><a href="#Dialect.format_time-148"><span class="linenos">148</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Dialect.format_time-149"><a href="#Dialect.format_time-149"><span class="linenos">149</span></a> <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="c1"># the time formats are quoted</span>
+</span><span id="Dialect.format_time-150"><a href="#Dialect.format_time-150"><span class="linenos">150</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
+</span><span id="Dialect.format_time-151"><a href="#Dialect.format_time-151"><span class="linenos">151</span></a> <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-152"><a href="#Dialect.format_time-152"><span class="linenos">152</span></a> <span class="p">)</span>
+</span><span id="Dialect.format_time-153"><a href="#Dialect.format_time-153"><span class="linenos">153</span></a> <span class="p">)</span>
+</span><span id="Dialect.format_time-154"><a href="#Dialect.format_time-154"><span class="linenos">154</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-155"><a href="#Dialect.format_time-155"><span class="linenos">155</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-156"><a href="#Dialect.format_time-156"><span class="linenos">156</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Dialect.format_time-157"><a href="#Dialect.format_time-157"><span class="linenos">157</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Dialect.format_time-158"><a href="#Dialect.format_time-158"><span class="linenos">158</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span>
+</span><span id="Dialect.format_time-159"><a href="#Dialect.format_time-159"><span class="linenos">159</span></a> <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-160"><a href="#Dialect.format_time-160"><span class="linenos">160</span></a> <span class="p">)</span>
+</span><span id="Dialect.format_time-161"><a href="#Dialect.format_time-161"><span class="linenos">161</span></a> <span class="p">)</span>
+</span><span id="Dialect.format_time-162"><a href="#Dialect.format_time-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1316,8 +1333,8 @@
</div>
<a class="headerlink" href="#Dialect.parse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse-163"><a href="#Dialect.parse-163"><span class="linenos">163</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-164"><a href="#Dialect.parse-164"><span class="linenos">164</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-164"><a href="#Dialect.parse-164"><span class="linenos">164</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-165"><a href="#Dialect.parse-165"><span class="linenos">165</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>
@@ -1335,10 +1352,10 @@
</div>
<a class="headerlink" href="#Dialect.parse_into"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parse_into-166"><a href="#Dialect.parse_into-166"><span class="linenos">166</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Dialect.parse_into-167"><a href="#Dialect.parse_into-167"><span class="linenos">167</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-168"><a href="#Dialect.parse_into-168"><span class="linenos">168</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-169"><a href="#Dialect.parse_into-169"><span class="linenos">169</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-167"><a href="#Dialect.parse_into-167"><span class="linenos">167</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Dialect.parse_into-168"><a href="#Dialect.parse_into-168"><span class="linenos">168</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-169"><a href="#Dialect.parse_into-169"><span class="linenos">169</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-170"><a href="#Dialect.parse_into-170"><span class="linenos">170</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>
@@ -1356,8 +1373,8 @@
</div>
<a class="headerlink" href="#Dialect.generate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generate-171"><a href="#Dialect.generate-171"><span class="linenos">171</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">t</span><span class="o">.</span><span class="n">Optional</span><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">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-172"><a href="#Dialect.generate-172"><span class="linenos">172</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generate-172"><a href="#Dialect.generate-172"><span class="linenos">172</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">t</span><span class="o">.</span><span class="n">Optional</span><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">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-173"><a href="#Dialect.generate-173"><span class="linenos">173</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></pre></div>
@@ -1375,8 +1392,8 @@
</div>
<a class="headerlink" href="#Dialect.transpile"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.transpile-174"><a href="#Dialect.transpile-174"><span class="linenos">174</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-175"><a href="#Dialect.transpile-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="p">[</span><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="o">**</span><span class="n">opts</span><span class="p">)</span> <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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.transpile-175"><a href="#Dialect.transpile-175"><span class="linenos">175</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-176"><a href="#Dialect.transpile-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="p">[</span><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="o">**</span><span class="n">opts</span><span class="p">)</span> <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></pre></div>
@@ -1394,8 +1411,8 @@
</div>
<a class="headerlink" href="#Dialect.tokenize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.tokenize-177"><a href="#Dialect.tokenize-177"><span class="linenos">177</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-178"><a href="#Dialect.tokenize-178"><span class="linenos">178</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-178"><a href="#Dialect.tokenize-178"><span class="linenos">178</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-179"><a href="#Dialect.tokenize-179"><span class="linenos">179</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>
@@ -1413,16 +1430,16 @@
</div>
<a class="headerlink" href="#Dialect.parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parser-186"><a href="#Dialect.parser-186"><span class="linenos">186</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-187"><a href="#Dialect.parser-187"><span class="linenos">187</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="c1"># type: ignore</span>
-</span><span id="Dialect.parser-188"><a href="#Dialect.parser-188"><span class="linenos">188</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="Dialect.parser-189"><a href="#Dialect.parser-189"><span class="linenos">189</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
-</span><span id="Dialect.parser-190"><a href="#Dialect.parser-190"><span class="linenos">190</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
-</span><span id="Dialect.parser-191"><a href="#Dialect.parser-191"><span class="linenos">191</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
-</span><span id="Dialect.parser-192"><a href="#Dialect.parser-192"><span class="linenos">192</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
-</span><span id="Dialect.parser-193"><a href="#Dialect.parser-193"><span class="linenos">193</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Dialect.parser-194"><a href="#Dialect.parser-194"><span class="linenos">194</span></a> <span class="p">},</span>
-</span><span id="Dialect.parser-195"><a href="#Dialect.parser-195"><span class="linenos">195</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.parser-187"><a href="#Dialect.parser-187"><span class="linenos">187</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-188"><a href="#Dialect.parser-188"><span class="linenos">188</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="c1"># type: ignore</span>
+</span><span id="Dialect.parser-189"><a href="#Dialect.parser-189"><span class="linenos">189</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="Dialect.parser-190"><a href="#Dialect.parser-190"><span class="linenos">190</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
+</span><span id="Dialect.parser-191"><a href="#Dialect.parser-191"><span class="linenos">191</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
+</span><span id="Dialect.parser-192"><a href="#Dialect.parser-192"><span class="linenos">192</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
+</span><span id="Dialect.parser-193"><a href="#Dialect.parser-193"><span class="linenos">193</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
+</span><span id="Dialect.parser-194"><a href="#Dialect.parser-194"><span class="linenos">194</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Dialect.parser-195"><a href="#Dialect.parser-195"><span class="linenos">195</span></a> <span class="p">},</span>
+</span><span id="Dialect.parser-196"><a href="#Dialect.parser-196"><span class="linenos">196</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1440,25 +1457,25 @@
</div>
<a class="headerlink" href="#Dialect.generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generator-197"><a href="#Dialect.generator-197"><span class="linenos">197</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-198"><a href="#Dialect.generator-198"><span class="linenos">198</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="c1"># type: ignore</span>
-</span><span id="Dialect.generator-199"><a href="#Dialect.generator-199"><span class="linenos">199</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="Dialect.generator-200"><a href="#Dialect.generator-200"><span class="linenos">200</span></a> <span class="s2">&quot;quote_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_start</span><span class="p">,</span>
-</span><span id="Dialect.generator-201"><a href="#Dialect.generator-201"><span class="linenos">201</span></a> <span class="s2">&quot;quote_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_end</span><span class="p">,</span>
-</span><span id="Dialect.generator-202"><a href="#Dialect.generator-202"><span class="linenos">202</span></a> <span class="s2">&quot;identifier_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_start</span><span class="p">,</span>
-</span><span id="Dialect.generator-203"><a href="#Dialect.generator-203"><span class="linenos">203</span></a> <span class="s2">&quot;identifier_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_end</span><span class="p">,</span>
-</span><span id="Dialect.generator-204"><a href="#Dialect.generator-204"><span class="linenos">204</span></a> <span class="s2">&quot;string_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect.generator-205"><a href="#Dialect.generator-205"><span class="linenos">205</span></a> <span class="s2">&quot;identifier_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect.generator-206"><a href="#Dialect.generator-206"><span class="linenos">206</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
-</span><span id="Dialect.generator-207"><a href="#Dialect.generator-207"><span class="linenos">207</span></a> <span class="s2">&quot;time_mapping&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">,</span>
-</span><span id="Dialect.generator-208"><a href="#Dialect.generator-208"><span class="linenos">208</span></a> <span class="s2">&quot;time_trie&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_trie</span><span class="p">,</span>
-</span><span id="Dialect.generator-209"><a href="#Dialect.generator-209"><span class="linenos">209</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
-</span><span id="Dialect.generator-210"><a href="#Dialect.generator-210"><span class="linenos">210</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
-</span><span id="Dialect.generator-211"><a href="#Dialect.generator-211"><span class="linenos">211</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">,</span>
-</span><span id="Dialect.generator-212"><a href="#Dialect.generator-212"><span class="linenos">212</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
-</span><span id="Dialect.generator-213"><a href="#Dialect.generator-213"><span class="linenos">213</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Dialect.generator-214"><a href="#Dialect.generator-214"><span class="linenos">214</span></a> <span class="p">}</span>
-</span><span id="Dialect.generator-215"><a href="#Dialect.generator-215"><span class="linenos">215</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dialect.generator-198"><a href="#Dialect.generator-198"><span class="linenos">198</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-199"><a href="#Dialect.generator-199"><span class="linenos">199</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="c1"># type: ignore</span>
+</span><span id="Dialect.generator-200"><a href="#Dialect.generator-200"><span class="linenos">200</span></a> <span class="o">**</span><span class="p">{</span>
+</span><span id="Dialect.generator-201"><a href="#Dialect.generator-201"><span class="linenos">201</span></a> <span class="s2">&quot;quote_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_start</span><span class="p">,</span>
+</span><span id="Dialect.generator-202"><a href="#Dialect.generator-202"><span class="linenos">202</span></a> <span class="s2">&quot;quote_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">quote_end</span><span class="p">,</span>
+</span><span id="Dialect.generator-203"><a href="#Dialect.generator-203"><span class="linenos">203</span></a> <span class="s2">&quot;identifier_start&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_start</span><span class="p">,</span>
+</span><span id="Dialect.generator-204"><a href="#Dialect.generator-204"><span class="linenos">204</span></a> <span class="s2">&quot;identifier_end&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">identifier_end</span><span class="p">,</span>
+</span><span id="Dialect.generator-205"><a href="#Dialect.generator-205"><span class="linenos">205</span></a> <span class="s2">&quot;string_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect.generator-206"><a href="#Dialect.generator-206"><span class="linenos">206</span></a> <span class="s2">&quot;identifier_escape&quot;</span><span class="p">:</span> <span class="bp">self</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><span id="Dialect.generator-207"><a href="#Dialect.generator-207"><span class="linenos">207</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">,</span>
+</span><span id="Dialect.generator-208"><a href="#Dialect.generator-208"><span class="linenos">208</span></a> <span class="s2">&quot;time_mapping&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_mapping</span><span class="p">,</span>
+</span><span id="Dialect.generator-209"><a href="#Dialect.generator-209"><span class="linenos">209</span></a> <span class="s2">&quot;time_trie&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">inverse_time_trie</span><span class="p">,</span>
+</span><span id="Dialect.generator-210"><a href="#Dialect.generator-210"><span class="linenos">210</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span><span class="p">,</span>
+</span><span id="Dialect.generator-211"><a href="#Dialect.generator-211"><span class="linenos">211</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">,</span>
+</span><span id="Dialect.generator-212"><a href="#Dialect.generator-212"><span class="linenos">212</span></a> <span class="s2">&quot;normalize_functions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">normalize_functions</span><span class="p">,</span>
+</span><span id="Dialect.generator-213"><a href="#Dialect.generator-213"><span class="linenos">213</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span><span class="p">,</span>
+</span><span id="Dialect.generator-214"><a href="#Dialect.generator-214"><span class="linenos">214</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Dialect.generator-215"><a href="#Dialect.generator-215"><span class="linenos">215</span></a> <span class="p">}</span>
+</span><span id="Dialect.generator-216"><a href="#Dialect.generator-216"><span class="linenos">216</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1477,8 +1494,8 @@
</div>
<a class="headerlink" href="#rename_func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="rename_func-221"><a href="#rename_func-221"><span class="linenos">221</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-222"><a href="#rename_func-222"><span class="linenos">222</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-222"><a href="#rename_func-222"><span class="linenos">222</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-223"><a href="#rename_func-223"><span class="linenos">223</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>
@@ -1496,10 +1513,10 @@
</div>
<a class="headerlink" href="#approx_count_distinct_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="approx_count_distinct_sql-225"><a href="#approx_count_distinct_sql-225"><span class="linenos">225</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-226"><a href="#approx_count_distinct_sql-226"><span class="linenos">226</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-227"><a href="#approx_count_distinct_sql-227"><span class="linenos">227</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-228"><a href="#approx_count_distinct_sql-228"><span class="linenos">228</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-226"><a href="#approx_count_distinct_sql-226"><span class="linenos">226</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-227"><a href="#approx_count_distinct_sql-227"><span class="linenos">227</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-228"><a href="#approx_count_distinct_sql-228"><span class="linenos">228</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-229"><a href="#approx_count_distinct_sql-229"><span class="linenos">229</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>
@@ -1517,10 +1534,10 @@
</div>
<a class="headerlink" href="#if_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="if_sql-231"><a href="#if_sql-231"><span class="linenos">231</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-232"><a href="#if_sql-232"><span class="linenos">232</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-233"><a href="#if_sql-233"><span class="linenos">233</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;true&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)</span>
-</span><span id="if_sql-234"><a href="#if_sql-234"><span class="linenos">234</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="if_sql-232"><a href="#if_sql-232"><span class="linenos">232</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-233"><a href="#if_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">func</span><span class="p">(</span>
+</span><span id="if_sql-234"><a href="#if_sql-234"><span class="linenos">234</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;true&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;false&quot;</span><span class="p">)</span>
+</span><span id="if_sql-235"><a href="#if_sql-235"><span class="linenos">235</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1538,8 +1555,8 @@
</div>
<a class="headerlink" href="#arrow_json_extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="arrow_json_extract_sql-237"><a href="#arrow_json_extract_sql-237"><span class="linenos">237</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">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">JSONBExtract</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-238"><a href="#arrow_json_extract_sql-238"><span class="linenos">238</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="arrow_json_extract_sql-238"><a href="#arrow_json_extract_sql-238"><span class="linenos">238</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">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">JSONBExtract</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-239"><a href="#arrow_json_extract_sql-239"><span class="linenos">239</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>
@@ -1557,10 +1574,10 @@
</div>
<a class="headerlink" href="#arrow_json_extract_scalar_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="arrow_json_extract_scalar_sql-241"><a href="#arrow_json_extract_scalar_sql-241"><span class="linenos">241</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_scalar_sql</span><span class="p">(</span>
-</span><span id="arrow_json_extract_scalar_sql-242"><a href="#arrow_json_extract_scalar_sql-242"><span class="linenos">242</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">JSONExtractScalar</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span>
-</span><span id="arrow_json_extract_scalar_sql-243"><a href="#arrow_json_extract_scalar_sql-243"><span class="linenos">243</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="arrow_json_extract_scalar_sql-244"><a href="#arrow_json_extract_scalar_sql-244"><span class="linenos">244</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="arrow_json_extract_scalar_sql-242"><a href="#arrow_json_extract_scalar_sql-242"><span class="linenos">242</span></a><span class="k">def</span> <span class="nf">arrow_json_extract_scalar_sql</span><span class="p">(</span>
+</span><span id="arrow_json_extract_scalar_sql-243"><a href="#arrow_json_extract_scalar_sql-243"><span class="linenos">243</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">JSONExtractScalar</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span>
+</span><span id="arrow_json_extract_scalar_sql-244"><a href="#arrow_json_extract_scalar_sql-244"><span class="linenos">244</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="arrow_json_extract_scalar_sql-245"><a href="#arrow_json_extract_scalar_sql-245"><span class="linenos">245</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>
@@ -1578,8 +1595,8 @@
</div>
<a class="headerlink" href="#inline_array_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="inline_array_sql-247"><a href="#inline_array_sql-247"><span class="linenos">247</span></a><span class="k">def</span> <span class="nf">inline_array_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">Array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="inline_array_sql-248"><a href="#inline_array_sql-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="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="si">}</span><span class="s2">]&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="inline_array_sql-248"><a href="#inline_array_sql-248"><span class="linenos">248</span></a><span class="k">def</span> <span class="nf">inline_array_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">Array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="inline_array_sql-249"><a href="#inline_array_sql-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="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="si">}</span><span class="s2">]&quot;</span>
</span></pre></div>
@@ -1597,13 +1614,13 @@
</div>
<a class="headerlink" href="#no_ilike_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_ilike_sql-251"><a href="#no_ilike_sql-251"><span class="linenos">251</span></a><span class="k">def</span> <span class="nf">no_ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_ilike_sql-252"><a href="#no_ilike_sql-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">like_sql</span><span class="p">(</span>
-</span><span id="no_ilike_sql-253"><a href="#no_ilike_sql-253"><span class="linenos">253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">(</span>
-</span><span id="no_ilike_sql-254"><a href="#no_ilike_sql-254"><span class="linenos">254</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Lower</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><span id="no_ilike_sql-255"><a href="#no_ilike_sql-255"><span class="linenos">255</span></a> <span class="n">expression</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;expression&quot;</span><span class="p">],</span>
-</span><span id="no_ilike_sql-256"><a href="#no_ilike_sql-256"><span class="linenos">256</span></a> <span class="p">)</span>
-</span><span id="no_ilike_sql-257"><a href="#no_ilike_sql-257"><span class="linenos">257</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_ilike_sql-252"><a href="#no_ilike_sql-252"><span class="linenos">252</span></a><span class="k">def</span> <span class="nf">no_ilike_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">ILike</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_ilike_sql-253"><a href="#no_ilike_sql-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">like_sql</span><span class="p">(</span>
+</span><span id="no_ilike_sql-254"><a href="#no_ilike_sql-254"><span class="linenos">254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">(</span>
+</span><span id="no_ilike_sql-255"><a href="#no_ilike_sql-255"><span class="linenos">255</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Lower</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><span id="no_ilike_sql-256"><a href="#no_ilike_sql-256"><span class="linenos">256</span></a> <span class="n">expression</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;expression&quot;</span><span class="p">],</span>
+</span><span id="no_ilike_sql-257"><a href="#no_ilike_sql-257"><span class="linenos">257</span></a> <span class="p">)</span>
+</span><span id="no_ilike_sql-258"><a href="#no_ilike_sql-258"><span class="linenos">258</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1621,9 +1638,9 @@
</div>
<a class="headerlink" href="#no_paren_current_date_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_paren_current_date_sql-260"><a href="#no_paren_current_date_sql-260"><span class="linenos">260</span></a><span class="k">def</span> <span class="nf">no_paren_current_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_paren_current_date_sql-261"><a href="#no_paren_current_date_sql-261"><span class="linenos">261</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="no_paren_current_date_sql-262"><a href="#no_paren_current_date_sql-262"><span class="linenos">262</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE AT TIME ZONE </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="no_paren_current_date_sql-261"><a href="#no_paren_current_date_sql-261"><span class="linenos">261</span></a><span class="k">def</span> <span class="nf">no_paren_current_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_paren_current_date_sql-262"><a href="#no_paren_current_date_sql-262"><span class="linenos">262</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="no_paren_current_date_sql-263"><a href="#no_paren_current_date_sql-263"><span class="linenos">263</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CURRENT_DATE AT TIME ZONE </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>
@@ -1641,11 +1658,11 @@
</div>
<a class="headerlink" href="#no_recursive_cte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_recursive_cte_sql-265"><a href="#no_recursive_cte_sql-265"><span class="linenos">265</span></a><span class="k">def</span> <span class="nf">no_recursive_cte_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_recursive_cte_sql-266"><a href="#no_recursive_cte_sql-266"><span class="linenos">266</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;recursive&quot;</span><span class="p">):</span>
-</span><span id="no_recursive_cte_sql-267"><a href="#no_recursive_cte_sql-267"><span class="linenos">267</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Recursive CTEs are unsupported&quot;</span><span class="p">)</span>
-</span><span id="no_recursive_cte_sql-268"><a href="#no_recursive_cte_sql-268"><span class="linenos">268</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;recursive&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="no_recursive_cte_sql-269"><a href="#no_recursive_cte_sql-269"><span class="linenos">269</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_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="no_recursive_cte_sql-266"><a href="#no_recursive_cte_sql-266"><span class="linenos">266</span></a><span class="k">def</span> <span class="nf">no_recursive_cte_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">With</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_recursive_cte_sql-267"><a href="#no_recursive_cte_sql-267"><span class="linenos">267</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;recursive&quot;</span><span class="p">):</span>
+</span><span id="no_recursive_cte_sql-268"><a href="#no_recursive_cte_sql-268"><span class="linenos">268</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Recursive CTEs are unsupported&quot;</span><span class="p">)</span>
+</span><span id="no_recursive_cte_sql-269"><a href="#no_recursive_cte_sql-269"><span class="linenos">269</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;recursive&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="no_recursive_cte_sql-270"><a href="#no_recursive_cte_sql-270"><span class="linenos">270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">with_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1663,10 +1680,10 @@
</div>
<a class="headerlink" href="#no_safe_divide_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_safe_divide_sql-272"><a href="#no_safe_divide_sql-272"><span class="linenos">272</span></a><span class="k">def</span> <span class="nf">no_safe_divide_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">SafeDivide</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_safe_divide_sql-273"><a href="#no_safe_divide_sql-273"><span class="linenos">273</span></a> <span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="no_safe_divide_sql-274"><a href="#no_safe_divide_sql-274"><span class="linenos">274</span></a> <span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="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="no_safe_divide_sql-275"><a href="#no_safe_divide_sql-275"><span class="linenos">275</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IF(</span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2"> &lt;&gt; 0, </span><span class="si">{</span><span class="n">n</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2">, NULL)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_safe_divide_sql-273"><a href="#no_safe_divide_sql-273"><span class="linenos">273</span></a><span class="k">def</span> <span class="nf">no_safe_divide_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">SafeDivide</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_safe_divide_sql-274"><a href="#no_safe_divide_sql-274"><span class="linenos">274</span></a> <span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="no_safe_divide_sql-275"><a href="#no_safe_divide_sql-275"><span class="linenos">275</span></a> <span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="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="no_safe_divide_sql-276"><a href="#no_safe_divide_sql-276"><span class="linenos">276</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;IF(</span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2"> &lt;&gt; 0, </span><span class="si">{</span><span class="n">n</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">d</span><span class="si">}</span><span class="s2">, NULL)&quot;</span>
</span></pre></div>
@@ -1684,9 +1701,9 @@
</div>
<a class="headerlink" href="#no_tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_tablesample_sql-278"><a href="#no_tablesample_sql-278"><span class="linenos">278</span></a><span class="k">def</span> <span class="nf">no_tablesample_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">TableSample</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_tablesample_sql-279"><a href="#no_tablesample_sql-279"><span class="linenos">279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;TABLESAMPLE unsupported&quot;</span><span class="p">)</span>
-</span><span id="no_tablesample_sql-280"><a href="#no_tablesample_sql-280"><span class="linenos">280</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="o">.</span><span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_tablesample_sql-279"><a href="#no_tablesample_sql-279"><span class="linenos">279</span></a><span class="k">def</span> <span class="nf">no_tablesample_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">TableSample</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_tablesample_sql-280"><a href="#no_tablesample_sql-280"><span class="linenos">280</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;TABLESAMPLE unsupported&quot;</span><span class="p">)</span>
+</span><span id="no_tablesample_sql-281"><a href="#no_tablesample_sql-281"><span class="linenos">281</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="o">.</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
@@ -1704,9 +1721,9 @@
</div>
<a class="headerlink" href="#no_pivot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_pivot_sql-283"><a href="#no_pivot_sql-283"><span class="linenos">283</span></a><span class="k">def</span> <span class="nf">no_pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_pivot_sql-284"><a href="#no_pivot_sql-284"><span class="linenos">284</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;PIVOT unsupported&quot;</span><span class="p">)</span>
-</span><span id="no_pivot_sql-285"><a href="#no_pivot_sql-285"><span class="linenos">285</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_pivot_sql-284"><a href="#no_pivot_sql-284"><span class="linenos">284</span></a><span class="k">def</span> <span class="nf">no_pivot_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">Pivot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_pivot_sql-285"><a href="#no_pivot_sql-285"><span class="linenos">285</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;PIVOT unsupported&quot;</span><span class="p">)</span>
+</span><span id="no_pivot_sql-286"><a href="#no_pivot_sql-286"><span class="linenos">286</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></pre></div>
@@ -1724,8 +1741,8 @@
</div>
<a class="headerlink" href="#no_trycast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_trycast_sql-288"><a href="#no_trycast_sql-288"><span class="linenos">288</span></a><span class="k">def</span> <span class="nf">no_trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_trycast_sql-289"><a href="#no_trycast_sql-289"><span class="linenos">289</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_trycast_sql-289"><a href="#no_trycast_sql-289"><span class="linenos">289</span></a><span class="k">def</span> <span class="nf">no_trycast_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">TryCast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_trycast_sql-290"><a href="#no_trycast_sql-290"><span class="linenos">290</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></pre></div>
@@ -1743,9 +1760,9 @@
</div>
<a class="headerlink" href="#no_properties_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_properties_sql-292"><a href="#no_properties_sql-292"><span class="linenos">292</span></a><span class="k">def</span> <span class="nf">no_properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_properties_sql-293"><a href="#no_properties_sql-293"><span class="linenos">293</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Properties unsupported&quot;</span><span class="p">)</span>
-</span><span id="no_properties_sql-294"><a href="#no_properties_sql-294"><span class="linenos">294</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_properties_sql-293"><a href="#no_properties_sql-293"><span class="linenos">293</span></a><span class="k">def</span> <span class="nf">no_properties_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">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_properties_sql-294"><a href="#no_properties_sql-294"><span class="linenos">294</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Properties unsupported&quot;</span><span class="p">)</span>
+</span><span id="no_properties_sql-295"><a href="#no_properties_sql-295"><span class="linenos">295</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -1763,11 +1780,11 @@
</div>
<a class="headerlink" href="#no_comment_column_constraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="no_comment_column_constraint_sql-297"><a href="#no_comment_column_constraint_sql-297"><span class="linenos">297</span></a><span class="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
-</span><span id="no_comment_column_constraint_sql-298"><a href="#no_comment_column_constraint_sql-298"><span class="linenos">298</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span>
-</span><span id="no_comment_column_constraint_sql-299"><a href="#no_comment_column_constraint_sql-299"><span class="linenos">299</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="no_comment_column_constraint_sql-300"><a href="#no_comment_column_constraint_sql-300"><span class="linenos">300</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
-</span><span id="no_comment_column_constraint_sql-301"><a href="#no_comment_column_constraint_sql-301"><span class="linenos">301</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="no_comment_column_constraint_sql-298"><a href="#no_comment_column_constraint_sql-298"><span class="linenos">298</span></a><span class="k">def</span> <span class="nf">no_comment_column_constraint_sql</span><span class="p">(</span>
+</span><span id="no_comment_column_constraint_sql-299"><a href="#no_comment_column_constraint_sql-299"><span class="linenos">299</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span>
+</span><span id="no_comment_column_constraint_sql-300"><a href="#no_comment_column_constraint_sql-300"><span class="linenos">300</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="no_comment_column_constraint_sql-301"><a href="#no_comment_column_constraint_sql-301"><span class="linenos">301</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;CommentColumnConstraint unsupported&quot;</span><span class="p">)</span>
+</span><span id="no_comment_column_constraint_sql-302"><a href="#no_comment_column_constraint_sql-302"><span class="linenos">302</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -1785,13 +1802,13 @@
</div>
<a class="headerlink" href="#str_position_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="str_position_sql-304"><a href="#str_position_sql-304"><span class="linenos">304</span></a><span class="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="str_position_sql-305"><a href="#str_position_sql-305"><span class="linenos">305</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="str_position_sql-306"><a href="#str_position_sql-306"><span class="linenos">306</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
-</span><span id="str_position_sql-307"><a href="#str_position_sql-307"><span class="linenos">307</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="str_position_sql-308"><a href="#str_position_sql-308"><span class="linenos">308</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
-</span><span id="str_position_sql-309"><a href="#str_position_sql-309"><span class="linenos">309</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
-</span><span id="str_position_sql-310"><a href="#str_position_sql-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="str_position_sql-305"><a href="#str_position_sql-305"><span class="linenos">305</span></a><span class="k">def</span> <span class="nf">str_position_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="str_position_sql-306"><a href="#str_position_sql-306"><span class="linenos">306</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="str_position_sql-307"><a href="#str_position_sql-307"><span class="linenos">307</span></a> <span class="n">substr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;substr&quot;</span><span class="p">)</span>
+</span><span id="str_position_sql-308"><a href="#str_position_sql-308"><span class="linenos">308</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="str_position_sql-309"><a href="#str_position_sql-309"><span class="linenos">309</span></a> <span class="k">if</span> <span class="n">position</span><span class="p">:</span>
+</span><span id="str_position_sql-310"><a href="#str_position_sql-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(SUBSTR(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">) + </span><span class="si">{</span><span class="n">position</span><span class="si">}</span><span class="s2"> - 1&quot;</span>
+</span><span id="str_position_sql-311"><a href="#str_position_sql-311"><span class="linenos">311</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;STRPOS(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">substr</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -1809,10 +1826,10 @@
</div>
<a class="headerlink" href="#struct_extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="struct_extract_sql-313"><a href="#struct_extract_sql-313"><span class="linenos">313</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="struct_extract_sql-314"><a href="#struct_extract_sql-314"><span class="linenos">314</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="struct_extract_sql-315"><a href="#struct_extract_sql-315"><span class="linenos">315</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="struct_extract_sql-316"><a href="#struct_extract_sql-316"><span class="linenos">316</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="struct_extract_sql-314"><a href="#struct_extract_sql-314"><span class="linenos">314</span></a><span class="k">def</span> <span class="nf">struct_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="struct_extract_sql-315"><a href="#struct_extract_sql-315"><span class="linenos">315</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="struct_extract_sql-316"><a href="#struct_extract_sql-316"><span class="linenos">316</span></a> <span class="n">struct_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="struct_extract_sql-317"><a href="#struct_extract_sql-317"><span class="linenos">317</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">struct_key</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -1830,21 +1847,21 @@
</div>
<a class="headerlink" href="#var_map_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="var_map_sql-319"><a href="#var_map_sql-319"><span class="linenos">319</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
-</span><span id="var_map_sql-320"><a href="#var_map_sql-320"><span class="linenos">320</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
-</span><span id="var_map_sql-321"><a href="#var_map_sql-321"><span class="linenos">321</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="var_map_sql-322"><a href="#var_map_sql-322"><span class="linenos">322</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
-</span><span id="var_map_sql-323"><a href="#var_map_sql-323"><span class="linenos">323</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
-</span><span id="var_map_sql-324"><a href="#var_map_sql-324"><span class="linenos">324</span></a>
-</span><span id="var_map_sql-325"><a href="#var_map_sql-325"><span class="linenos">325</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
-</span><span id="var_map_sql-326"><a href="#var_map_sql-326"><span class="linenos">326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
-</span><span id="var_map_sql-327"><a href="#var_map_sql-327"><span class="linenos">327</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
-</span><span id="var_map_sql-328"><a href="#var_map_sql-328"><span class="linenos">328</span></a>
-</span><span id="var_map_sql-329"><a href="#var_map_sql-329"><span class="linenos">329</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="var_map_sql-330"><a href="#var_map_sql-330"><span class="linenos">330</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="var_map_sql-331"><a href="#var_map_sql-331"><span class="linenos">331</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
-</span><span id="var_map_sql-332"><a href="#var_map_sql-332"><span class="linenos">332</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
-</span><span id="var_map_sql-333"><a href="#var_map_sql-333"><span class="linenos">333</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="var_map_sql-320"><a href="#var_map_sql-320"><span class="linenos">320</span></a><span class="k">def</span> <span class="nf">var_map_sql</span><span class="p">(</span>
+</span><span id="var_map_sql-321"><a href="#var_map_sql-321"><span class="linenos">321</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">,</span> <span class="n">map_func_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;MAP&quot;</span>
+</span><span id="var_map_sql-322"><a href="#var_map_sql-322"><span class="linenos">322</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="var_map_sql-323"><a href="#var_map_sql-323"><span class="linenos">323</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">]</span>
+</span><span id="var_map_sql-324"><a href="#var_map_sql-324"><span class="linenos">324</span></a> <span class="n">values</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;values&quot;</span><span class="p">]</span>
+</span><span id="var_map_sql-325"><a href="#var_map_sql-325"><span class="linenos">325</span></a>
+</span><span id="var_map_sql-326"><a href="#var_map_sql-326"><span class="linenos">326</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keys</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">):</span>
+</span><span id="var_map_sql-327"><a href="#var_map_sql-327"><span class="linenos">327</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Cannot convert array columns into map.&quot;</span><span class="p">)</span>
+</span><span id="var_map_sql-328"><a href="#var_map_sql-328"><span class="linenos">328</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">)</span>
+</span><span id="var_map_sql-329"><a href="#var_map_sql-329"><span class="linenos">329</span></a>
+</span><span id="var_map_sql-330"><a href="#var_map_sql-330"><span class="linenos">330</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="var_map_sql-331"><a href="#var_map_sql-331"><span class="linenos">331</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">keys</span><span class="o">.</span><span class="n">expressions</span><span class="p">,</span> <span class="n">values</span><span class="o">.</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="var_map_sql-332"><a href="#var_map_sql-332"><span class="linenos">332</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
+</span><span id="var_map_sql-333"><a href="#var_map_sql-333"><span class="linenos">333</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
+</span><span id="var_map_sql-334"><a href="#var_map_sql-334"><span class="linenos">334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">map_func_name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -1862,30 +1879,30 @@
</div>
<a class="headerlink" href="#format_time_lambda"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="format_time_lambda-336"><a href="#format_time_lambda-336"><span class="linenos">336</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
-</span><span id="format_time_lambda-337"><a href="#format_time_lambda-337"><span class="linenos">337</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="format_time_lambda-338"><a href="#format_time_lambda-338"><span class="linenos">338</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="format_time_lambda-339"><a href="#format_time_lambda-339"><span class="linenos">339</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
-</span><span id="format_time_lambda-340"><a href="#format_time_lambda-340"><span class="linenos">340</span></a>
-</span><span id="format_time_lambda-341"><a href="#format_time_lambda-341"><span class="linenos">341</span></a><span class="sd"> Args:</span>
-</span><span id="format_time_lambda-342"><a href="#format_time_lambda-342"><span class="linenos">342</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
-</span><span id="format_time_lambda-343"><a href="#format_time_lambda-343"><span class="linenos">343</span></a><span class="sd"> dialect: target sql dialect.</span>
-</span><span id="format_time_lambda-344"><a href="#format_time_lambda-344"><span class="linenos">344</span></a><span class="sd"> default: the default format, True being time.</span>
-</span><span id="format_time_lambda-345"><a href="#format_time_lambda-345"><span class="linenos">345</span></a>
-</span><span id="format_time_lambda-346"><a href="#format_time_lambda-346"><span class="linenos">346</span></a><span class="sd"> Returns:</span>
-</span><span id="format_time_lambda-347"><a href="#format_time_lambda-347"><span class="linenos">347</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
-</span><span id="format_time_lambda-348"><a href="#format_time_lambda-348"><span class="linenos">348</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="format_time_lambda-349"><a href="#format_time_lambda-349"><span class="linenos">349</span></a>
-</span><span id="format_time_lambda-350"><a href="#format_time_lambda-350"><span class="linenos">350</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
-</span><span id="format_time_lambda-351"><a href="#format_time_lambda-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
-</span><span id="format_time_lambda-352"><a href="#format_time_lambda-352"><span class="linenos">352</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="format_time_lambda-353"><a href="#format_time_lambda-353"><span class="linenos">353</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
-</span><span id="format_time_lambda-354"><a href="#format_time_lambda-354"><span class="linenos">354</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="format_time_lambda-355"><a href="#format_time_lambda-355"><span class="linenos">355</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="format_time_lambda-356"><a href="#format_time_lambda-356"><span class="linenos">356</span></a> <span class="p">),</span>
-</span><span id="format_time_lambda-357"><a href="#format_time_lambda-357"><span class="linenos">357</span></a> <span class="p">)</span>
-</span><span id="format_time_lambda-358"><a href="#format_time_lambda-358"><span class="linenos">358</span></a>
-</span><span id="format_time_lambda-359"><a href="#format_time_lambda-359"><span class="linenos">359</span></a> <span class="k">return</span> <span class="n">_format_time</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="format_time_lambda-337"><a href="#format_time_lambda-337"><span class="linenos">337</span></a><span class="k">def</span> <span class="nf">format_time_lambda</span><span class="p">(</span>
+</span><span id="format_time_lambda-338"><a href="#format_time_lambda-338"><span class="linenos">338</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="format_time_lambda-339"><a href="#format_time_lambda-339"><span class="linenos">339</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="format_time_lambda-340"><a href="#format_time_lambda-340"><span class="linenos">340</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Helper used for time expressions.</span>
+</span><span id="format_time_lambda-341"><a href="#format_time_lambda-341"><span class="linenos">341</span></a>
+</span><span id="format_time_lambda-342"><a href="#format_time_lambda-342"><span class="linenos">342</span></a><span class="sd"> Args:</span>
+</span><span id="format_time_lambda-343"><a href="#format_time_lambda-343"><span class="linenos">343</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
+</span><span id="format_time_lambda-344"><a href="#format_time_lambda-344"><span class="linenos">344</span></a><span class="sd"> dialect: target sql dialect.</span>
+</span><span id="format_time_lambda-345"><a href="#format_time_lambda-345"><span class="linenos">345</span></a><span class="sd"> default: the default format, True being time.</span>
+</span><span id="format_time_lambda-346"><a href="#format_time_lambda-346"><span class="linenos">346</span></a>
+</span><span id="format_time_lambda-347"><a href="#format_time_lambda-347"><span class="linenos">347</span></a><span class="sd"> Returns:</span>
+</span><span id="format_time_lambda-348"><a href="#format_time_lambda-348"><span class="linenos">348</span></a><span class="sd"> A callable that can be used to return the appropriately formatted time expression.</span>
+</span><span id="format_time_lambda-349"><a href="#format_time_lambda-349"><span class="linenos">349</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="format_time_lambda-350"><a href="#format_time_lambda-350"><span class="linenos">350</span></a>
+</span><span id="format_time_lambda-351"><a href="#format_time_lambda-351"><span class="linenos">351</span></a> <span class="k">def</span> <span class="nf">_format_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">):</span>
+</span><span id="format_time_lambda-352"><a href="#format_time_lambda-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span>
+</span><span id="format_time_lambda-353"><a href="#format_time_lambda-353"><span class="linenos">353</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="format_time_lambda-354"><a href="#format_time_lambda-354"><span class="linenos">354</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span>
+</span><span id="format_time_lambda-355"><a href="#format_time_lambda-355"><span class="linenos">355</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="format_time_lambda-356"><a href="#format_time_lambda-356"><span class="linenos">356</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">Dialect</span><span class="p">[</span><span class="n">dialect</span><span class="p">]</span><span class="o">.</span><span class="n">time_format</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">default</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="format_time_lambda-357"><a href="#format_time_lambda-357"><span class="linenos">357</span></a> <span class="p">),</span>
+</span><span id="format_time_lambda-358"><a href="#format_time_lambda-358"><span class="linenos">358</span></a> <span class="p">)</span>
+</span><span id="format_time_lambda-359"><a href="#format_time_lambda-359"><span class="linenos">359</span></a>
+</span><span id="format_time_lambda-360"><a href="#format_time_lambda-360"><span class="linenos">360</span></a> <span class="k">return</span> <span class="n">_format_time</span>
</span></pre></div>
@@ -1919,27 +1936,27 @@
</div>
<a class="headerlink" href="#create_with_partitions_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="create_with_partitions_sql-362"><a href="#create_with_partitions_sql-362"><span class="linenos">362</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="create_with_partitions_sql-363"><a href="#create_with_partitions_sql-363"><span class="linenos">363</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="create_with_partitions_sql-364"><a href="#create_with_partitions_sql-364"><span class="linenos">364</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
-</span><span id="create_with_partitions_sql-365"><a href="#create_with_partitions_sql-365"><span class="linenos">365</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
-</span><span id="create_with_partitions_sql-366"><a href="#create_with_partitions_sql-366"><span class="linenos">366</span></a><span class="sd"> columns are removed from the create statement.</span>
-</span><span id="create_with_partitions_sql-367"><a href="#create_with_partitions_sql-367"><span class="linenos">367</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="create_with_partitions_sql-368"><a href="#create_with_partitions_sql-368"><span class="linenos">368</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
-</span><span id="create_with_partitions_sql-369"><a href="#create_with_partitions_sql-369"><span class="linenos">369</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
-</span><span id="create_with_partitions_sql-370"><a href="#create_with_partitions_sql-370"><span class="linenos">370</span></a>
-</span><span id="create_with_partitions_sql-371"><a href="#create_with_partitions_sql-371"><span class="linenos">371</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
-</span><span id="create_with_partitions_sql-372"><a href="#create_with_partitions_sql-372"><span class="linenos">372</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="create_with_partitions_sql-373"><a href="#create_with_partitions_sql-373"><span class="linenos">373</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
-</span><span id="create_with_partitions_sql-374"><a href="#create_with_partitions_sql-374"><span class="linenos">374</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
-</span><span id="create_with_partitions_sql-375"><a href="#create_with_partitions_sql-375"><span class="linenos">375</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="create_with_partitions_sql-376"><a href="#create_with_partitions_sql-376"><span class="linenos">376</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
-</span><span id="create_with_partitions_sql-377"><a href="#create_with_partitions_sql-377"><span class="linenos">377</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
-</span><span id="create_with_partitions_sql-378"><a href="#create_with_partitions_sql-378"><span class="linenos">378</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
-</span><span id="create_with_partitions_sql-379"><a href="#create_with_partitions_sql-379"><span class="linenos">379</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
-</span><span id="create_with_partitions_sql-380"><a href="#create_with_partitions_sql-380"><span class="linenos">380</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
-</span><span id="create_with_partitions_sql-381"><a href="#create_with_partitions_sql-381"><span class="linenos">381</span></a>
-</span><span id="create_with_partitions_sql-382"><a href="#create_with_partitions_sql-382"><span class="linenos">382</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="create_with_partitions_sql-363"><a href="#create_with_partitions_sql-363"><span class="linenos">363</span></a><span class="k">def</span> <span class="nf">create_with_partitions_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="create_with_partitions_sql-364"><a href="#create_with_partitions_sql-364"><span class="linenos">364</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="create_with_partitions_sql-365"><a href="#create_with_partitions_sql-365"><span class="linenos">365</span></a><span class="sd"> In Hive and Spark, the PARTITIONED BY property acts as an extension of a table&#39;s schema. When the</span>
+</span><span id="create_with_partitions_sql-366"><a href="#create_with_partitions_sql-366"><span class="linenos">366</span></a><span class="sd"> PARTITIONED BY value is an array of column names, they are transformed into a schema. The corresponding</span>
+</span><span id="create_with_partitions_sql-367"><a href="#create_with_partitions_sql-367"><span class="linenos">367</span></a><span class="sd"> columns are removed from the create statement.</span>
+</span><span id="create_with_partitions_sql-368"><a href="#create_with_partitions_sql-368"><span class="linenos">368</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="create_with_partitions_sql-369"><a href="#create_with_partitions_sql-369"><span class="linenos">369</span></a> <span class="n">has_schema</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">)</span>
+</span><span id="create_with_partitions_sql-370"><a href="#create_with_partitions_sql-370"><span class="linenos">370</span></a> <span class="n">is_partitionable</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">)</span>
+</span><span id="create_with_partitions_sql-371"><a href="#create_with_partitions_sql-371"><span class="linenos">371</span></a>
+</span><span id="create_with_partitions_sql-372"><a href="#create_with_partitions_sql-372"><span class="linenos">372</span></a> <span class="k">if</span> <span class="n">has_schema</span> <span class="ow">and</span> <span class="n">is_partitionable</span><span class="p">:</span>
+</span><span id="create_with_partitions_sql-373"><a href="#create_with_partitions_sql-373"><span class="linenos">373</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="create_with_partitions_sql-374"><a href="#create_with_partitions_sql-374"><span class="linenos">374</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span>
+</span><span id="create_with_partitions_sql-375"><a href="#create_with_partitions_sql-375"><span class="linenos">375</span></a> <span class="k">if</span> <span class="n">prop</span> <span class="ow">and</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">):</span>
+</span><span id="create_with_partitions_sql-376"><a href="#create_with_partitions_sql-376"><span class="linenos">376</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="create_with_partitions_sql-377"><a href="#create_with_partitions_sql-377"><span class="linenos">377</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">v</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">prop</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">}</span>
+</span><span id="create_with_partitions_sql-378"><a href="#create_with_partitions_sql-378"><span class="linenos">378</span></a> <span class="n">partitions</span> <span class="o">=</span> <span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">col</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">]</span>
+</span><span id="create_with_partitions_sql-379"><a href="#create_with_partitions_sql-379"><span class="linenos">379</span></a> <span class="n">schema</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">schema</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">partitions</span><span class="p">])</span>
+</span><span id="create_with_partitions_sql-380"><a href="#create_with_partitions_sql-380"><span class="linenos">380</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">partitions</span><span class="p">)))</span>
+</span><span id="create_with_partitions_sql-381"><a href="#create_with_partitions_sql-381"><span class="linenos">381</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
+</span><span id="create_with_partitions_sql-382"><a href="#create_with_partitions_sql-382"><span class="linenos">382</span></a>
+</span><span id="create_with_partitions_sql-383"><a href="#create_with_partitions_sql-383"><span class="linenos">383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1961,17 +1978,17 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#parse_date_delta"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta-385"><a href="#parse_date_delta-385"><span class="linenos">385</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
-</span><span id="parse_date_delta-386"><a href="#parse_date_delta-386"><span class="linenos">386</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="parse_date_delta-387"><a href="#parse_date_delta-387"><span class="linenos">387</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
-</span><span id="parse_date_delta-388"><a href="#parse_date_delta-388"><span class="linenos">388</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="parse_date_delta-389"><a href="#parse_date_delta-389"><span class="linenos">389</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
-</span><span id="parse_date_delta-390"><a href="#parse_date_delta-390"><span class="linenos">390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="parse_date_delta-391"><a href="#parse_date_delta-391"><span class="linenos">391</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
-</span><span id="parse_date_delta-392"><a href="#parse_date_delta-392"><span class="linenos">392</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
-</span><span id="parse_date_delta-393"><a href="#parse_date_delta-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="parse_date_delta-394"><a href="#parse_date_delta-394"><span class="linenos">394</span></a>
-</span><span id="parse_date_delta-395"><a href="#parse_date_delta-395"><span class="linenos">395</span></a> <span class="k">return</span> <span class="n">inner_func</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta-386"><a href="#parse_date_delta-386"><span class="linenos">386</span></a><span class="k">def</span> <span class="nf">parse_date_delta</span><span class="p">(</span>
+</span><span id="parse_date_delta-387"><a href="#parse_date_delta-387"><span class="linenos">387</span></a> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">unit_mapping</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="parse_date_delta-388"><a href="#parse_date_delta-388"><span class="linenos">388</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
+</span><span id="parse_date_delta-389"><a href="#parse_date_delta-389"><span class="linenos">389</span></a> <span class="k">def</span> <span class="nf">inner_func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="parse_date_delta-390"><a href="#parse_date_delta-390"><span class="linenos">390</span></a> <span class="n">unit_based</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span>
+</span><span id="parse_date_delta-391"><a href="#parse_date_delta-391"><span class="linenos">391</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="parse_date_delta-392"><a href="#parse_date_delta-392"><span class="linenos">392</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">unit_based</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">)</span>
+</span><span id="parse_date_delta-393"><a href="#parse_date_delta-393"><span class="linenos">393</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit_mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span> <span class="k">if</span> <span class="n">unit_mapping</span> <span class="k">else</span> <span class="n">unit</span>
+</span><span id="parse_date_delta-394"><a href="#parse_date_delta-394"><span class="linenos">394</span></a> <span class="k">return</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="parse_date_delta-395"><a href="#parse_date_delta-395"><span class="linenos">395</span></a>
+</span><span id="parse_date_delta-396"><a href="#parse_date_delta-396"><span class="linenos">396</span></a> <span class="k">return</span> <span class="n">inner_func</span>
</span></pre></div>
@@ -1989,25 +2006,25 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#parse_date_delta_with_interval"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta_with_interval-398"><a href="#parse_date_delta_with_interval-398"><span class="linenos">398</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
-</span><span id="parse_date_delta_with_interval-399"><a href="#parse_date_delta_with_interval-399"><span class="linenos">399</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
-</span><span id="parse_date_delta_with_interval-400"><a href="#parse_date_delta_with_interval-400"><span class="linenos">400</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
-</span><span id="parse_date_delta_with_interval-401"><a href="#parse_date_delta_with_interval-401"><span class="linenos">401</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="parse_date_delta_with_interval-402"><a href="#parse_date_delta_with_interval-402"><span class="linenos">402</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="parse_date_delta_with_interval-403"><a href="#parse_date_delta_with_interval-403"><span class="linenos">403</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="parse_date_delta_with_interval-404"><a href="#parse_date_delta_with_interval-404"><span class="linenos">404</span></a>
-</span><span id="parse_date_delta_with_interval-405"><a href="#parse_date_delta_with_interval-405"><span class="linenos">405</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="parse_date_delta_with_interval-406"><a href="#parse_date_delta_with_interval-406"><span class="linenos">406</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
-</span><span id="parse_date_delta_with_interval-407"><a href="#parse_date_delta_with_interval-407"><span class="linenos">407</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="parse_date_delta_with_interval-408"><a href="#parse_date_delta_with_interval-408"><span class="linenos">408</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="parse_date_delta_with_interval-409"><a href="#parse_date_delta_with_interval-409"><span class="linenos">409</span></a>
-</span><span id="parse_date_delta_with_interval-410"><a href="#parse_date_delta_with_interval-410"><span class="linenos">410</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
-</span><span id="parse_date_delta_with_interval-411"><a href="#parse_date_delta_with_interval-411"><span class="linenos">411</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
-</span><span id="parse_date_delta_with_interval-412"><a href="#parse_date_delta_with_interval-412"><span class="linenos">412</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="parse_date_delta_with_interval-413"><a href="#parse_date_delta_with_interval-413"><span class="linenos">413</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
-</span><span id="parse_date_delta_with_interval-414"><a href="#parse_date_delta_with_interval-414"><span class="linenos">414</span></a> <span class="p">)</span>
-</span><span id="parse_date_delta_with_interval-415"><a href="#parse_date_delta_with_interval-415"><span class="linenos">415</span></a>
-</span><span id="parse_date_delta_with_interval-416"><a href="#parse_date_delta_with_interval-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="n">func</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="parse_date_delta_with_interval-399"><a href="#parse_date_delta_with_interval-399"><span class="linenos">399</span></a><span class="k">def</span> <span class="nf">parse_date_delta_with_interval</span><span class="p">(</span>
+</span><span id="parse_date_delta_with_interval-400"><a href="#parse_date_delta_with_interval-400"><span class="linenos">400</span></a> <span class="n">expression_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span>
+</span><span id="parse_date_delta_with_interval-401"><a href="#parse_date_delta_with_interval-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">Callable</span><span class="p">[[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]]:</span>
+</span><span id="parse_date_delta_with_interval-402"><a href="#parse_date_delta_with_interval-402"><span class="linenos">402</span></a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="parse_date_delta_with_interval-403"><a href="#parse_date_delta_with_interval-403"><span class="linenos">403</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="parse_date_delta_with_interval-404"><a href="#parse_date_delta_with_interval-404"><span class="linenos">404</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="parse_date_delta_with_interval-405"><a href="#parse_date_delta_with_interval-405"><span class="linenos">405</span></a>
+</span><span id="parse_date_delta_with_interval-406"><a href="#parse_date_delta_with_interval-406"><span class="linenos">406</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="parse_date_delta_with_interval-407"><a href="#parse_date_delta_with_interval-407"><span class="linenos">407</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
+</span><span id="parse_date_delta_with_interval-408"><a href="#parse_date_delta_with_interval-408"><span class="linenos">408</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="parse_date_delta_with_interval-409"><a href="#parse_date_delta_with_interval-409"><span class="linenos">409</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="parse_date_delta_with_interval-410"><a href="#parse_date_delta_with_interval-410"><span class="linenos">410</span></a>
+</span><span id="parse_date_delta_with_interval-411"><a href="#parse_date_delta_with_interval-411"><span class="linenos">411</span></a> <span class="k">return</span> <span class="n">expression_class</span><span class="p">(</span>
+</span><span id="parse_date_delta_with_interval-412"><a href="#parse_date_delta_with_interval-412"><span class="linenos">412</span></a> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
+</span><span id="parse_date_delta_with_interval-413"><a href="#parse_date_delta_with_interval-413"><span class="linenos">413</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="parse_date_delta_with_interval-414"><a href="#parse_date_delta_with_interval-414"><span class="linenos">414</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
+</span><span id="parse_date_delta_with_interval-415"><a href="#parse_date_delta_with_interval-415"><span class="linenos">415</span></a> <span class="p">)</span>
+</span><span id="parse_date_delta_with_interval-416"><a href="#parse_date_delta_with_interval-416"><span class="linenos">416</span></a>
+</span><span id="parse_date_delta_with_interval-417"><a href="#parse_date_delta_with_interval-417"><span class="linenos">417</span></a> <span class="k">return</span> <span class="n">func</span>
</span></pre></div>
@@ -2025,13 +2042,13 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#date_trunc_to_time"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="date_trunc_to_time-419"><a href="#date_trunc_to_time-419"><span class="linenos">419</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
-</span><span id="date_trunc_to_time-420"><a href="#date_trunc_to_time-420"><span class="linenos">420</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="date_trunc_to_time-421"><a href="#date_trunc_to_time-421"><span class="linenos">421</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="date_trunc_to_time-422"><a href="#date_trunc_to_time-422"><span class="linenos">422</span></a>
-</span><span id="date_trunc_to_time-423"><a href="#date_trunc_to_time-423"><span class="linenos">423</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
-</span><span id="date_trunc_to_time-424"><a href="#date_trunc_to_time-424"><span class="linenos">424</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="date_trunc_to_time-425"><a href="#date_trunc_to_time-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="date_trunc_to_time-420"><a href="#date_trunc_to_time-420"><span class="linenos">420</span></a><span class="k">def</span> <span class="nf">date_trunc_to_time</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span>
+</span><span id="date_trunc_to_time-421"><a href="#date_trunc_to_time-421"><span class="linenos">421</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="date_trunc_to_time-422"><a href="#date_trunc_to_time-422"><span class="linenos">422</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="date_trunc_to_time-423"><a href="#date_trunc_to_time-423"><span class="linenos">423</span></a>
+</span><span id="date_trunc_to_time-424"><a href="#date_trunc_to_time-424"><span class="linenos">424</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">):</span>
+</span><span id="date_trunc_to_time-425"><a href="#date_trunc_to_time-425"><span class="linenos">425</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="date_trunc_to_time-426"><a href="#date_trunc_to_time-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
</span></pre></div>
@@ -2049,10 +2066,10 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#timestamptrunc_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="timestamptrunc_sql-428"><a href="#timestamptrunc_sql-428"><span class="linenos">428</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="timestamptrunc_sql-429"><a href="#timestamptrunc_sql-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="timestamptrunc_sql-430"><a href="#timestamptrunc_sql-430"><span class="linenos">430</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="timestamptrunc_sql-431"><a href="#timestamptrunc_sql-431"><span class="linenos">431</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="timestamptrunc_sql-429"><a href="#timestamptrunc_sql-429"><span class="linenos">429</span></a><span class="k">def</span> <span class="nf">timestamptrunc_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="timestamptrunc_sql-430"><a href="#timestamptrunc_sql-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="timestamptrunc_sql-431"><a href="#timestamptrunc_sql-431"><span class="linenos">431</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="timestamptrunc_sql-432"><a href="#timestamptrunc_sql-432"><span class="linenos">432</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2070,12 +2087,12 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#locate_to_strposition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-434"><a href="#locate_to_strposition-434"><span class="linenos">434</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="locate_to_strposition-435"><a href="#locate_to_strposition-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="locate_to_strposition-436"><a href="#locate_to_strposition-436"><span class="linenos">436</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="locate_to_strposition-437"><a href="#locate_to_strposition-437"><span class="linenos">437</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="locate_to_strposition-438"><a href="#locate_to_strposition-438"><span class="linenos">438</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
-</span><span id="locate_to_strposition-439"><a href="#locate_to_strposition-439"><span class="linenos">439</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="locate_to_strposition-435"><a href="#locate_to_strposition-435"><span class="linenos">435</span></a><span class="k">def</span> <span class="nf">locate_to_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="locate_to_strposition-436"><a href="#locate_to_strposition-436"><span class="linenos">436</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="locate_to_strposition-437"><a href="#locate_to_strposition-437"><span class="linenos">437</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="locate_to_strposition-438"><a href="#locate_to_strposition-438"><span class="linenos">438</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="locate_to_strposition-439"><a href="#locate_to_strposition-439"><span class="linenos">439</span></a> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
+</span><span id="locate_to_strposition-440"><a href="#locate_to_strposition-440"><span class="linenos">440</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2093,10 +2110,10 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#strposition_to_locate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-442"><a href="#strposition_to_locate_sql-442"><span class="linenos">442</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="strposition_to_locate_sql-443"><a href="#strposition_to_locate_sql-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="strposition_to_locate_sql-444"><a href="#strposition_to_locate_sql-444"><span class="linenos">444</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="strposition_to_locate_sql-445"><a href="#strposition_to_locate_sql-445"><span class="linenos">445</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="strposition_to_locate_sql-443"><a href="#strposition_to_locate_sql-443"><span class="linenos">443</span></a><span class="k">def</span> <span class="nf">strposition_to_locate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="strposition_to_locate_sql-444"><a href="#strposition_to_locate_sql-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="strposition_to_locate_sql-445"><a href="#strposition_to_locate_sql-445"><span class="linenos">445</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;substr&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="strposition_to_locate_sql-446"><a href="#strposition_to_locate_sql-446"><span class="linenos">446</span></a> <span class="p">)</span>
</span></pre></div>
@@ -2114,8 +2131,8 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#timestrtotime_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-448"><a href="#timestrtotime_sql-448"><span class="linenos">448</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="timestrtotime_sql-449"><a href="#timestrtotime_sql-449"><span class="linenos">449</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="timestrtotime_sql-449"><a href="#timestrtotime_sql-449"><span class="linenos">449</span></a><span class="k">def</span> <span class="nf">timestrtotime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="timestrtotime_sql-450"><a href="#timestrtotime_sql-450"><span class="linenos">450</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
</span></pre></div>
@@ -2133,8 +2150,8 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#datestrtodate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-452"><a href="#datestrtodate_sql-452"><span class="linenos">452</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="datestrtodate_sql-453"><a href="#datestrtodate_sql-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="datestrtodate_sql-453"><a href="#datestrtodate_sql-453"><span class="linenos">453</span></a><span class="k">def</span> <span class="nf">datestrtodate_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="datestrtodate_sql-454"><a href="#datestrtodate_sql-454"><span class="linenos">454</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
</span></pre></div>
@@ -2152,9 +2169,9 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#min_or_least"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="min_or_least-456"><a href="#min_or_least-456"><span class="linenos">456</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="min_or_least-457"><a href="#min_or_least-457"><span class="linenos">457</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
-</span><span id="min_or_least-458"><a href="#min_or_least-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="min_or_least-457"><a href="#min_or_least-457"><span class="linenos">457</span></a><span class="k">def</span> <span class="nf">min_or_least</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="min_or_least-458"><a href="#min_or_least-458"><span class="linenos">458</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;LEAST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MIN&quot;</span>
+</span><span id="min_or_least-459"><a href="#min_or_least-459"><span class="linenos">459</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2172,9 +2189,9 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#max_or_greatest"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="max_or_greatest-461"><a href="#max_or_greatest-461"><span class="linenos">461</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="max_or_greatest-462"><a href="#max_or_greatest-462"><span class="linenos">462</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="max_or_greatest-463"><a href="#max_or_greatest-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="max_or_greatest-462"><a href="#max_or_greatest-462"><span class="linenos">462</span></a><span class="k">def</span> <span class="nf">max_or_greatest</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="max_or_greatest-463"><a href="#max_or_greatest-463"><span class="linenos">463</span></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;GREATEST&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span> <span class="k">else</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="max_or_greatest-464"><a href="#max_or_greatest-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="n">name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2192,14 +2209,14 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#count_if_to_sum"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="count_if_to_sum-466"><a href="#count_if_to_sum-466"><span class="linenos">466</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="count_if_to_sum-467"><a href="#count_if_to_sum-467"><span class="linenos">467</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="count_if_to_sum-468"><a href="#count_if_to_sum-468"><span class="linenos">468</span></a>
-</span><span id="count_if_to_sum-469"><a href="#count_if_to_sum-469"><span class="linenos">469</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
-</span><span id="count_if_to_sum-470"><a href="#count_if_to_sum-470"><span class="linenos">470</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="count_if_to_sum-471"><a href="#count_if_to_sum-471"><span class="linenos">471</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
-</span><span id="count_if_to_sum-472"><a href="#count_if_to_sum-472"><span class="linenos">472</span></a>
-</span><span id="count_if_to_sum-473"><a href="#count_if_to_sum-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="count_if_to_sum-467"><a href="#count_if_to_sum-467"><span class="linenos">467</span></a><span class="k">def</span> <span class="nf">count_if_to_sum</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="count_if_to_sum-468"><a href="#count_if_to_sum-468"><span class="linenos">468</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="count_if_to_sum-469"><a href="#count_if_to_sum-469"><span class="linenos">469</span></a>
+</span><span id="count_if_to_sum-470"><a href="#count_if_to_sum-470"><span class="linenos">470</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">):</span>
+</span><span id="count_if_to_sum-471"><a href="#count_if_to_sum-471"><span class="linenos">471</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="count_if_to_sum-472"><a href="#count_if_to_sum-472"><span class="linenos">472</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DISTINCT is not supported when converting COUNT_IF to SUM&quot;</span><span class="p">)</span>
+</span><span id="count_if_to_sum-473"><a href="#count_if_to_sum-473"><span class="linenos">473</span></a>
+</span><span id="count_if_to_sum-474"><a href="#count_if_to_sum-474"><span class="linenos">474</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;sum&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span></pre></div>
@@ -2217,21 +2234,21 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#trim_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="trim_sql-476"><a href="#trim_sql-476"><span class="linenos">476</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="trim_sql-477"><a href="#trim_sql-477"><span class="linenos">477</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="trim_sql-478"><a href="#trim_sql-478"><span class="linenos">478</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
-</span><span id="trim_sql-479"><a href="#trim_sql-479"><span class="linenos">479</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="trim_sql-480"><a href="#trim_sql-480"><span class="linenos">480</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
-</span><span id="trim_sql-481"><a href="#trim_sql-481"><span class="linenos">481</span></a>
-</span><span id="trim_sql-482"><a href="#trim_sql-482"><span class="linenos">482</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
-</span><span id="trim_sql-483"><a href="#trim_sql-483"><span class="linenos">483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
-</span><span id="trim_sql-484"><a href="#trim_sql-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="trim_sql-485"><a href="#trim_sql-485"><span class="linenos">485</span></a>
-</span><span id="trim_sql-486"><a href="#trim_sql-486"><span class="linenos">486</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="trim_sql-487"><a href="#trim_sql-487"><span class="linenos">487</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="trim_sql-488"><a href="#trim_sql-488"><span class="linenos">488</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="trim_sql-489"><a href="#trim_sql-489"><span class="linenos">489</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="trim_sql-490"><a href="#trim_sql-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="trim_sql-477"><a href="#trim_sql-477"><span class="linenos">477</span></a><span class="k">def</span> <span class="nf">trim_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="trim_sql-478"><a href="#trim_sql-478"><span class="linenos">478</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="trim_sql-479"><a href="#trim_sql-479"><span class="linenos">479</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;position&quot;</span><span class="p">)</span>
+</span><span id="trim_sql-480"><a href="#trim_sql-480"><span class="linenos">480</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="trim_sql-481"><a href="#trim_sql-481"><span class="linenos">481</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;collation&quot;</span><span class="p">)</span>
+</span><span id="trim_sql-482"><a href="#trim_sql-482"><span class="linenos">482</span></a>
+</span><span id="trim_sql-483"><a href="#trim_sql-483"><span class="linenos">483</span></a> <span class="c1"># Use TRIM/LTRIM/RTRIM syntax if the expression isn&#39;t database-specific</span>
+</span><span id="trim_sql-484"><a href="#trim_sql-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">remove_chars</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">collation</span><span class="p">:</span>
+</span><span id="trim_sql-485"><a href="#trim_sql-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">trim_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="trim_sql-486"><a href="#trim_sql-486"><span class="linenos">486</span></a>
+</span><span id="trim_sql-487"><a href="#trim_sql-487"><span class="linenos">487</span></a> <span class="n">trim_type</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="trim_sql-488"><a href="#trim_sql-488"><span class="linenos">488</span></a> <span class="n">remove_chars</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">remove_chars</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="trim_sql-489"><a href="#trim_sql-489"><span class="linenos">489</span></a> <span class="n">from_part</span> <span class="o">=</span> <span class="s2">&quot;FROM &quot;</span> <span class="k">if</span> <span class="n">trim_type</span> <span class="ow">or</span> <span class="n">remove_chars</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="trim_sql-490"><a href="#trim_sql-490"><span class="linenos">490</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; COLLATE </span><span class="si">{</span><span class="n">collation</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">collation</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="trim_sql-491"><a href="#trim_sql-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRIM(</span><span class="si">{</span><span class="n">trim_type</span><span class="si">}{</span><span class="n">remove_chars</span><span class="si">}{</span><span class="n">from_part</span><span class="si">}{</span><span class="n">target</span><span class="si">}{</span><span class="n">collation</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -2249,8 +2266,8 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#str_to_time_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="str_to_time_sql-493"><a href="#str_to_time_sql-493"><span class="linenos">493</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="str_to_time_sql-494"><a href="#str_to_time_sql-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="str_to_time_sql-494"><a href="#str_to_time_sql-494"><span class="linenos">494</span></a><span class="k">def</span> <span class="nf">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="str_to_time_sql-495"><a href="#str_to_time_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;STRPTIME&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
</span></pre></div>
@@ -2268,15 +2285,15 @@ columns are removed from the create statement.</p>
</div>
<a class="headerlink" href="#ts_or_ds_to_date_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_to_date_sql-497"><a href="#ts_or_ds_to_date_sql-497"><span class="linenos">497</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
-</span><span id="ts_or_ds_to_date_sql-498"><a href="#ts_or_ds_to_date_sql-498"><span class="linenos">498</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="ts_or_ds_to_date_sql-499"><a href="#ts_or_ds_to_date_sql-499"><span class="linenos">499</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="ts_or_ds_to_date_sql-500"><a href="#ts_or_ds_to_date_sql-500"><span class="linenos">500</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="ts_or_ds_to_date_sql-501"><a href="#ts_or_ds_to_date_sql-501"><span class="linenos">501</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
-</span><span id="ts_or_ds_to_date_sql-502"><a href="#ts_or_ds_to_date_sql-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
-</span><span id="ts_or_ds_to_date_sql-503"><a href="#ts_or_ds_to_date_sql-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
-</span><span id="ts_or_ds_to_date_sql-504"><a href="#ts_or_ds_to_date_sql-504"><span class="linenos">504</span></a>
-</span><span id="ts_or_ds_to_date_sql-505"><a href="#ts_or_ds_to_date_sql-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ts_or_ds_to_date_sql-498"><a href="#ts_or_ds_to_date_sql-498"><span class="linenos">498</span></a><span class="k">def</span> <span class="nf">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="n">dialect</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">:</span>
+</span><span id="ts_or_ds_to_date_sql-499"><a href="#ts_or_ds_to_date_sql-499"><span class="linenos">499</span></a> <span class="k">def</span> <span class="nf">_ts_or_ds_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="ts_or_ds_to_date_sql-500"><a href="#ts_or_ds_to_date_sql-500"><span class="linenos">500</span></a> <span class="n">_dialect</span> <span class="o">=</span> <span class="n">Dialect</span><span class="o">.</span><span class="n">get_or_raise</span><span class="p">(</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="ts_or_ds_to_date_sql-501"><a href="#ts_or_ds_to_date_sql-501"><span class="linenos">501</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="ts_or_ds_to_date_sql-502"><a href="#ts_or_ds_to_date_sql-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">_dialect</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">_dialect</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
+</span><span id="ts_or_ds_to_date_sql-503"><a href="#ts_or_ds_to_date_sql-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
+</span><span id="ts_or_ds_to_date_sql-504"><a href="#ts_or_ds_to_date_sql-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
+</span><span id="ts_or_ds_to_date_sql-505"><a href="#ts_or_ds_to_date_sql-505"><span class="linenos">505</span></a>
+</span><span id="ts_or_ds_to_date_sql-506"><a href="#ts_or_ds_to_date_sql-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="n">_ts_or_ds_to_date_sql</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/drill.html b/docs/sqlglot/dialects/drill.html
index bd76bd7..19f0262 100644
--- a/docs/sqlglot/dialects/drill.html
+++ b/docs/sqlglot/dialects/drill.html
@@ -84,7 +84,7 @@
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a>
-</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">Dialect</span><span class="p">,</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
@@ -227,21 +227,22 @@
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="p">}</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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_distinct_on</span><span class="p">]),</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="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="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-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@@ -356,21 +357,22 @@
</span><span id="Drill-146"><a href="#Drill-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="Drill-147"><a href="#Drill-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Drill-148"><a href="#Drill-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
-</span><span id="Drill-149"><a href="#Drill-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill-150"><a href="#Drill-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Drill-151"><a href="#Drill-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Drill-152"><a href="#Drill-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Drill-153"><a href="#Drill-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill-154"><a href="#Drill-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Drill-155"><a href="#Drill-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Drill-156"><a href="#Drill-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="Drill-157"><a href="#Drill-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill-158"><a href="#Drill-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
-</span><span id="Drill-159"><a href="#Drill-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Drill-160"><a href="#Drill-160"><span class="linenos">160</span></a> <span class="p">}</span>
-</span><span id="Drill-161"><a href="#Drill-161"><span class="linenos">161</span></a>
-</span><span id="Drill-162"><a href="#Drill-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Drill-163"><a href="#Drill-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
+</span><span id="Drill-149"><a href="#Drill-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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_distinct_on</span><span class="p">]),</span>
+</span><span id="Drill-150"><a href="#Drill-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill-151"><a href="#Drill-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Drill-152"><a href="#Drill-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Drill-153"><a href="#Drill-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Drill-154"><a href="#Drill-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill-155"><a href="#Drill-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Drill-156"><a href="#Drill-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Drill-157"><a href="#Drill-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="Drill-158"><a href="#Drill-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill-159"><a href="#Drill-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
+</span><span id="Drill-160"><a href="#Drill-160"><span class="linenos">160</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Drill-161"><a href="#Drill-161"><span class="linenos">161</span></a> <span class="p">}</span>
+</span><span id="Drill-162"><a href="#Drill-162"><span class="linenos">162</span></a>
+</span><span id="Drill-163"><a href="#Drill-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Drill-164"><a href="#Drill-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@@ -546,21 +548,22 @@ Default: "nulls_are_small"</li>
</span><span id="Drill.Generator-146"><a href="#Drill.Generator-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">str_position_sql</span><span class="p">,</span>
</span><span id="Drill.Generator-147"><a href="#Drill.Generator-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Drill.Generator-148"><a href="#Drill.Generator-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;POW&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-149"><a href="#Drill.Generator-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-150"><a href="#Drill.Generator-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-151"><a href="#Drill.Generator-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="Drill.Generator-152"><a href="#Drill.Generator-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-153"><a href="#Drill.Generator-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-154"><a href="#Drill.Generator-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-155"><a href="#Drill.Generator-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Drill.Generator-156"><a href="#Drill.Generator-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="Drill.Generator-157"><a href="#Drill.Generator-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-158"><a href="#Drill.Generator-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
-</span><span id="Drill.Generator-159"><a href="#Drill.Generator-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Drill.Generator-160"><a href="#Drill.Generator-160"><span class="linenos">160</span></a> <span class="p">}</span>
-</span><span id="Drill.Generator-161"><a href="#Drill.Generator-161"><span class="linenos">161</span></a>
-</span><span id="Drill.Generator-162"><a href="#Drill.Generator-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Drill.Generator-163"><a href="#Drill.Generator-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
+</span><span id="Drill.Generator-149"><a href="#Drill.Generator-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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_distinct_on</span><span class="p">]),</span>
+</span><span id="Drill.Generator-150"><a href="#Drill.Generator-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-151"><a href="#Drill.Generator-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-152"><a href="#Drill.Generator-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="Drill.Generator-153"><a href="#Drill.Generator-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-154"><a href="#Drill.Generator-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-155"><a href="#Drill.Generator-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-156"><a href="#Drill.Generator-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Drill.Generator-157"><a href="#Drill.Generator-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="Drill.Generator-158"><a href="#Drill.Generator-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS DATE), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-159"><a href="#Drill.Generator-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;drill&quot;</span><span class="p">),</span>
+</span><span id="Drill.Generator-160"><a href="#Drill.Generator-160"><span class="linenos">160</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Drill.Generator-161"><a href="#Drill.Generator-161"><span class="linenos">161</span></a> <span class="p">}</span>
+</span><span id="Drill.Generator-162"><a href="#Drill.Generator-162"><span class="linenos">162</span></a>
+</span><span id="Drill.Generator-163"><a href="#Drill.Generator-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Drill.Generator-164"><a href="#Drill.Generator-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@@ -619,8 +622,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Drill.Generator.normalize_func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Generator.normalize_func-162"><a href="#Drill.Generator.normalize_func-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Drill.Generator.normalize_func-163"><a href="#Drill.Generator.normalize_func-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Drill.Generator.normalize_func-163"><a href="#Drill.Generator.normalize_func-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">normalize_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Drill.Generator.normalize_func-164"><a href="#Drill.Generator.normalize_func-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="n">name</span> <span class="k">if</span> <span class="n">exp</span><span class="o">.</span><span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;`</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">`&quot;</span>
</span></pre></div>
@@ -750,7 +753,7 @@ Default: True</li>
<dd id="Drill.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Drill.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Drill.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Drill.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Drill.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Drill.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Drill.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Drill.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -759,6 +762,7 @@ Default: True</li>
<dd id="Drill.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Drill.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Drill.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Drill.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Drill.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Drill.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Drill.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/duckdb.html b/docs/sqlglot/dialects/duckdb.html
index 87d47ec..145445d 100644
--- a/docs/sqlglot/dialects/duckdb.html
+++ b/docs/sqlglot/dialects/duckdb.html
@@ -82,232 +82,246 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
-</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
-</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
-</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a> <span class="n">Dialect</span><span class="p">,</span>
-</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a> <span class="n">datestrtodate_sql</span><span class="p">,</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">format_time_lambda</span><span class="p">,</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="n">no_comment_column_constraint_sql</span><span class="p">,</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">no_properties_sql</span><span class="p">,</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">no_safe_divide_sql</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">str_position_sql</span><span class="p">,</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">str_to_time_sql</span><span class="p">,</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">ts_or_ds_to_date_sql</span><span class="p">,</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="p">)</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span 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-23"><a href="#L-23"><span class="linenos"> 23</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-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">_ts_or_ds_add</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-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-28"><a href="#L-28"><span class="linenos"> 28</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 class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</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">this</span><span class="si">}</span><span class="s2"> AS DATE) + </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</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-30"><a href="#L-30"><span class="linenos"> 30</span></a>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="k">def</span> <span class="nf">_date_add</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-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-34"><a href="#L-34"><span class="linenos"> 34</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 class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</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="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="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-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><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="k">def</span> <span class="nf">_array_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><span id="L-39"><a href="#L-39"><span class="linenos"> 39</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-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DUCKDB ARRAY_SORT does not support a comparator&quot;</span><span class="p">)</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ARRAY_SORT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-42"><a href="#L-42"><span class="linenos"> 42</span></a>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="k">def</span> <span class="nf">_sort_array_sql</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-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-46"><a href="#L-46"><span class="linenos"> 46</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;asc&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">():</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ARRAY_REVERSE_SORT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ARRAY_SORT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>
-</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="k">def</span> <span class="nf">_sort_array_reverse</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</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">asc</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">false</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><span id="L-55"><a href="#L-55"><span class="linenos"> 55</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><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</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">name</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">e</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">&#39;: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#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><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="p">]</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="se">{{</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">args</span><span class="p">)</span><span class="si">}</span><span class="se">}}</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><span id="L-62"><a href="#L-62"><span class="linenos"> 62</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><span id="L-63"><a href="#L-63"><span class="linenos"> 63</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">exp</span><span 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-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">return</span> <span class="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-65"><a href="#L-65"><span class="linenos"> 65</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-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><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a><span class="k">def</span> <span class="nf">_regexp_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><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</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="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="s2">&quot;occurrence&quot;</span><span class="p">)))</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</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;REGEXP_EXTRACT does not support arg(s) </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">&quot;</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</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;expression&quot;</span><span class="p">),</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</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;group&quot;</span><span class="p">),</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><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="k">class</span> <span class="nc">DuckDB</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">KEYWORDS</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">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-84"><a href="#L-84"><span class="linenos"> 84</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-85"><a href="#L-85"><span class="linenos"> 85</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-86"><a href="#L-86"><span class="linenos"> 86</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-87"><a href="#L-87"><span class="linenos"> 87</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">VARBINARY</span><span class="p">,</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</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">TEXT</span><span class="p">,</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;BITSTRING&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-90"><a href="#L-90"><span class="linenos"> 90</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">TEXT</span><span class="p">,</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</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">TEXT</span><span class="p">,</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;EXCLUDE&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-93"><a href="#L-93"><span class="linenos"> 93</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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="s2">&quot;LOGICAL&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-95"><a href="#L-95"><span class="linenos"> 95</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">DOUBLE</span><span class="p">,</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;SIGNED&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-97"><a href="#L-97"><span class="linenos"> 97</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">VARCHAR</span><span class="p">,</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;UBIGINT&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-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;UINTEGER&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-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="s2">&quot;USMALLINT&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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="s2">&quot;UTINYINT&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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="p">}</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</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;ARRAY_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</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;ARRAY_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;EPOCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</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;EPOCH_MS&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">UnixToTime</span><span class="p">(</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</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><span id="L-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1000</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="p">),</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="s2">&quot;LIST_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="s2">&quot;LIST_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="s2">&quot;LIST_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="s2">&quot;REGEXP_MATCHES&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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="s2">&quot;STRFTIME&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;duckdb&quot;</span><span class="p">),</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="s2">&quot;STRPTIME&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</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;STRING_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</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;STRING_TO_ARRAY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</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;STR_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="s2">&quot;STRING_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</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><span id="L-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="p">}</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="p">}</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="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-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</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-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">Dialect</span><span class="p">,</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a> <span class="n">arrow_json_extract_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">no_comment_column_constraint_sql</span><span class="p">,</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a> <span class="n">no_pivot_sql</span><span class="p">,</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">no_properties_sql</span><span class="p">,</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="n">no_safe_divide_sql</span><span class="p">,</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="n">rename_func</span><span class="p">,</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">str_position_sql</span><span class="p">,</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">str_to_time_sql</span><span class="p">,</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="n">timestamptrunc_sql</span><span class="p">,</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">timestrtotime_sql</span><span class="p">,</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="n">ts_or_ds_to_date_sql</span><span class="p">,</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="p">)</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</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-25"><a href="#L-25"><span class="linenos"> 25</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-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><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="k">def</span> <span class="nf">_ts_or_ds_add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">TsOrDsAdd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-30"><a href="#L-30"><span class="linenos"> 30</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 class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</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">this</span><span class="si">}</span><span class="s2"> AS DATE) + </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</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-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><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="k">def</span> <span class="nf">_date_add_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">DateAdd</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-36"><a href="#L-36"><span class="linenos"> 36</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 class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;DAY&quot;</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</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="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="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-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><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="k">def</span> <span class="nf">_array_sort_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">ArraySort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</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-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DUCKDB ARRAY_SORT does not support a comparator&quot;</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="sa">f</span><span class="s2">&quot;ARRAY_SORT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-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><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="k">def</span> <span class="nf">_sort_array_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">SortArray</span><span class="p">)</span> <span class="o">-&gt;</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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-48"><a href="#L-48"><span class="linenos"> 48</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;asc&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">():</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ARRAY_REVERSE_SORT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;ARRAY_SORT(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</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><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a><span class="k">def</span> <span class="nf">_sort_array_reverse</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</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">asc</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</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">def</span> <span class="nf">_parse_date_diff</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">(</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</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><span id="L-60"><a href="#L-60"><span class="linenos"> 60</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-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="p">)</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><span id="L-65"><a href="#L-65"><span class="linenos"> 65</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">generator</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">Struct</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">args</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="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">name</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">e</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">&#39;: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#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><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="p">]</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</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">args</span><span class="p">)</span><span class="si">}</span><span class="se">}}</span><span class="s2">&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><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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">generator</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-73"><a href="#L-73"><span class="linenos"> 73</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">exp</span><span 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-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">return</span> <span class="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-75"><a href="#L-75"><span class="linenos"> 75</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-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><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="k">def</span> <span class="nf">_regexp_extract_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">RegexpExtract</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">bad_args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</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="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="s2">&quot;occurrence&quot;</span><span class="p">)))</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">if</span> <span class="n">bad_args</span><span class="p">:</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;REGEXP_EXTRACT does not support arg(s) </span><span class="si">{</span><span class="n">bad_args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</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-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;REGEXP_EXTRACT&quot;</span><span class="p">,</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</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-86"><a href="#L-86"><span class="linenos"> 86</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;expression&quot;</span><span class="p">),</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</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;group&quot;</span><span class="p">),</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="p">)</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><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="k">class</span> <span class="nc">DuckDB</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</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-95"><a href="#L-95"><span class="linenos"> 95</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-96"><a href="#L-96"><span class="linenos"> 96</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-97"><a href="#L-97"><span class="linenos"> 97</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-98"><a href="#L-98"><span class="linenos"> 98</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">VARBINARY</span><span class="p">,</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</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">TEXT</span><span class="p">,</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="s2">&quot;BITSTRING&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-101"><a href="#L-101"><span class="linenos">101</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">TEXT</span><span class="p">,</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</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">TEXT</span><span class="p">,</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="s2">&quot;EXCLUDE&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-104"><a href="#L-104"><span class="linenos">104</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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="s2">&quot;LOGICAL&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-106"><a href="#L-106"><span class="linenos">106</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">DOUBLE</span><span class="p">,</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="s2">&quot;SIGNED&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-108"><a href="#L-108"><span class="linenos">108</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">VARCHAR</span><span class="p">,</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="s2">&quot;UBIGINT&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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="s2">&quot;UINTEGER&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-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;USMALLINT&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-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;UTINYINT&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-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">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-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="s2">&quot;ARRAY_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="s2">&quot;ARRAY_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_diff</span><span class="p">,</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_diff</span><span class="p">,</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;EPOCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</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;EPOCH_MS&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">UnixToTime</span><span class="p">(</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">(</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</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-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1000</span><span class="p">),</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="p">)</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="p">),</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="s2">&quot;LIST_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="s2">&quot;LIST_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</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;LIST_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="s2">&quot;REGEXP_MATCHES&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-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="s2">&quot;STRFTIME&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;duckdb&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;STRING_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;STRING_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="s2">&quot;STRING_TO_ARRAY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="s2">&quot;STRPTIME&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;duckdb&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;STRUCT_PACK&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</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><span id="L-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="p">}</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</span><span class="p">,</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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="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-151"><a href="#L-151"><span class="linenos">151</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-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">else</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_VALUE&quot;</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-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</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-157"><a href="#L-157"><span class="linenos">157</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-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</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</span><span class="p">,</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;DATE_DIFF&quot;</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;unit&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;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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="p">),</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</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-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="n">no_properties_sql</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">RegexpExtract</span><span class="p">:</span> <span class="n">_regexp_extract_sql</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">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-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</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-184"><a href="#L-184"><span class="linenos">184</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-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-187"><a href="#L-187"><span class="linenos">187</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-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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;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-193"><a href="#L-193"><span class="linenos">193</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-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&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">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add</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">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;duckdb&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">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_TIMESTAMP&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">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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="p">}</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">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">exp</span><span 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-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">exp</span><span 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-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">exp</span><span 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-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">exp</span><span 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-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">exp</span><span 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-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">exp</span><span 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-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">exp</span><span 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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">exp</span><span 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-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="p">}</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="n">STAR_MAPPING</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="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><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <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-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="p">}</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">JOIN_HINTS</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="n">TABLE_HINTS</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="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</span></a>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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="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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">else</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_VALUE&quot;</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-167"><a href="#L-167"><span class="linenos">167</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-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</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-170"><a href="#L-170"><span class="linenos">170</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-171"><a href="#L-171"><span class="linenos">171</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-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</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-176"><a href="#L-176"><span class="linenos">176</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-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="p">:</span> <span class="n">_datatype_sql</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">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</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">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-180"><a href="#L-180"><span class="linenos">180</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="s1">&#39;day&#39;</span><span class="p">)</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-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 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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="n">no_properties_sql</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">RegexpExtract</span><span class="p">:</span> <span class="n">_regexp_extract_sql</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">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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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;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-210"><a href="#L-210"><span class="linenos">210</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-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&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">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_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">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;duckdb&quot;</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">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_TIMESTAMP&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">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-217"><a href="#L-217"><span class="linenos">217</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-218"><a href="#L-218"><span class="linenos">218</span></a> <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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</span></a> <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="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</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="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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 class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">exp</span><span 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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">exp</span><span 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-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">exp</span><span 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-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">exp</span><span 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-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">exp</span><span 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-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">exp</span><span 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-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">exp</span><span 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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">exp</span><span 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-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="p">}</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">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-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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="p">}</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</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">TableSample</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; AS &quot;</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <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="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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">)</span>
</span></pre></div>
@@ -323,155 +337,158 @@
</div>
<a class="headerlink" href="#DuckDB"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB-81"><a href="#DuckDB-81"><span class="linenos"> 81</span></a><span class="k">class</span> <span class="nc">DuckDB</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="DuckDB-82"><a href="#DuckDB-82"><span class="linenos"> 82</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="DuckDB-83"><a href="#DuckDB-83"><span class="linenos"> 83</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-84"><a href="#DuckDB-84"><span class="linenos"> 84</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="DuckDB-85"><a href="#DuckDB-85"><span class="linenos"> 85</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="DuckDB-86"><a href="#DuckDB-86"><span class="linenos"> 86</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="DuckDB-87"><a href="#DuckDB-87"><span class="linenos"> 87</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="DuckDB-88"><a href="#DuckDB-88"><span class="linenos"> 88</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">VARBINARY</span><span class="p">,</span>
-</span><span id="DuckDB-89"><a href="#DuckDB-89"><span class="linenos"> 89</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">TEXT</span><span class="p">,</span>
-</span><span id="DuckDB-90"><a href="#DuckDB-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;BITSTRING&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="DuckDB-91"><a href="#DuckDB-91"><span class="linenos"> 91</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">TEXT</span><span class="p">,</span>
-</span><span id="DuckDB-92"><a href="#DuckDB-92"><span class="linenos"> 92</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">TEXT</span><span class="p">,</span>
-</span><span id="DuckDB-93"><a href="#DuckDB-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;EXCLUDE&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="DuckDB-94"><a href="#DuckDB-94"><span class="linenos"> 94</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="DuckDB-95"><a href="#DuckDB-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;LOGICAL&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="DuckDB-96"><a href="#DuckDB-96"><span class="linenos"> 96</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">DOUBLE</span><span class="p">,</span>
-</span><span id="DuckDB-97"><a href="#DuckDB-97"><span class="linenos"> 97</span></a> <span class="s2">&quot;SIGNED&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="DuckDB-98"><a href="#DuckDB-98"><span class="linenos"> 98</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">VARCHAR</span><span class="p">,</span>
-</span><span id="DuckDB-99"><a href="#DuckDB-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;UBIGINT&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="DuckDB-100"><a href="#DuckDB-100"><span class="linenos">100</span></a> <span class="s2">&quot;UINTEGER&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="DuckDB-101"><a href="#DuckDB-101"><span class="linenos">101</span></a> <span class="s2">&quot;USMALLINT&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="DuckDB-102"><a href="#DuckDB-102"><span class="linenos">102</span></a> <span class="s2">&quot;UTINYINT&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="DuckDB-103"><a href="#DuckDB-103"><span class="linenos">103</span></a> <span class="p">}</span>
-</span><span id="DuckDB-104"><a href="#DuckDB-104"><span class="linenos">104</span></a>
-</span><span id="DuckDB-105"><a href="#DuckDB-105"><span class="linenos">105</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="DuckDB-106"><a href="#DuckDB-106"><span class="linenos">106</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-107"><a href="#DuckDB-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 class="c1"># type: ignore</span>
-</span><span id="DuckDB-108"><a href="#DuckDB-108"><span class="linenos">108</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-109"><a href="#DuckDB-109"><span class="linenos">109</span></a> <span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-110"><a href="#DuckDB-110"><span class="linenos">110</span></a> <span class="s2">&quot;ARRAY_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-111"><a href="#DuckDB-111"><span class="linenos">111</span></a> <span class="s2">&quot;ARRAY_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
-</span><span id="DuckDB-112"><a href="#DuckDB-112"><span class="linenos">112</span></a> <span class="s2">&quot;EPOCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-113"><a href="#DuckDB-113"><span class="linenos">113</span></a> <span class="s2">&quot;EPOCH_MS&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">UnixToTime</span><span class="p">(</span>
-</span><span id="DuckDB-114"><a href="#DuckDB-114"><span class="linenos">114</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><span id="DuckDB-115"><a href="#DuckDB-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">0</span><span class="p">),</span>
-</span><span id="DuckDB-116"><a href="#DuckDB-116"><span class="linenos">116</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1000</span><span class="p">),</span>
-</span><span id="DuckDB-117"><a href="#DuckDB-117"><span class="linenos">117</span></a> <span class="p">)</span>
-</span><span id="DuckDB-118"><a href="#DuckDB-118"><span class="linenos">118</span></a> <span class="p">),</span>
-</span><span id="DuckDB-119"><a href="#DuckDB-119"><span class="linenos">119</span></a> <span class="s2">&quot;LIST_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-120"><a href="#DuckDB-120"><span class="linenos">120</span></a> <span class="s2">&quot;LIST_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
-</span><span id="DuckDB-121"><a href="#DuckDB-121"><span class="linenos">121</span></a> <span class="s2">&quot;LIST_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-122"><a href="#DuckDB-122"><span class="linenos">122</span></a> <span class="s2">&quot;REGEXP_MATCHES&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="DuckDB-123"><a href="#DuckDB-123"><span class="linenos">123</span></a> <span class="s2">&quot;STRFTIME&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;duckdb&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-124"><a href="#DuckDB-124"><span class="linenos">124</span></a> <span class="s2">&quot;STRPTIME&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-125"><a href="#DuckDB-125"><span class="linenos">125</span></a> <span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-126"><a href="#DuckDB-126"><span class="linenos">126</span></a> <span class="s2">&quot;STRING_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-127"><a href="#DuckDB-127"><span class="linenos">127</span></a> <span class="s2">&quot;STRING_TO_ARRAY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-128"><a href="#DuckDB-128"><span class="linenos">128</span></a> <span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-129"><a href="#DuckDB-129"><span class="linenos">129</span></a> <span class="s2">&quot;STRING_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-130"><a href="#DuckDB-130"><span class="linenos">130</span></a> <span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB-131"><a href="#DuckDB-131"><span class="linenos">131</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</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><span id="DuckDB-132"><a href="#DuckDB-132"><span class="linenos">132</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="DuckDB-133"><a href="#DuckDB-133"><span class="linenos">133</span></a> <span class="p">}</span>
-</span><span id="DuckDB-134"><a href="#DuckDB-134"><span class="linenos">134</span></a>
-</span><span id="DuckDB-135"><a href="#DuckDB-135"><span class="linenos">135</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-136"><a href="#DuckDB-136"><span class="linenos">136</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="DuckDB-137"><a href="#DuckDB-137"><span class="linenos">137</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="DuckDB-138"><a href="#DuckDB-138"><span class="linenos">138</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="DuckDB-139"><a href="#DuckDB-139"><span class="linenos">139</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="DuckDB-140"><a href="#DuckDB-140"><span class="linenos">140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="DuckDB-141"><a href="#DuckDB-141"><span class="linenos">141</span></a> <span class="p">}</span>
-</span><span id="DuckDB-142"><a href="#DuckDB-142"><span class="linenos">142</span></a>
-</span><span id="DuckDB-143"><a href="#DuckDB-143"><span class="linenos">143</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="DuckDB-144"><a href="#DuckDB-144"><span class="linenos">144</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB-145"><a href="#DuckDB-145"><span class="linenos">145</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB-146"><a href="#DuckDB-146"><span class="linenos">146</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB-92"><a href="#DuckDB-92"><span class="linenos"> 92</span></a><span class="k">class</span> <span class="nc">DuckDB</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="DuckDB-93"><a href="#DuckDB-93"><span class="linenos"> 93</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="DuckDB-94"><a href="#DuckDB-94"><span class="linenos"> 94</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-95"><a href="#DuckDB-95"><span class="linenos"> 95</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="DuckDB-96"><a href="#DuckDB-96"><span class="linenos"> 96</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="DuckDB-97"><a href="#DuckDB-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">EQ</span><span class="p">,</span>
+</span><span id="DuckDB-98"><a href="#DuckDB-98"><span class="linenos"> 98</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="DuckDB-99"><a href="#DuckDB-99"><span class="linenos"> 99</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">VARBINARY</span><span class="p">,</span>
+</span><span id="DuckDB-100"><a href="#DuckDB-100"><span class="linenos">100</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">TEXT</span><span class="p">,</span>
+</span><span id="DuckDB-101"><a href="#DuckDB-101"><span class="linenos">101</span></a> <span class="s2">&quot;BITSTRING&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="DuckDB-102"><a href="#DuckDB-102"><span class="linenos">102</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">TEXT</span><span class="p">,</span>
+</span><span id="DuckDB-103"><a href="#DuckDB-103"><span class="linenos">103</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">TEXT</span><span class="p">,</span>
+</span><span id="DuckDB-104"><a href="#DuckDB-104"><span class="linenos">104</span></a> <span class="s2">&quot;EXCLUDE&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="DuckDB-105"><a href="#DuckDB-105"><span class="linenos">105</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="DuckDB-106"><a href="#DuckDB-106"><span class="linenos">106</span></a> <span class="s2">&quot;LOGICAL&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="DuckDB-107"><a href="#DuckDB-107"><span class="linenos">107</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">DOUBLE</span><span class="p">,</span>
+</span><span id="DuckDB-108"><a href="#DuckDB-108"><span class="linenos">108</span></a> <span class="s2">&quot;SIGNED&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="DuckDB-109"><a href="#DuckDB-109"><span class="linenos">109</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">VARCHAR</span><span class="p">,</span>
+</span><span id="DuckDB-110"><a href="#DuckDB-110"><span class="linenos">110</span></a> <span class="s2">&quot;UBIGINT&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="DuckDB-111"><a href="#DuckDB-111"><span class="linenos">111</span></a> <span class="s2">&quot;UINTEGER&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="DuckDB-112"><a href="#DuckDB-112"><span class="linenos">112</span></a> <span class="s2">&quot;USMALLINT&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="DuckDB-113"><a href="#DuckDB-113"><span class="linenos">113</span></a> <span class="s2">&quot;UTINYINT&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="DuckDB-114"><a href="#DuckDB-114"><span class="linenos">114</span></a> <span class="p">}</span>
+</span><span id="DuckDB-115"><a href="#DuckDB-115"><span class="linenos">115</span></a>
+</span><span id="DuckDB-116"><a href="#DuckDB-116"><span class="linenos">116</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="DuckDB-117"><a href="#DuckDB-117"><span class="linenos">117</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-118"><a href="#DuckDB-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="DuckDB-119"><a href="#DuckDB-119"><span class="linenos">119</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-120"><a href="#DuckDB-120"><span class="linenos">120</span></a> <span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-121"><a href="#DuckDB-121"><span class="linenos">121</span></a> <span class="s2">&quot;ARRAY_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-122"><a href="#DuckDB-122"><span class="linenos">122</span></a> <span class="s2">&quot;ARRAY_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
+</span><span id="DuckDB-123"><a href="#DuckDB-123"><span class="linenos">123</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_diff</span><span class="p">,</span>
+</span><span id="DuckDB-124"><a href="#DuckDB-124"><span class="linenos">124</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_diff</span><span class="p">,</span>
+</span><span id="DuckDB-125"><a href="#DuckDB-125"><span class="linenos">125</span></a> <span class="s2">&quot;EPOCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-126"><a href="#DuckDB-126"><span class="linenos">126</span></a> <span class="s2">&quot;EPOCH_MS&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">UnixToTime</span><span class="p">(</span>
+</span><span id="DuckDB-127"><a href="#DuckDB-127"><span class="linenos">127</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><span id="DuckDB-128"><a href="#DuckDB-128"><span class="linenos">128</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="DuckDB-129"><a href="#DuckDB-129"><span class="linenos">129</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1000</span><span class="p">),</span>
+</span><span id="DuckDB-130"><a href="#DuckDB-130"><span class="linenos">130</span></a> <span class="p">)</span>
+</span><span id="DuckDB-131"><a href="#DuckDB-131"><span class="linenos">131</span></a> <span class="p">),</span>
+</span><span id="DuckDB-132"><a href="#DuckDB-132"><span class="linenos">132</span></a> <span class="s2">&quot;LIST_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
+</span><span id="DuckDB-133"><a href="#DuckDB-133"><span class="linenos">133</span></a> <span class="s2">&quot;LIST_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-134"><a href="#DuckDB-134"><span class="linenos">134</span></a> <span class="s2">&quot;LIST_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-135"><a href="#DuckDB-135"><span class="linenos">135</span></a> <span class="s2">&quot;REGEXP_MATCHES&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="DuckDB-136"><a href="#DuckDB-136"><span class="linenos">136</span></a> <span class="s2">&quot;STRFTIME&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;duckdb&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-137"><a href="#DuckDB-137"><span class="linenos">137</span></a> <span class="s2">&quot;STRING_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-138"><a href="#DuckDB-138"><span class="linenos">138</span></a> <span class="s2">&quot;STRING_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-139"><a href="#DuckDB-139"><span class="linenos">139</span></a> <span class="s2">&quot;STRING_TO_ARRAY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-140"><a href="#DuckDB-140"><span class="linenos">140</span></a> <span class="s2">&quot;STRPTIME&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-141"><a href="#DuckDB-141"><span class="linenos">141</span></a> <span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-142"><a href="#DuckDB-142"><span class="linenos">142</span></a> <span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-143"><a href="#DuckDB-143"><span class="linenos">143</span></a> <span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB-144"><a href="#DuckDB-144"><span class="linenos">144</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</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><span id="DuckDB-145"><a href="#DuckDB-145"><span class="linenos">145</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="DuckDB-146"><a href="#DuckDB-146"><span class="linenos">146</span></a> <span class="p">}</span>
</span><span id="DuckDB-147"><a href="#DuckDB-147"><span class="linenos">147</span></a>
-</span><span id="DuckDB-148"><a href="#DuckDB-148"><span class="linenos">148</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-149"><a href="#DuckDB-149"><span class="linenos">149</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="DuckDB-150"><a href="#DuckDB-150"><span class="linenos">150</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-151"><a href="#DuckDB-151"><span class="linenos">151</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="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-152"><a href="#DuckDB-152"><span class="linenos">152</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="DuckDB-153"><a href="#DuckDB-153"><span class="linenos">153</span></a> <span class="k">else</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_VALUE&quot;</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-154"><a href="#DuckDB-154"><span class="linenos">154</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-155"><a href="#DuckDB-155"><span class="linenos">155</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-156"><a href="#DuckDB-156"><span class="linenos">156</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-157"><a href="#DuckDB-157"><span class="linenos">157</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-158"><a href="#DuckDB-158"><span class="linenos">158</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-159"><a href="#DuckDB-159"><span class="linenos">159</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-160"><a href="#DuckDB-160"><span class="linenos">160</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-161"><a href="#DuckDB-161"><span class="linenos">161</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-162"><a href="#DuckDB-162"><span class="linenos">162</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</span><span class="p">,</span>
-</span><span id="DuckDB-163"><a href="#DuckDB-163"><span class="linenos">163</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-164"><a href="#DuckDB-164"><span class="linenos">164</span></a> <span class="s2">&quot;DATE_DIFF&quot;</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;unit&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;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="DuckDB-165"><a href="#DuckDB-165"><span class="linenos">165</span></a> <span class="p">),</span>
-</span><span id="DuckDB-166"><a href="#DuckDB-166"><span class="linenos">166</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-167"><a href="#DuckDB-167"><span class="linenos">167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-168"><a href="#DuckDB-168"><span class="linenos">168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-169"><a href="#DuckDB-169"><span class="linenos">169</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-170"><a href="#DuckDB-170"><span class="linenos">170</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-171"><a href="#DuckDB-171"><span class="linenos">171</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="DuckDB-172"><a href="#DuckDB-172"><span class="linenos">172</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB-173"><a href="#DuckDB-173"><span class="linenos">173</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="DuckDB-174"><a href="#DuckDB-174"><span class="linenos">174</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-175"><a href="#DuckDB-175"><span class="linenos">175</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-176"><a href="#DuckDB-176"><span class="linenos">176</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="DuckDB-177"><a href="#DuckDB-177"><span class="linenos">177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="n">no_properties_sql</span><span class="p">,</span>
-</span><span id="DuckDB-178"><a href="#DuckDB-178"><span class="linenos">178</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-179"><a href="#DuckDB-179"><span class="linenos">179</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-180"><a href="#DuckDB-180"><span class="linenos">180</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-181"><a href="#DuckDB-181"><span class="linenos">181</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-182"><a href="#DuckDB-182"><span class="linenos">182</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-183"><a href="#DuckDB-183"><span class="linenos">183</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-184"><a href="#DuckDB-184"><span class="linenos">184</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-185"><a href="#DuckDB-185"><span class="linenos">185</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-186"><a href="#DuckDB-186"><span class="linenos">186</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-187"><a href="#DuckDB-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-188"><a href="#DuckDB-188"><span class="linenos">188</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-189"><a href="#DuckDB-189"><span class="linenos">189</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-190"><a href="#DuckDB-190"><span class="linenos">190</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-191"><a href="#DuckDB-191"><span class="linenos">191</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-192"><a href="#DuckDB-192"><span class="linenos">192</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-193"><a href="#DuckDB-193"><span class="linenos">193</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;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-194"><a href="#DuckDB-194"><span class="linenos">194</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-195"><a href="#DuckDB-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB-196"><a href="#DuckDB-196"><span class="linenos">196</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</span><span class="p">,</span>
-</span><span id="DuckDB-197"><a href="#DuckDB-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-198"><a href="#DuckDB-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-199"><a href="#DuckDB-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB-200"><a href="#DuckDB-200"><span class="linenos">200</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-201"><a href="#DuckDB-201"><span class="linenos">201</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-202"><a href="#DuckDB-202"><span class="linenos">202</span></a> <span class="p">}</span>
-</span><span id="DuckDB-203"><a href="#DuckDB-203"><span class="linenos">203</span></a>
-</span><span id="DuckDB-204"><a href="#DuckDB-204"><span class="linenos">204</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-205"><a href="#DuckDB-205"><span class="linenos">205</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="DuckDB-206"><a href="#DuckDB-206"><span class="linenos">206</span></a> <span class="n">exp</span><span 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-207"><a href="#DuckDB-207"><span class="linenos">207</span></a> <span class="n">exp</span><span 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-208"><a href="#DuckDB-208"><span class="linenos">208</span></a> <span class="n">exp</span><span 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-209"><a href="#DuckDB-209"><span class="linenos">209</span></a> <span class="n">exp</span><span 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-210"><a href="#DuckDB-210"><span class="linenos">210</span></a> <span class="n">exp</span><span 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-211"><a href="#DuckDB-211"><span class="linenos">211</span></a> <span class="n">exp</span><span 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-212"><a href="#DuckDB-212"><span class="linenos">212</span></a> <span class="n">exp</span><span 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-213"><a href="#DuckDB-213"><span class="linenos">213</span></a> <span class="n">exp</span><span 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-214"><a href="#DuckDB-214"><span class="linenos">214</span></a> <span class="p">}</span>
-</span><span id="DuckDB-215"><a href="#DuckDB-215"><span class="linenos">215</span></a>
-</span><span id="DuckDB-216"><a href="#DuckDB-216"><span class="linenos">216</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-217"><a href="#DuckDB-217"><span class="linenos">217</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">STAR_MAPPING</span><span class="p">,</span>
-</span><span id="DuckDB-218"><a href="#DuckDB-218"><span class="linenos">218</span></a> <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-148"><a href="#DuckDB-148"><span class="linenos">148</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-149"><a href="#DuckDB-149"><span class="linenos">149</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="DuckDB-150"><a href="#DuckDB-150"><span class="linenos">150</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="DuckDB-151"><a href="#DuckDB-151"><span class="linenos">151</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="DuckDB-152"><a href="#DuckDB-152"><span class="linenos">152</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="DuckDB-153"><a href="#DuckDB-153"><span class="linenos">153</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="DuckDB-154"><a href="#DuckDB-154"><span class="linenos">154</span></a> <span class="p">}</span>
+</span><span id="DuckDB-155"><a href="#DuckDB-155"><span class="linenos">155</span></a>
+</span><span id="DuckDB-156"><a href="#DuckDB-156"><span class="linenos">156</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="DuckDB-157"><a href="#DuckDB-157"><span class="linenos">157</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-158"><a href="#DuckDB-158"><span class="linenos">158</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB-159"><a href="#DuckDB-159"><span class="linenos">159</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="DuckDB-160"><a href="#DuckDB-160"><span class="linenos">160</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="DuckDB-161"><a href="#DuckDB-161"><span class="linenos">161</span></a>
+</span><span id="DuckDB-162"><a href="#DuckDB-162"><span class="linenos">162</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-163"><a href="#DuckDB-163"><span class="linenos">163</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-164"><a href="#DuckDB-164"><span class="linenos">164</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-165"><a href="#DuckDB-165"><span class="linenos">165</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="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-166"><a href="#DuckDB-166"><span class="linenos">166</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="DuckDB-167"><a href="#DuckDB-167"><span class="linenos">167</span></a> <span class="k">else</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_VALUE&quot;</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-168"><a href="#DuckDB-168"><span class="linenos">168</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-169"><a href="#DuckDB-169"><span class="linenos">169</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-170"><a href="#DuckDB-170"><span class="linenos">170</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-171"><a href="#DuckDB-171"><span class="linenos">171</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-172"><a href="#DuckDB-172"><span class="linenos">172</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-173"><a href="#DuckDB-173"><span class="linenos">173</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-174"><a href="#DuckDB-174"><span class="linenos">174</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-175"><a href="#DuckDB-175"><span class="linenos">175</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-176"><a href="#DuckDB-176"><span class="linenos">176</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-177"><a href="#DuckDB-177"><span class="linenos">177</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-178"><a href="#DuckDB-178"><span class="linenos">178</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-179"><a href="#DuckDB-179"><span class="linenos">179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
+</span><span id="DuckDB-180"><a href="#DuckDB-180"><span class="linenos">180</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-181"><a href="#DuckDB-181"><span class="linenos">181</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="s1">&#39;day&#39;</span><span class="p">)</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-182"><a href="#DuckDB-182"><span class="linenos">182</span></a> <span class="p">),</span>
+</span><span id="DuckDB-183"><a href="#DuckDB-183"><span class="linenos">183</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-184"><a href="#DuckDB-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-185"><a href="#DuckDB-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-186"><a href="#DuckDB-186"><span class="linenos">186</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-187"><a href="#DuckDB-187"><span class="linenos">187</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-188"><a href="#DuckDB-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="DuckDB-189"><a href="#DuckDB-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB-190"><a href="#DuckDB-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="DuckDB-191"><a href="#DuckDB-191"><span class="linenos">191</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-192"><a href="#DuckDB-192"><span class="linenos">192</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-193"><a href="#DuckDB-193"><span class="linenos">193</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="DuckDB-194"><a href="#DuckDB-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="n">no_properties_sql</span><span class="p">,</span>
+</span><span id="DuckDB-195"><a href="#DuckDB-195"><span class="linenos">195</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-196"><a href="#DuckDB-196"><span class="linenos">196</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-197"><a href="#DuckDB-197"><span class="linenos">197</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-198"><a href="#DuckDB-198"><span class="linenos">198</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-199"><a href="#DuckDB-199"><span class="linenos">199</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-200"><a href="#DuckDB-200"><span class="linenos">200</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-201"><a href="#DuckDB-201"><span class="linenos">201</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-202"><a href="#DuckDB-202"><span class="linenos">202</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-203"><a href="#DuckDB-203"><span class="linenos">203</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-204"><a href="#DuckDB-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-205"><a href="#DuckDB-205"><span class="linenos">205</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-206"><a href="#DuckDB-206"><span class="linenos">206</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-207"><a href="#DuckDB-207"><span class="linenos">207</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-208"><a href="#DuckDB-208"><span class="linenos">208</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-209"><a href="#DuckDB-209"><span class="linenos">209</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-210"><a href="#DuckDB-210"><span class="linenos">210</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;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-211"><a href="#DuckDB-211"><span class="linenos">211</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-212"><a href="#DuckDB-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB-213"><a href="#DuckDB-213"><span class="linenos">213</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-214"><a href="#DuckDB-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-215"><a href="#DuckDB-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-216"><a href="#DuckDB-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB-217"><a href="#DuckDB-217"><span class="linenos">217</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-218"><a href="#DuckDB-218"><span class="linenos">218</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-219"><a href="#DuckDB-219"><span class="linenos">219</span></a> <span class="p">}</span>
</span><span id="DuckDB-220"><a href="#DuckDB-220"><span class="linenos">220</span></a>
-</span><span id="DuckDB-221"><a href="#DuckDB-221"><span class="linenos">221</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB-222"><a href="#DuckDB-222"><span class="linenos">222</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="DuckDB-223"><a href="#DuckDB-223"><span class="linenos">223</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="DuckDB-224"><a href="#DuckDB-224"><span class="linenos">224</span></a> <span class="p">}</span>
-</span><span id="DuckDB-225"><a href="#DuckDB-225"><span class="linenos">225</span></a>
-</span><span id="DuckDB-226"><a href="#DuckDB-226"><span class="linenos">226</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="DuckDB-227"><a href="#DuckDB-227"><span class="linenos">227</span></a>
-</span><span id="DuckDB-228"><a href="#DuckDB-228"><span class="linenos">228</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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 class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-229"><a href="#DuckDB-229"><span class="linenos">229</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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-221"><a href="#DuckDB-221"><span class="linenos">221</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-222"><a href="#DuckDB-222"><span class="linenos">222</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-223"><a href="#DuckDB-223"><span class="linenos">223</span></a> <span class="n">exp</span><span 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-224"><a href="#DuckDB-224"><span class="linenos">224</span></a> <span class="n">exp</span><span 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-225"><a href="#DuckDB-225"><span class="linenos">225</span></a> <span class="n">exp</span><span 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-226"><a href="#DuckDB-226"><span class="linenos">226</span></a> <span class="n">exp</span><span 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-227"><a href="#DuckDB-227"><span class="linenos">227</span></a> <span class="n">exp</span><span 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-228"><a href="#DuckDB-228"><span class="linenos">228</span></a> <span class="n">exp</span><span 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-229"><a href="#DuckDB-229"><span class="linenos">229</span></a> <span class="n">exp</span><span 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-230"><a href="#DuckDB-230"><span class="linenos">230</span></a> <span class="n">exp</span><span 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-231"><a href="#DuckDB-231"><span class="linenos">231</span></a> <span class="p">}</span>
+</span><span id="DuckDB-232"><a href="#DuckDB-232"><span class="linenos">232</span></a>
+</span><span id="DuckDB-233"><a href="#DuckDB-233"><span class="linenos">233</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-234"><a href="#DuckDB-234"><span class="linenos">234</span></a>
+</span><span id="DuckDB-235"><a href="#DuckDB-235"><span class="linenos">235</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB-236"><a href="#DuckDB-236"><span class="linenos">236</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="DuckDB-237"><a href="#DuckDB-237"><span class="linenos">237</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="DuckDB-238"><a href="#DuckDB-238"><span class="linenos">238</span></a> <span class="p">}</span>
+</span><span id="DuckDB-239"><a href="#DuckDB-239"><span class="linenos">239</span></a>
+</span><span id="DuckDB-240"><a href="#DuckDB-240"><span class="linenos">240</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB-241"><a href="#DuckDB-241"><span class="linenos">241</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">TableSample</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; AS &quot;</span>
+</span><span id="DuckDB-242"><a href="#DuckDB-242"><span class="linenos">242</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-243"><a href="#DuckDB-243"><span class="linenos">243</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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">)</span>
</span></pre></div>
@@ -506,28 +523,28 @@
</div>
<a class="headerlink" href="#DuckDB.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Tokenizer-82"><a href="#DuckDB.Tokenizer-82"><span class="linenos"> 82</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="DuckDB.Tokenizer-83"><a href="#DuckDB.Tokenizer-83"><span class="linenos"> 83</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Tokenizer-84"><a href="#DuckDB.Tokenizer-84"><span class="linenos"> 84</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="DuckDB.Tokenizer-85"><a href="#DuckDB.Tokenizer-85"><span class="linenos"> 85</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="DuckDB.Tokenizer-86"><a href="#DuckDB.Tokenizer-86"><span class="linenos"> 86</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="DuckDB.Tokenizer-87"><a href="#DuckDB.Tokenizer-87"><span class="linenos"> 87</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="DuckDB.Tokenizer-88"><a href="#DuckDB.Tokenizer-88"><span class="linenos"> 88</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">VARBINARY</span><span class="p">,</span>
-</span><span id="DuckDB.Tokenizer-89"><a href="#DuckDB.Tokenizer-89"><span class="linenos"> 89</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">TEXT</span><span class="p">,</span>
-</span><span id="DuckDB.Tokenizer-90"><a href="#DuckDB.Tokenizer-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;BITSTRING&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="DuckDB.Tokenizer-91"><a href="#DuckDB.Tokenizer-91"><span class="linenos"> 91</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">TEXT</span><span class="p">,</span>
-</span><span id="DuckDB.Tokenizer-92"><a href="#DuckDB.Tokenizer-92"><span class="linenos"> 92</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">TEXT</span><span class="p">,</span>
-</span><span id="DuckDB.Tokenizer-93"><a href="#DuckDB.Tokenizer-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;EXCLUDE&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="DuckDB.Tokenizer-94"><a href="#DuckDB.Tokenizer-94"><span class="linenos"> 94</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="DuckDB.Tokenizer-95"><a href="#DuckDB.Tokenizer-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;LOGICAL&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="DuckDB.Tokenizer-96"><a href="#DuckDB.Tokenizer-96"><span class="linenos"> 96</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">DOUBLE</span><span class="p">,</span>
-</span><span id="DuckDB.Tokenizer-97"><a href="#DuckDB.Tokenizer-97"><span class="linenos"> 97</span></a> <span class="s2">&quot;SIGNED&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="DuckDB.Tokenizer-98"><a href="#DuckDB.Tokenizer-98"><span class="linenos"> 98</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">VARCHAR</span><span class="p">,</span>
-</span><span id="DuckDB.Tokenizer-99"><a href="#DuckDB.Tokenizer-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;UBIGINT&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="DuckDB.Tokenizer-100"><a href="#DuckDB.Tokenizer-100"><span class="linenos">100</span></a> <span class="s2">&quot;UINTEGER&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="DuckDB.Tokenizer-101"><a href="#DuckDB.Tokenizer-101"><span class="linenos">101</span></a> <span class="s2">&quot;USMALLINT&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="DuckDB.Tokenizer-102"><a href="#DuckDB.Tokenizer-102"><span class="linenos">102</span></a> <span class="s2">&quot;UTINYINT&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="DuckDB.Tokenizer-103"><a href="#DuckDB.Tokenizer-103"><span class="linenos">103</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Tokenizer-93"><a href="#DuckDB.Tokenizer-93"><span class="linenos"> 93</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="DuckDB.Tokenizer-94"><a href="#DuckDB.Tokenizer-94"><span class="linenos"> 94</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Tokenizer-95"><a href="#DuckDB.Tokenizer-95"><span class="linenos"> 95</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="DuckDB.Tokenizer-96"><a href="#DuckDB.Tokenizer-96"><span class="linenos"> 96</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="DuckDB.Tokenizer-97"><a href="#DuckDB.Tokenizer-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">EQ</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-98"><a href="#DuckDB.Tokenizer-98"><span class="linenos"> 98</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="DuckDB.Tokenizer-99"><a href="#DuckDB.Tokenizer-99"><span class="linenos"> 99</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">VARBINARY</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-100"><a href="#DuckDB.Tokenizer-100"><span class="linenos">100</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">TEXT</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-101"><a href="#DuckDB.Tokenizer-101"><span class="linenos">101</span></a> <span class="s2">&quot;BITSTRING&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="DuckDB.Tokenizer-102"><a href="#DuckDB.Tokenizer-102"><span class="linenos">102</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">TEXT</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-103"><a href="#DuckDB.Tokenizer-103"><span class="linenos">103</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">TEXT</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-104"><a href="#DuckDB.Tokenizer-104"><span class="linenos">104</span></a> <span class="s2">&quot;EXCLUDE&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="DuckDB.Tokenizer-105"><a href="#DuckDB.Tokenizer-105"><span class="linenos">105</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="DuckDB.Tokenizer-106"><a href="#DuckDB.Tokenizer-106"><span class="linenos">106</span></a> <span class="s2">&quot;LOGICAL&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="DuckDB.Tokenizer-107"><a href="#DuckDB.Tokenizer-107"><span class="linenos">107</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">DOUBLE</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-108"><a href="#DuckDB.Tokenizer-108"><span class="linenos">108</span></a> <span class="s2">&quot;SIGNED&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="DuckDB.Tokenizer-109"><a href="#DuckDB.Tokenizer-109"><span class="linenos">109</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">VARCHAR</span><span class="p">,</span>
+</span><span id="DuckDB.Tokenizer-110"><a href="#DuckDB.Tokenizer-110"><span class="linenos">110</span></a> <span class="s2">&quot;UBIGINT&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="DuckDB.Tokenizer-111"><a href="#DuckDB.Tokenizer-111"><span class="linenos">111</span></a> <span class="s2">&quot;UINTEGER&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="DuckDB.Tokenizer-112"><a href="#DuckDB.Tokenizer-112"><span class="linenos">112</span></a> <span class="s2">&quot;USMALLINT&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="DuckDB.Tokenizer-113"><a href="#DuckDB.Tokenizer-113"><span class="linenos">113</span></a> <span class="s2">&quot;UTINYINT&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="DuckDB.Tokenizer-114"><a href="#DuckDB.Tokenizer-114"><span class="linenos">114</span></a> <span class="p">}</span>
</span></pre></div>
@@ -555,43 +572,45 @@
</div>
<a class="headerlink" href="#DuckDB.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Parser-105"><a href="#DuckDB.Parser-105"><span class="linenos">105</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="DuckDB.Parser-106"><a href="#DuckDB.Parser-106"><span class="linenos">106</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Parser-107"><a href="#DuckDB.Parser-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 class="c1"># type: ignore</span>
-</span><span id="DuckDB.Parser-108"><a href="#DuckDB.Parser-108"><span class="linenos">108</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-109"><a href="#DuckDB.Parser-109"><span class="linenos">109</span></a> <span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-110"><a href="#DuckDB.Parser-110"><span class="linenos">110</span></a> <span class="s2">&quot;ARRAY_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-111"><a href="#DuckDB.Parser-111"><span class="linenos">111</span></a> <span class="s2">&quot;ARRAY_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-112"><a href="#DuckDB.Parser-112"><span class="linenos">112</span></a> <span class="s2">&quot;EPOCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-113"><a href="#DuckDB.Parser-113"><span class="linenos">113</span></a> <span class="s2">&quot;EPOCH_MS&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">UnixToTime</span><span class="p">(</span>
-</span><span id="DuckDB.Parser-114"><a href="#DuckDB.Parser-114"><span class="linenos">114</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><span id="DuckDB.Parser-115"><a href="#DuckDB.Parser-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">0</span><span class="p">),</span>
-</span><span id="DuckDB.Parser-116"><a href="#DuckDB.Parser-116"><span class="linenos">116</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1000</span><span class="p">),</span>
-</span><span id="DuckDB.Parser-117"><a href="#DuckDB.Parser-117"><span class="linenos">117</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Parser-118"><a href="#DuckDB.Parser-118"><span class="linenos">118</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Parser-119"><a href="#DuckDB.Parser-119"><span class="linenos">119</span></a> <span class="s2">&quot;LIST_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-120"><a href="#DuckDB.Parser-120"><span class="linenos">120</span></a> <span class="s2">&quot;LIST_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-121"><a href="#DuckDB.Parser-121"><span class="linenos">121</span></a> <span class="s2">&quot;LIST_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-122"><a href="#DuckDB.Parser-122"><span class="linenos">122</span></a> <span class="s2">&quot;REGEXP_MATCHES&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="DuckDB.Parser-123"><a href="#DuckDB.Parser-123"><span class="linenos">123</span></a> <span class="s2">&quot;STRFTIME&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;duckdb&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Parser-124"><a href="#DuckDB.Parser-124"><span class="linenos">124</span></a> <span class="s2">&quot;STRPTIME&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Parser-125"><a href="#DuckDB.Parser-125"><span class="linenos">125</span></a> <span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-126"><a href="#DuckDB.Parser-126"><span class="linenos">126</span></a> <span class="s2">&quot;STRING_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-127"><a href="#DuckDB.Parser-127"><span class="linenos">127</span></a> <span class="s2">&quot;STRING_TO_ARRAY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-128"><a href="#DuckDB.Parser-128"><span class="linenos">128</span></a> <span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-129"><a href="#DuckDB.Parser-129"><span class="linenos">129</span></a> <span class="s2">&quot;STRING_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-130"><a href="#DuckDB.Parser-130"><span class="linenos">130</span></a> <span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-131"><a href="#DuckDB.Parser-131"><span class="linenos">131</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</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><span id="DuckDB.Parser-132"><a href="#DuckDB.Parser-132"><span class="linenos">132</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="DuckDB.Parser-133"><a href="#DuckDB.Parser-133"><span class="linenos">133</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Parser-134"><a href="#DuckDB.Parser-134"><span class="linenos">134</span></a>
-</span><span id="DuckDB.Parser-135"><a href="#DuckDB.Parser-135"><span class="linenos">135</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Parser-136"><a href="#DuckDB.Parser-136"><span class="linenos">136</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-137"><a href="#DuckDB.Parser-137"><span class="linenos">137</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-138"><a href="#DuckDB.Parser-138"><span class="linenos">138</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-139"><a href="#DuckDB.Parser-139"><span class="linenos">139</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-140"><a href="#DuckDB.Parser-140"><span class="linenos">140</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
-</span><span id="DuckDB.Parser-141"><a href="#DuckDB.Parser-141"><span class="linenos">141</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Parser-116"><a href="#DuckDB.Parser-116"><span class="linenos">116</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="DuckDB.Parser-117"><a href="#DuckDB.Parser-117"><span class="linenos">117</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Parser-118"><a href="#DuckDB.Parser-118"><span class="linenos">118</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="DuckDB.Parser-119"><a href="#DuckDB.Parser-119"><span class="linenos">119</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-120"><a href="#DuckDB.Parser-120"><span class="linenos">120</span></a> <span class="s2">&quot;ARRAY_LENGTH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-121"><a href="#DuckDB.Parser-121"><span class="linenos">121</span></a> <span class="s2">&quot;ARRAY_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-122"><a href="#DuckDB.Parser-122"><span class="linenos">122</span></a> <span class="s2">&quot;ARRAY_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-123"><a href="#DuckDB.Parser-123"><span class="linenos">123</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_diff</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-124"><a href="#DuckDB.Parser-124"><span class="linenos">124</span></a> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">:</span> <span class="n">_parse_date_diff</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-125"><a href="#DuckDB.Parser-125"><span class="linenos">125</span></a> <span class="s2">&quot;EPOCH&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-126"><a href="#DuckDB.Parser-126"><span class="linenos">126</span></a> <span class="s2">&quot;EPOCH_MS&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">UnixToTime</span><span class="p">(</span>
+</span><span id="DuckDB.Parser-127"><a href="#DuckDB.Parser-127"><span class="linenos">127</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><span id="DuckDB.Parser-128"><a href="#DuckDB.Parser-128"><span class="linenos">128</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="DuckDB.Parser-129"><a href="#DuckDB.Parser-129"><span class="linenos">129</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1000</span><span class="p">),</span>
+</span><span id="DuckDB.Parser-130"><a href="#DuckDB.Parser-130"><span class="linenos">130</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Parser-131"><a href="#DuckDB.Parser-131"><span class="linenos">131</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Parser-132"><a href="#DuckDB.Parser-132"><span class="linenos">132</span></a> <span class="s2">&quot;LIST_REVERSE_SORT&quot;</span><span class="p">:</span> <span class="n">_sort_array_reverse</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-133"><a href="#DuckDB.Parser-133"><span class="linenos">133</span></a> <span class="s2">&quot;LIST_SORT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SortArray</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-134"><a href="#DuckDB.Parser-134"><span class="linenos">134</span></a> <span class="s2">&quot;LIST_VALUE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-135"><a href="#DuckDB.Parser-135"><span class="linenos">135</span></a> <span class="s2">&quot;REGEXP_MATCHES&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="DuckDB.Parser-136"><a href="#DuckDB.Parser-136"><span class="linenos">136</span></a> <span class="s2">&quot;STRFTIME&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;duckdb&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Parser-137"><a href="#DuckDB.Parser-137"><span class="linenos">137</span></a> <span class="s2">&quot;STRING_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-138"><a href="#DuckDB.Parser-138"><span class="linenos">138</span></a> <span class="s2">&quot;STRING_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-139"><a href="#DuckDB.Parser-139"><span class="linenos">139</span></a> <span class="s2">&quot;STRING_TO_ARRAY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-140"><a href="#DuckDB.Parser-140"><span class="linenos">140</span></a> <span class="s2">&quot;STRPTIME&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Parser-141"><a href="#DuckDB.Parser-141"><span class="linenos">141</span></a> <span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-142"><a href="#DuckDB.Parser-142"><span class="linenos">142</span></a> <span class="s2">&quot;STR_SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-143"><a href="#DuckDB.Parser-143"><span class="linenos">143</span></a> <span class="s2">&quot;STR_SPLIT_REGEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-144"><a href="#DuckDB.Parser-144"><span class="linenos">144</span></a> <span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">:</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><span id="DuckDB.Parser-145"><a href="#DuckDB.Parser-145"><span class="linenos">145</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="DuckDB.Parser-146"><a href="#DuckDB.Parser-146"><span class="linenos">146</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Parser-147"><a href="#DuckDB.Parser-147"><span class="linenos">147</span></a>
+</span><span id="DuckDB.Parser-148"><a href="#DuckDB.Parser-148"><span class="linenos">148</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Parser-149"><a href="#DuckDB.Parser-149"><span class="linenos">149</span></a> <span class="o">*</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-150"><a href="#DuckDB.Parser-150"><span class="linenos">150</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-151"><a href="#DuckDB.Parser-151"><span class="linenos">151</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-152"><a href="#DuckDB.Parser-152"><span class="linenos">152</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-153"><a href="#DuckDB.Parser-153"><span class="linenos">153</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
+</span><span id="DuckDB.Parser-154"><a href="#DuckDB.Parser-154"><span class="linenos">154</span></a> <span class="p">}</span>
</span></pre></div>
@@ -648,93 +667,94 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#DuckDB.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator-143"><a href="#DuckDB.Generator-143"><span class="linenos">143</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="DuckDB.Generator-144"><a href="#DuckDB.Generator-144"><span class="linenos">144</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB.Generator-145"><a href="#DuckDB.Generator-145"><span class="linenos">145</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="DuckDB.Generator-146"><a href="#DuckDB.Generator-146"><span class="linenos">146</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="DuckDB.Generator-147"><a href="#DuckDB.Generator-147"><span class="linenos">147</span></a>
-</span><span id="DuckDB.Generator-148"><a href="#DuckDB.Generator-148"><span class="linenos">148</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-149"><a href="#DuckDB.Generator-149"><span class="linenos">149</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="DuckDB.Generator-150"><a href="#DuckDB.Generator-150"><span class="linenos">150</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-151"><a href="#DuckDB.Generator-151"><span class="linenos">151</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="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-152"><a href="#DuckDB.Generator-152"><span class="linenos">152</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="DuckDB.Generator-153"><a href="#DuckDB.Generator-153"><span class="linenos">153</span></a> <span class="k">else</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_VALUE&quot;</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-154"><a href="#DuckDB.Generator-154"><span class="linenos">154</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-155"><a href="#DuckDB.Generator-155"><span class="linenos">155</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-156"><a href="#DuckDB.Generator-156"><span class="linenos">156</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-157"><a href="#DuckDB.Generator-157"><span class="linenos">157</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-158"><a href="#DuckDB.Generator-158"><span class="linenos">158</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-159"><a href="#DuckDB.Generator-159"><span class="linenos">159</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-160"><a href="#DuckDB.Generator-160"><span class="linenos">160</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-161"><a href="#DuckDB.Generator-161"><span class="linenos">161</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-162"><a href="#DuckDB.Generator-162"><span class="linenos">162</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</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-163"><a href="#DuckDB.Generator-163"><span class="linenos">163</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-164"><a href="#DuckDB.Generator-164"><span class="linenos">164</span></a> <span class="s2">&quot;DATE_DIFF&quot;</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;unit&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;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="DuckDB.Generator-165"><a href="#DuckDB.Generator-165"><span class="linenos">165</span></a> <span class="p">),</span>
-</span><span id="DuckDB.Generator-166"><a href="#DuckDB.Generator-166"><span class="linenos">166</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-167"><a href="#DuckDB.Generator-167"><span class="linenos">167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-168"><a href="#DuckDB.Generator-168"><span class="linenos">168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-169"><a href="#DuckDB.Generator-169"><span class="linenos">169</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-170"><a href="#DuckDB.Generator-170"><span class="linenos">170</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-171"><a href="#DuckDB.Generator-171"><span class="linenos">171</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-172"><a href="#DuckDB.Generator-172"><span class="linenos">172</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-173"><a href="#DuckDB.Generator-173"><span class="linenos">173</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-174"><a href="#DuckDB.Generator-174"><span class="linenos">174</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-175"><a href="#DuckDB.Generator-175"><span class="linenos">175</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-176"><a href="#DuckDB.Generator-176"><span class="linenos">176</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="DuckDB.Generator-177"><a href="#DuckDB.Generator-177"><span class="linenos">177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="n">no_properties_sql</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-178"><a href="#DuckDB.Generator-178"><span class="linenos">178</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-179"><a href="#DuckDB.Generator-179"><span class="linenos">179</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-180"><a href="#DuckDB.Generator-180"><span class="linenos">180</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-181"><a href="#DuckDB.Generator-181"><span class="linenos">181</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-182"><a href="#DuckDB.Generator-182"><span class="linenos">182</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-183"><a href="#DuckDB.Generator-183"><span class="linenos">183</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-184"><a href="#DuckDB.Generator-184"><span class="linenos">184</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-185"><a href="#DuckDB.Generator-185"><span class="linenos">185</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-186"><a href="#DuckDB.Generator-186"><span class="linenos">186</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-187"><a href="#DuckDB.Generator-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-188"><a href="#DuckDB.Generator-188"><span class="linenos">188</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-189"><a href="#DuckDB.Generator-189"><span class="linenos">189</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-190"><a href="#DuckDB.Generator-190"><span class="linenos">190</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-191"><a href="#DuckDB.Generator-191"><span class="linenos">191</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-192"><a href="#DuckDB.Generator-192"><span class="linenos">192</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-193"><a href="#DuckDB.Generator-193"><span class="linenos">193</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;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-194"><a href="#DuckDB.Generator-194"><span class="linenos">194</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-195"><a href="#DuckDB.Generator-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-196"><a href="#DuckDB.Generator-196"><span class="linenos">196</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</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-197"><a href="#DuckDB.Generator-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-198"><a href="#DuckDB.Generator-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-199"><a href="#DuckDB.Generator-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="DuckDB.Generator-200"><a href="#DuckDB.Generator-200"><span class="linenos">200</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-201"><a href="#DuckDB.Generator-201"><span class="linenos">201</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-202"><a href="#DuckDB.Generator-202"><span class="linenos">202</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-203"><a href="#DuckDB.Generator-203"><span class="linenos">203</span></a>
-</span><span id="DuckDB.Generator-204"><a href="#DuckDB.Generator-204"><span class="linenos">204</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-205"><a href="#DuckDB.Generator-205"><span class="linenos">205</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="DuckDB.Generator-206"><a href="#DuckDB.Generator-206"><span class="linenos">206</span></a> <span class="n">exp</span><span 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-207"><a href="#DuckDB.Generator-207"><span class="linenos">207</span></a> <span class="n">exp</span><span 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-208"><a href="#DuckDB.Generator-208"><span class="linenos">208</span></a> <span class="n">exp</span><span 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-209"><a href="#DuckDB.Generator-209"><span class="linenos">209</span></a> <span class="n">exp</span><span 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-210"><a href="#DuckDB.Generator-210"><span class="linenos">210</span></a> <span class="n">exp</span><span 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-211"><a href="#DuckDB.Generator-211"><span class="linenos">211</span></a> <span class="n">exp</span><span 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-212"><a href="#DuckDB.Generator-212"><span class="linenos">212</span></a> <span class="n">exp</span><span 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-213"><a href="#DuckDB.Generator-213"><span class="linenos">213</span></a> <span class="n">exp</span><span 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-214"><a href="#DuckDB.Generator-214"><span class="linenos">214</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-215"><a href="#DuckDB.Generator-215"><span class="linenos">215</span></a>
-</span><span id="DuckDB.Generator-216"><a href="#DuckDB.Generator-216"><span class="linenos">216</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-217"><a href="#DuckDB.Generator-217"><span class="linenos">217</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">STAR_MAPPING</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-218"><a href="#DuckDB.Generator-218"><span class="linenos">218</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator-156"><a href="#DuckDB.Generator-156"><span class="linenos">156</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="DuckDB.Generator-157"><a href="#DuckDB.Generator-157"><span class="linenos">157</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-158"><a href="#DuckDB.Generator-158"><span class="linenos">158</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="DuckDB.Generator-159"><a href="#DuckDB.Generator-159"><span class="linenos">159</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="DuckDB.Generator-160"><a href="#DuckDB.Generator-160"><span class="linenos">160</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="DuckDB.Generator-161"><a href="#DuckDB.Generator-161"><span class="linenos">161</span></a>
+</span><span id="DuckDB.Generator-162"><a href="#DuckDB.Generator-162"><span class="linenos">162</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-163"><a href="#DuckDB.Generator-163"><span class="linenos">163</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-164"><a href="#DuckDB.Generator-164"><span class="linenos">164</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-165"><a href="#DuckDB.Generator-165"><span class="linenos">165</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="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-166"><a href="#DuckDB.Generator-166"><span class="linenos">166</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="DuckDB.Generator-167"><a href="#DuckDB.Generator-167"><span class="linenos">167</span></a> <span class="k">else</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LIST_VALUE&quot;</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-168"><a href="#DuckDB.Generator-168"><span class="linenos">168</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-169"><a href="#DuckDB.Generator-169"><span class="linenos">169</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-170"><a href="#DuckDB.Generator-170"><span class="linenos">170</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-171"><a href="#DuckDB.Generator-171"><span class="linenos">171</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-172"><a href="#DuckDB.Generator-172"><span class="linenos">172</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-173"><a href="#DuckDB.Generator-173"><span class="linenos">173</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-174"><a href="#DuckDB.Generator-174"><span class="linenos">174</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-175"><a href="#DuckDB.Generator-175"><span class="linenos">175</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-176"><a href="#DuckDB.Generator-176"><span class="linenos">176</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-177"><a href="#DuckDB.Generator-177"><span class="linenos">177</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-178"><a href="#DuckDB.Generator-178"><span class="linenos">178</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-179"><a href="#DuckDB.Generator-179"><span class="linenos">179</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-180"><a href="#DuckDB.Generator-180"><span class="linenos">180</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-181"><a href="#DuckDB.Generator-181"><span class="linenos">181</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="s1">&#39;day&#39;</span><span class="p">)</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-182"><a href="#DuckDB.Generator-182"><span class="linenos">182</span></a> <span class="p">),</span>
+</span><span id="DuckDB.Generator-183"><a href="#DuckDB.Generator-183"><span class="linenos">183</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-184"><a href="#DuckDB.Generator-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-185"><a href="#DuckDB.Generator-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-186"><a href="#DuckDB.Generator-186"><span class="linenos">186</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-187"><a href="#DuckDB.Generator-187"><span class="linenos">187</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-188"><a href="#DuckDB.Generator-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-189"><a href="#DuckDB.Generator-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-190"><a href="#DuckDB.Generator-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-191"><a href="#DuckDB.Generator-191"><span class="linenos">191</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-192"><a href="#DuckDB.Generator-192"><span class="linenos">192</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-193"><a href="#DuckDB.Generator-193"><span class="linenos">193</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="DuckDB.Generator-194"><a href="#DuckDB.Generator-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="n">no_properties_sql</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-195"><a href="#DuckDB.Generator-195"><span class="linenos">195</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-196"><a href="#DuckDB.Generator-196"><span class="linenos">196</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-197"><a href="#DuckDB.Generator-197"><span class="linenos">197</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-198"><a href="#DuckDB.Generator-198"><span class="linenos">198</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-199"><a href="#DuckDB.Generator-199"><span class="linenos">199</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-200"><a href="#DuckDB.Generator-200"><span class="linenos">200</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-201"><a href="#DuckDB.Generator-201"><span class="linenos">201</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-202"><a href="#DuckDB.Generator-202"><span class="linenos">202</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-203"><a href="#DuckDB.Generator-203"><span class="linenos">203</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-204"><a href="#DuckDB.Generator-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-205"><a href="#DuckDB.Generator-205"><span class="linenos">205</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-206"><a href="#DuckDB.Generator-206"><span class="linenos">206</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-207"><a href="#DuckDB.Generator-207"><span class="linenos">207</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-208"><a href="#DuckDB.Generator-208"><span class="linenos">208</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-209"><a href="#DuckDB.Generator-209"><span class="linenos">209</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-210"><a href="#DuckDB.Generator-210"><span class="linenos">210</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;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-211"><a href="#DuckDB.Generator-211"><span class="linenos">211</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-212"><a href="#DuckDB.Generator-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS TEXT), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-213"><a href="#DuckDB.Generator-213"><span class="linenos">213</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-214"><a href="#DuckDB.Generator-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;duckdb&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-215"><a href="#DuckDB.Generator-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-216"><a href="#DuckDB.Generator-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="DuckDB.Generator-217"><a href="#DuckDB.Generator-217"><span class="linenos">217</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-218"><a href="#DuckDB.Generator-218"><span class="linenos">218</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-219"><a href="#DuckDB.Generator-219"><span class="linenos">219</span></a> <span class="p">}</span>
</span><span id="DuckDB.Generator-220"><a href="#DuckDB.Generator-220"><span class="linenos">220</span></a>
-</span><span id="DuckDB.Generator-221"><a href="#DuckDB.Generator-221"><span class="linenos">221</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DuckDB.Generator-222"><a href="#DuckDB.Generator-222"><span class="linenos">222</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="DuckDB.Generator-223"><a href="#DuckDB.Generator-223"><span class="linenos">223</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="DuckDB.Generator-224"><a href="#DuckDB.Generator-224"><span class="linenos">224</span></a> <span class="p">}</span>
-</span><span id="DuckDB.Generator-225"><a href="#DuckDB.Generator-225"><span class="linenos">225</span></a>
-</span><span id="DuckDB.Generator-226"><a href="#DuckDB.Generator-226"><span class="linenos">226</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="DuckDB.Generator-227"><a href="#DuckDB.Generator-227"><span class="linenos">227</span></a>
-</span><span id="DuckDB.Generator-228"><a href="#DuckDB.Generator-228"><span class="linenos">228</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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 class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&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-229"><a href="#DuckDB.Generator-229"><span class="linenos">229</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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-221"><a href="#DuckDB.Generator-221"><span class="linenos">221</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-222"><a href="#DuckDB.Generator-222"><span class="linenos">222</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-223"><a href="#DuckDB.Generator-223"><span class="linenos">223</span></a> <span class="n">exp</span><span 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-224"><a href="#DuckDB.Generator-224"><span class="linenos">224</span></a> <span class="n">exp</span><span 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-225"><a href="#DuckDB.Generator-225"><span class="linenos">225</span></a> <span class="n">exp</span><span 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-226"><a href="#DuckDB.Generator-226"><span class="linenos">226</span></a> <span class="n">exp</span><span 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-227"><a href="#DuckDB.Generator-227"><span class="linenos">227</span></a> <span class="n">exp</span><span 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-228"><a href="#DuckDB.Generator-228"><span class="linenos">228</span></a> <span class="n">exp</span><span 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-229"><a href="#DuckDB.Generator-229"><span class="linenos">229</span></a> <span class="n">exp</span><span 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-230"><a href="#DuckDB.Generator-230"><span class="linenos">230</span></a> <span class="n">exp</span><span 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-231"><a href="#DuckDB.Generator-231"><span class="linenos">231</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-232"><a href="#DuckDB.Generator-232"><span class="linenos">232</span></a>
+</span><span id="DuckDB.Generator-233"><a href="#DuckDB.Generator-233"><span class="linenos">233</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-234"><a href="#DuckDB.Generator-234"><span class="linenos">234</span></a>
+</span><span id="DuckDB.Generator-235"><a href="#DuckDB.Generator-235"><span class="linenos">235</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DuckDB.Generator-236"><a href="#DuckDB.Generator-236"><span class="linenos">236</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="DuckDB.Generator-237"><a href="#DuckDB.Generator-237"><span class="linenos">237</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="DuckDB.Generator-238"><a href="#DuckDB.Generator-238"><span class="linenos">238</span></a> <span class="p">}</span>
+</span><span id="DuckDB.Generator-239"><a href="#DuckDB.Generator-239"><span class="linenos">239</span></a>
+</span><span id="DuckDB.Generator-240"><a href="#DuckDB.Generator-240"><span class="linenos">240</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-241"><a href="#DuckDB.Generator-241"><span class="linenos">241</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">TableSample</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; AS &quot;</span>
+</span><span id="DuckDB.Generator-242"><a href="#DuckDB.Generator-242"><span class="linenos">242</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-243"><a href="#DuckDB.Generator-243"><span class="linenos">243</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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">)</span>
</span></pre></div>
@@ -787,14 +807,16 @@ Default: True</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">tablesample_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a></span>,</span><span class="param"> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;SEED&#39;</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+ <span class="name">tablesample_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a></span>,</span><span class="param"> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;SEED&#39;</span>,</span><span class="param"> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; AS &#39;</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="DuckDB.Generator.tablesample_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#DuckDB.Generator.tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.tablesample_sql-228"><a href="#DuckDB.Generator.tablesample_sql-228"><span class="linenos">228</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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 class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&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.tablesample_sql-229"><a href="#DuckDB.Generator.tablesample_sql-229"><span class="linenos">229</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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.tablesample_sql-240"><a href="#DuckDB.Generator.tablesample_sql-240"><span class="linenos">240</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.tablesample_sql-241"><a href="#DuckDB.Generator.tablesample_sql-241"><span class="linenos">241</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">TableSample</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; AS &quot;</span>
+</span><span id="DuckDB.Generator.tablesample_sql-242"><a href="#DuckDB.Generator.tablesample_sql-242"><span class="linenos">242</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-243"><a href="#DuckDB.Generator.tablesample_sql-243"><span class="linenos">243</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 class="n">expression</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="o">=</span><span class="s2">&quot;REPEATABLE&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">)</span>
</span></pre></div>
@@ -924,7 +946,7 @@ Default: True</li>
<dd id="DuckDB.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="DuckDB.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="DuckDB.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="DuckDB.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="DuckDB.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="DuckDB.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="DuckDB.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="DuckDB.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -933,6 +955,7 @@ Default: True</li>
<dd id="DuckDB.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="DuckDB.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="DuckDB.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="DuckDB.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="DuckDB.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="DuckDB.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="DuckDB.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/hive.html b/docs/sqlglot/dialects/hive.html
index b477f0e..5266bd3 100644
--- a/docs/sqlglot/dialects/hive.html
+++ b/docs/sqlglot/dialects/hive.html
@@ -169,300 +169,316 @@
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">diff_sql</span><span class="si">}{</span><span class="n">multiplier_sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="k">def</span> <span class="nf">_array_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">ArraySort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</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-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hive SORT_ARRAY does not support a comparator&quot;</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="sa">f</span><span class="s2">&quot;SORT_ARRAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-88"><a href="#L-88"><span class="linenos"> 88</span></a>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="k">def</span> <span class="nf">_json_format_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">JSONFormat</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</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-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">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</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-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">_property_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">Property</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="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;=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="k">def</span> <span class="nf">_str_to_unix</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">StrToUnix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;UNIX_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 class="n">_time_format</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-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">if</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">JSON</span><span class="p">):</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</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-94"><a href="#L-94"><span class="linenos"> 94</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;TO_JSON&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&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><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">def</span> <span class="nf">_str_to_date</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">StrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-100"><a href="#L-100"><span class="linenos">100</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-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(UNIX_TIMESTAMP(</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">time_format</span><span class="si">}</span><span class="s2">))&quot;</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</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">this</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="k">def</span> <span class="nf">_array_sort_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">ArraySort</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</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-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;Hive SORT_ARRAY does not support a comparator&quot;</span><span class="p">)</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SORT_ARRAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-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><span id="L-103"><a href="#L-103"><span class="linenos">103</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">generator</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">Property</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</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;=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-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">def</span> <span class="nf">_str_to_time</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">StrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-108"><a href="#L-108"><span class="linenos">108</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-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(UNIX_TIMESTAMP(</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">time_format</span><span class="si">}</span><span class="s2">))&quot;</span>
-</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;CAST(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</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><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="k">def</span> <span class="nf">_time_format</span><span class="p">(</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</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="nb">str</span><span class="p">]:</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="o">==</span> <span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">:</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">time_format</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><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="k">def</span> <span class="nf">_time_to_str</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">TimeToStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-125"><a href="#L-125"><span class="linenos">125</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-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</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">time_format</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a><span class="k">def</span> <span class="nf">_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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">sql</span><span class="p">(</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-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(</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">time_format</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="k">def</span> <span class="nf">_str_to_unix_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">StrToUnix</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;UNIX_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 class="n">_time_format</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-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><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a><span class="k">def</span> <span class="nf">_str_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">StrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-113"><a href="#L-113"><span class="linenos">113</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-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</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="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(UNIX_TIMESTAMP(</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">time_format</span><span class="si">}</span><span class="s2">))&quot;</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;CAST(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS DATE)&quot;</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><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a><span class="k">def</span> <span class="nf">_str_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">StrToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</span><span class="p">):</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(UNIX_TIMESTAMP(</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">time_format</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</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">this</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a><span class="k">def</span> <span class="nf">_time_format</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">generator</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">UnixToStr</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</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="nb">str</span><span class="p">]:</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="o">==</span> <span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">:</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">time_format</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><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">_index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">)</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> ON TABLE </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">columns</span><span class="si">}</span><span class="s2">&quot;</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><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="k">class</span> <span class="nc">Hive</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&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;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&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;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&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;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&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;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&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;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&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;dd&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">&quot;hh&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">&quot;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;SSSSSS&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">&quot;a&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&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;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&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;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&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;E&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-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;EE&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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;EEE&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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;EEEE&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="p">}</span>
-</span><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">date_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd&#39;&quot;</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">dateint_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyyMMdd&#39;&quot;</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd HH:mm:ss&#39;&quot;</span>
-</span><span id="L-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">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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</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><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</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">KEYWORDS</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">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-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="s2">&quot;ADD ARCHIVE&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-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">&quot;ADD ARCHIVES&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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="s2">&quot;ADD FILE&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-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="s2">&quot;ADD FILES&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-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="s2">&quot;ADD JAR&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-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="s2">&quot;ADD JARS&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-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="s2">&quot;MSCK REPAIR&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-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</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 class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="s2">&quot;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&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;S&quot;</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&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;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;TINYINT&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;D&quot;</span><span class="p">:</span> <span class="s2">&quot;DOUBLE&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;F&quot;</span><span class="p">:</span> <span class="s2">&quot;FLOAT&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;BD&quot;</span><span class="p">:</span> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="p">}</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="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-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a><span class="k">def</span> <span class="nf">_time_to_str</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">TimeToStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;DATE_FORMAT(</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">time_format</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a><span class="k">def</span> <span class="nf">_to_date_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">TsOrDsToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="ow">and</span> <span class="n">time_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">time_format</span><span class="p">,</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</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="sa">f</span><span class="s2">&quot;TO_DATE(</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">time_format</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="k">def</span> <span class="nf">_index_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">Index</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">)</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</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"> ON TABLE </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">columns</span><span class="si">}</span><span class="s2">&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><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="k">class</span> <span class="nc">Hive</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">True</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">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&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;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;dd&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;hh&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&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;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&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;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="s2">&quot;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&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;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&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;SSSSSS&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">&quot;a&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&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;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&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;E&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-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="s2">&quot;EE&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-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="s2">&quot;EEE&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-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="s2">&quot;EEEE&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <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="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd&#39;&quot;</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">dateint_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyyMMdd&#39;&quot;</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd HH:mm:ss&#39;&quot;</span>
+</span><span id="L-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="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-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</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><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</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">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="s2">&quot;ADD ARCHIVE&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-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="s2">&quot;ADD ARCHIVES&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-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;ADD FILE&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-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;ADD FILES&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-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;ADD JAR&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-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="s2">&quot;ADD JARS&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-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;MSCK REPAIR&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-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <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="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</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">TsOrDsAdd</span><span class="p">(</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</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-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="p">),</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</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-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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">1</span><span class="p">)),</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="p">),</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;DATE_SUB&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-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="p">),</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="p">),</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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;hive&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 class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</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-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="p">]</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 class="s2">&quot;DAY&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">Day</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">TsOrDsToDate</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-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">UnixToStr</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="n">locate_to_strposition</span><span class="p">,</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</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-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="s2">&quot;MONTH&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">Month</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">TsOrDsToDate</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-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="s2">&quot;PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="s2">&quot;PERCENTILE_APPROX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="s2">&quot;SIZE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="s2">&quot;TO_DATE&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">TsOrDsToDate</span><span class="p">,</span> <span class="s2">&quot;hive&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;TO_JSON&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;UNIX_TIMESTAMP&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">StrToUnix</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;YEAR&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">Year</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">TsOrDsToDate</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-256"><a href="#L-256"><span class="linenos">256</span></a> <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">PROPERTY_PARSERS</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="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 class="c1"># type: ignore</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">(</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</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_property</span><span class="p">)</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="p">),</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <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="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-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</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">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="n">exp</span><span 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-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="n">exp</span><span 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-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="n">exp</span><span 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;BINARY&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">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-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIT</span><span class="p">:</span> <span class="s2">&quot;BOOLEAN&quot;</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">TRANSFORMS</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</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 class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">_property_sql</span><span class="p">,</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</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;SIZE&quot;</span><span class="p">),</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</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</span><span class="p">,</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">no_recursive_cte_sql</span><span class="p">,</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_add_date_sql</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">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">Hive</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-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), </span><span class="si">{</span><span class="n">Hive</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</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;STORED 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">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </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">&quot;</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</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-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">:</span> <span class="n">_index_sql</span><span class="p">,</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&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">JSONExtractScalar</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&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">JSONFormat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&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">Map</span><span class="p">:</span> <span class="n">var_map_sql</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">Max</span><span class="p">:</span> <span class="n">max_or_greatest</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">Min</span><span class="p">:</span> <span class="n">min_or_least</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">VarMap</span><span class="p">:</span> <span class="n">var_map_sql</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">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</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">Quantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE&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">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_APPROX&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">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;RLIKE&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">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT&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">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</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">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-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_SET&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">Split</span><span class="p">:</span> <span 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;SPLIT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, CONCAT(&#39;</span><span class="se">\\\\</span><span class="s2">Q&#39;, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&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">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</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">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</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">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time</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">StrToUnix</span><span class="p">:</span> <span class="n">_str_to_unix</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">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_sql</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">TableFormatProperty</span><span class="p">:</span> <span 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;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">e</span><span class="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-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_time_to_str</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">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&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">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">TsOrDsToDate</span><span class="p">:</span> <span class="n">_to_date_sql</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">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</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">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">_time_format</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-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 class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</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;PARTITIONED 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-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span 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;ROW FORMAT SERDE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;WITH SERDEPROPERTIES&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">NumberToStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FORMAT_NUMBER&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">LastDateOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LAST_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">exp</span><span class="o">.</span><span class="n">National</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="L-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><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">PROPERTIES_LOCATION</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 class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</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_SCHEMA</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">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-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="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">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-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="p">}</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</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><span id="L-362"><a href="#L-362"><span class="linenos">362</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-363"><a href="#L-363"><span class="linenos">363</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><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="n">properties</span><span class="p">,</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <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;TBLPROPERTIES&quot;</span><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><span id="L-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="p">):</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</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="s2">&quot;text&quot;</span><span class="p">)</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">elif</span> <span class="n">expression</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-375"><a href="#L-375"><span class="linenos">375</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">expression</span><span class="o">.</span><span class="n">this</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">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-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="s2">&quot;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&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;S&quot;</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&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;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;TINYINT&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;D&quot;</span><span class="p">:</span> <span class="s2">&quot;DOUBLE&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;F&quot;</span><span class="p">:</span> <span class="s2">&quot;FLOAT&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;BD&quot;</span><span class="p">:</span> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">,</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <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="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-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</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="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</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">TsOrDsAdd</span><span class="p">(</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="p">),</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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">1</span><span class="p">)),</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="p">),</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;DATE_SUB&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-241"><a href="#L-241"><span class="linenos">241</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-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="p">),</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="p">),</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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;hive&quot;</span><span class="p">)(</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="p">[</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</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-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-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 class="p">),</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="s2">&quot;DAY&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">Day</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">TsOrDsToDate</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-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">UnixToStr</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="n">locate_to_strposition</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</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-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="s2">&quot;MONTH&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">Month</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">TsOrDsToDate</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-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="s2">&quot;PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="s2">&quot;PERCENTILE_APPROX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="s2">&quot;SIZE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="s2">&quot;TO_DATE&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">TsOrDsToDate</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">),</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="s2">&quot;TO_JSON&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="s2">&quot;UNIX_TIMESTAMP&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">StrToUnix</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="s2">&quot;YEAR&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">Year</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">TsOrDsToDate</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-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-272"><a href="#L-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">PROPERTY_PARSERS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">(</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</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_property</span><span class="p">)</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="p">),</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a> <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">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-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">exp</span><span 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-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">exp</span><span 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-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">exp</span><span 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;BINARY&quot;</span><span class="p">,</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">exp</span><span 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-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIT</span><span class="p">:</span> <span class="s2">&quot;BOOLEAN&quot;</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><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</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-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="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</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="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">Property</span><span class="p">:</span> <span class="n">_property_sql</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">ApproxDistinct</span><span class="p">:</span> <span class="n">approx_count_distinct_sql</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">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-307"><a href="#L-307"><span class="linenos">307</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;SIZE&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">ArraySort</span><span class="p">:</span> <span class="n">_array_sort_sql</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">With</span><span class="p">:</span> <span class="n">no_recursive_cte_sql</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">DateAdd</span><span class="p">:</span> <span class="n">_add_date_sql</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">DateDiff</span><span class="p">:</span> <span class="n">_date_diff_sql</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">DateStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_add_date_sql</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">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">Hive</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-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), </span><span class="si">{</span><span class="n">Hive</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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;STORED 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">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </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">&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">If</span><span class="p">:</span> <span class="n">if_sql</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">Index</span><span class="p">:</span> <span class="n">_index_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">ILike</span><span class="p">:</span> <span class="n">no_ilike_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">JSONExtract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&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">JSONExtractScalar</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&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">JSONFormat</span><span class="p">:</span> <span class="n">_json_format_sql</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">Map</span><span class="p">:</span> <span class="n">var_map_sql</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">Max</span><span class="p">:</span> <span class="n">max_or_greatest</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">Min</span><span class="p">:</span> <span class="n">min_or_least</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">VarMap</span><span class="p">:</span> <span class="n">var_map_sql</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">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</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">Quantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE&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">ApproxQuantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE_APPROX&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">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;RLIKE&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">RegexpSplit</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SPLIT&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">SafeDivide</span><span class="p">:</span> <span class="n">no_safe_divide_sql</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">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-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_SET&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">Split</span><span class="p">:</span> <span 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;SPLIT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, CONCAT(&#39;</span><span class="se">\\\\</span><span class="s2">Q&#39;, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;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">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</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">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date_sql</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">StrToTime</span><span class="p">:</span> <span class="n">_str_to_time_sql</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">StrToUnix</span><span class="p">:</span> <span class="n">_str_to_unix_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">StructExtract</span><span class="p">:</span> <span class="n">struct_extract_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">TableFormatProperty</span><span class="p">:</span> <span 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;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">e</span><span class="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-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</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-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_time_to_str</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">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&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">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_to_date_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">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</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">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">_time_format</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-353"><a href="#L-353"><span class="linenos">353</span></a> <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">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</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;PARTITIONED 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-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span 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;ROW FORMAT SERDE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;WITH SERDEPROPERTIES&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">NumberToStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FORMAT_NUMBER&quot;</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">LastDateOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LAST_DAY&quot;</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">National</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-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="n">exp</span><span class="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">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-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="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">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-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="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</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="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-379"><a href="#L-379"><span class="linenos">379</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><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="n">properties</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <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;TBLPROPERTIES&quot;</span><span class="p">),</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="p">)</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="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-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">if</span> <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">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</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">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;text&quot;</span><span class="p">)</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="k">elif</span> <span class="n">expression</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-391"><a href="#L-391"><span class="linenos">391</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">expression</span><span class="o">.</span><span class="n">this</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="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>
@@ -478,240 +494,243 @@
</div>
<a class="headerlink" href="#Hive"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive-145"><a href="#Hive-145"><span class="linenos">145</span></a><span class="k">class</span> <span class="nc">Hive</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="Hive-146"><a href="#Hive-146"><span class="linenos">146</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-147"><a href="#Hive-147"><span class="linenos">147</span></a>
-</span><span id="Hive-148"><a href="#Hive-148"><span class="linenos">148</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-149"><a href="#Hive-149"><span class="linenos">149</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="Hive-150"><a href="#Hive-150"><span class="linenos">150</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="Hive-151"><a href="#Hive-151"><span class="linenos">151</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="Hive-152"><a href="#Hive-152"><span class="linenos">152</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
-</span><span id="Hive-153"><a href="#Hive-153"><span class="linenos">153</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
-</span><span id="Hive-154"><a href="#Hive-154"><span class="linenos">154</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
-</span><span id="Hive-155"><a href="#Hive-155"><span class="linenos">155</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
-</span><span id="Hive-156"><a href="#Hive-156"><span class="linenos">156</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
-</span><span id="Hive-157"><a href="#Hive-157"><span class="linenos">157</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
-</span><span id="Hive-158"><a href="#Hive-158"><span class="linenos">158</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
-</span><span id="Hive-159"><a href="#Hive-159"><span class="linenos">159</span></a> <span class="s2">&quot;dd&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Hive-160"><a href="#Hive-160"><span class="linenos">160</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Hive-161"><a href="#Hive-161"><span class="linenos">161</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="Hive-162"><a href="#Hive-162"><span class="linenos">162</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
-</span><span id="Hive-163"><a href="#Hive-163"><span class="linenos">163</span></a> <span class="s2">&quot;hh&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span>
-</span><span id="Hive-164"><a href="#Hive-164"><span class="linenos">164</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
-</span><span id="Hive-165"><a href="#Hive-165"><span class="linenos">165</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
-</span><span id="Hive-166"><a href="#Hive-166"><span class="linenos">166</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
-</span><span id="Hive-167"><a href="#Hive-167"><span class="linenos">167</span></a> <span class="s2">&quot;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
-</span><span id="Hive-168"><a href="#Hive-168"><span class="linenos">168</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
-</span><span id="Hive-169"><a href="#Hive-169"><span class="linenos">169</span></a> <span class="s2">&quot;SSSSSS&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Hive-170"><a href="#Hive-170"><span class="linenos">170</span></a> <span class="s2">&quot;a&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
-</span><span id="Hive-171"><a href="#Hive-171"><span class="linenos">171</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
-</span><span id="Hive-172"><a href="#Hive-172"><span class="linenos">172</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span>
-</span><span id="Hive-173"><a href="#Hive-173"><span class="linenos">173</span></a> <span class="s2">&quot;E&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="Hive-174"><a href="#Hive-174"><span class="linenos">174</span></a> <span class="s2">&quot;EE&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="Hive-175"><a href="#Hive-175"><span class="linenos">175</span></a> <span class="s2">&quot;EEE&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="Hive-176"><a href="#Hive-176"><span class="linenos">176</span></a> <span class="s2">&quot;EEEE&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span>
-</span><span id="Hive-177"><a href="#Hive-177"><span class="linenos">177</span></a> <span class="p">}</span>
-</span><span id="Hive-178"><a href="#Hive-178"><span class="linenos">178</span></a>
-</span><span id="Hive-179"><a href="#Hive-179"><span class="linenos">179</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd&#39;&quot;</span>
-</span><span id="Hive-180"><a href="#Hive-180"><span class="linenos">180</span></a> <span class="n">dateint_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyyMMdd&#39;&quot;</span>
-</span><span id="Hive-181"><a href="#Hive-181"><span class="linenos">181</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd HH:mm:ss&#39;&quot;</span>
-</span><span id="Hive-182"><a href="#Hive-182"><span class="linenos">182</span></a>
-</span><span id="Hive-183"><a href="#Hive-183"><span class="linenos">183</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="Hive-184"><a href="#Hive-184"><span class="linenos">184</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="Hive-185"><a href="#Hive-185"><span class="linenos">185</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="Hive-186"><a href="#Hive-186"><span class="linenos">186</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><span id="Hive-187"><a href="#Hive-187"><span class="linenos">187</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="Hive-188"><a href="#Hive-188"><span class="linenos">188</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-189"><a href="#Hive-189"><span class="linenos">189</span></a>
-</span><span id="Hive-190"><a href="#Hive-190"><span class="linenos">190</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-191"><a href="#Hive-191"><span class="linenos">191</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="Hive-192"><a href="#Hive-192"><span class="linenos">192</span></a> <span class="s2">&quot;ADD ARCHIVE&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="Hive-193"><a href="#Hive-193"><span class="linenos">193</span></a> <span class="s2">&quot;ADD ARCHIVES&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="Hive-194"><a href="#Hive-194"><span class="linenos">194</span></a> <span class="s2">&quot;ADD FILE&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="Hive-195"><a href="#Hive-195"><span class="linenos">195</span></a> <span class="s2">&quot;ADD FILES&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="Hive-196"><a href="#Hive-196"><span class="linenos">196</span></a> <span class="s2">&quot;ADD JAR&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="Hive-197"><a href="#Hive-197"><span class="linenos">197</span></a> <span class="s2">&quot;ADD JARS&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="Hive-198"><a href="#Hive-198"><span class="linenos">198</span></a> <span class="s2">&quot;MSCK REPAIR&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="Hive-199"><a href="#Hive-199"><span class="linenos">199</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">,</span>
-</span><span id="Hive-200"><a href="#Hive-200"><span class="linenos">200</span></a> <span class="p">}</span>
-</span><span id="Hive-201"><a href="#Hive-201"><span class="linenos">201</span></a>
-</span><span id="Hive-202"><a href="#Hive-202"><span class="linenos">202</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-203"><a href="#Hive-203"><span class="linenos">203</span></a> <span class="s2">&quot;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&quot;</span><span class="p">,</span>
-</span><span id="Hive-204"><a href="#Hive-204"><span class="linenos">204</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="Hive-205"><a href="#Hive-205"><span class="linenos">205</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;TINYINT&quot;</span><span class="p">,</span>
-</span><span id="Hive-206"><a href="#Hive-206"><span class="linenos">206</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">,</span>
-</span><span id="Hive-207"><a href="#Hive-207"><span class="linenos">207</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;FLOAT&quot;</span><span class="p">,</span>
-</span><span id="Hive-208"><a href="#Hive-208"><span class="linenos">208</span></a> <span class="s2">&quot;BD&quot;</span><span class="p">:</span> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">,</span>
-</span><span id="Hive-209"><a href="#Hive-209"><span class="linenos">209</span></a> <span class="p">}</span>
-</span><span id="Hive-210"><a href="#Hive-210"><span class="linenos">210</span></a>
-</span><span id="Hive-211"><a href="#Hive-211"><span class="linenos">211</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="Hive-212"><a href="#Hive-212"><span class="linenos">212</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-213"><a href="#Hive-213"><span class="linenos">213</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive-158"><a href="#Hive-158"><span class="linenos">158</span></a><span class="k">class</span> <span class="nc">Hive</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="Hive-159"><a href="#Hive-159"><span class="linenos">159</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive-160"><a href="#Hive-160"><span class="linenos">160</span></a>
+</span><span id="Hive-161"><a href="#Hive-161"><span class="linenos">161</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-162"><a href="#Hive-162"><span class="linenos">162</span></a> <span class="s2">&quot;y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="Hive-163"><a href="#Hive-163"><span class="linenos">163</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="Hive-164"><a href="#Hive-164"><span class="linenos">164</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="Hive-165"><a href="#Hive-165"><span class="linenos">165</span></a> <span class="s2">&quot;yyyy&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span>
+</span><span id="Hive-166"><a href="#Hive-166"><span class="linenos">166</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="Hive-167"><a href="#Hive-167"><span class="linenos">167</span></a> <span class="s2">&quot;yy&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span>
+</span><span id="Hive-168"><a href="#Hive-168"><span class="linenos">168</span></a> <span class="s2">&quot;MMMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span>
+</span><span id="Hive-169"><a href="#Hive-169"><span class="linenos">169</span></a> <span class="s2">&quot;MMM&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span>
+</span><span id="Hive-170"><a href="#Hive-170"><span class="linenos">170</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span>
+</span><span id="Hive-171"><a href="#Hive-171"><span class="linenos">171</span></a> <span class="s2">&quot;M&quot;</span><span class="p">:</span> <span class="s2">&quot;%-m&quot;</span><span class="p">,</span>
+</span><span id="Hive-172"><a href="#Hive-172"><span class="linenos">172</span></a> <span class="s2">&quot;dd&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Hive-173"><a href="#Hive-173"><span class="linenos">173</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%-d</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Hive-174"><a href="#Hive-174"><span class="linenos">174</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span>
+</span><span id="Hive-175"><a href="#Hive-175"><span class="linenos">175</span></a> <span class="s2">&quot;H&quot;</span><span class="p">:</span> <span class="s2">&quot;%-H&quot;</span><span class="p">,</span>
+</span><span id="Hive-176"><a href="#Hive-176"><span class="linenos">176</span></a> <span class="s2">&quot;hh&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span>
+</span><span id="Hive-177"><a href="#Hive-177"><span class="linenos">177</span></a> <span class="s2">&quot;h&quot;</span><span class="p">:</span> <span class="s2">&quot;%-I&quot;</span><span class="p">,</span>
+</span><span id="Hive-178"><a href="#Hive-178"><span class="linenos">178</span></a> <span class="s2">&quot;mm&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span>
+</span><span id="Hive-179"><a href="#Hive-179"><span class="linenos">179</span></a> <span class="s2">&quot;m&quot;</span><span class="p">:</span> <span class="s2">&quot;%-M&quot;</span><span class="p">,</span>
+</span><span id="Hive-180"><a href="#Hive-180"><span class="linenos">180</span></a> <span class="s2">&quot;ss&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span>
+</span><span id="Hive-181"><a href="#Hive-181"><span class="linenos">181</span></a> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;%-S&quot;</span><span class="p">,</span>
+</span><span id="Hive-182"><a href="#Hive-182"><span class="linenos">182</span></a> <span class="s2">&quot;SSSSSS&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%f</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Hive-183"><a href="#Hive-183"><span class="linenos">183</span></a> <span class="s2">&quot;a&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="Hive-184"><a href="#Hive-184"><span class="linenos">184</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span>
+</span><span id="Hive-185"><a href="#Hive-185"><span class="linenos">185</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;%-j&quot;</span><span class="p">,</span>
+</span><span id="Hive-186"><a href="#Hive-186"><span class="linenos">186</span></a> <span class="s2">&quot;E&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="Hive-187"><a href="#Hive-187"><span class="linenos">187</span></a> <span class="s2">&quot;EE&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="Hive-188"><a href="#Hive-188"><span class="linenos">188</span></a> <span class="s2">&quot;EEE&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="Hive-189"><a href="#Hive-189"><span class="linenos">189</span></a> <span class="s2">&quot;EEEE&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span>
+</span><span id="Hive-190"><a href="#Hive-190"><span class="linenos">190</span></a> <span class="p">}</span>
+</span><span id="Hive-191"><a href="#Hive-191"><span class="linenos">191</span></a>
+</span><span id="Hive-192"><a href="#Hive-192"><span class="linenos">192</span></a> <span class="n">date_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd&#39;&quot;</span>
+</span><span id="Hive-193"><a href="#Hive-193"><span class="linenos">193</span></a> <span class="n">dateint_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyyMMdd&#39;&quot;</span>
+</span><span id="Hive-194"><a href="#Hive-194"><span class="linenos">194</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="s2">&quot;&#39;yyyy-MM-dd HH:mm:ss&#39;&quot;</span>
+</span><span id="Hive-195"><a href="#Hive-195"><span class="linenos">195</span></a>
+</span><span id="Hive-196"><a href="#Hive-196"><span class="linenos">196</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="Hive-197"><a href="#Hive-197"><span class="linenos">197</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="Hive-198"><a href="#Hive-198"><span class="linenos">198</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="Hive-199"><a href="#Hive-199"><span class="linenos">199</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><span id="Hive-200"><a href="#Hive-200"><span class="linenos">200</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
+</span><span id="Hive-201"><a href="#Hive-201"><span class="linenos">201</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive-202"><a href="#Hive-202"><span class="linenos">202</span></a>
+</span><span id="Hive-203"><a href="#Hive-203"><span class="linenos">203</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-204"><a href="#Hive-204"><span class="linenos">204</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="Hive-205"><a href="#Hive-205"><span class="linenos">205</span></a> <span class="s2">&quot;ADD ARCHIVE&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="Hive-206"><a href="#Hive-206"><span class="linenos">206</span></a> <span class="s2">&quot;ADD ARCHIVES&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="Hive-207"><a href="#Hive-207"><span class="linenos">207</span></a> <span class="s2">&quot;ADD FILE&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="Hive-208"><a href="#Hive-208"><span class="linenos">208</span></a> <span class="s2">&quot;ADD FILES&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="Hive-209"><a href="#Hive-209"><span class="linenos">209</span></a> <span class="s2">&quot;ADD JAR&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="Hive-210"><a href="#Hive-210"><span class="linenos">210</span></a> <span class="s2">&quot;ADD JARS&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="Hive-211"><a href="#Hive-211"><span class="linenos">211</span></a> <span class="s2">&quot;MSCK REPAIR&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="Hive-212"><a href="#Hive-212"><span class="linenos">212</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">,</span>
+</span><span id="Hive-213"><a href="#Hive-213"><span class="linenos">213</span></a> <span class="p">}</span>
</span><span id="Hive-214"><a href="#Hive-214"><span class="linenos">214</span></a>
-</span><span id="Hive-215"><a href="#Hive-215"><span class="linenos">215</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-216"><a href="#Hive-216"><span class="linenos">216</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive-217"><a href="#Hive-217"><span class="linenos">217</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-218"><a href="#Hive-218"><span class="linenos">218</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-219"><a href="#Hive-219"><span class="linenos">219</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">TsOrDsAdd</span><span class="p">(</span>
-</span><span id="Hive-220"><a href="#Hive-220"><span class="linenos">220</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="Hive-221"><a href="#Hive-221"><span class="linenos">221</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="Hive-222"><a href="#Hive-222"><span class="linenos">222</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Hive-223"><a href="#Hive-223"><span class="linenos">223</span></a> <span class="p">),</span>
-</span><span id="Hive-224"><a href="#Hive-224"><span class="linenos">224</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="Hive-225"><a href="#Hive-225"><span class="linenos">225</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Hive-226"><a href="#Hive-226"><span class="linenos">226</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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">1</span><span class="p">)),</span>
-</span><span id="Hive-227"><a href="#Hive-227"><span class="linenos">227</span></a> <span class="p">),</span>
-</span><span id="Hive-228"><a href="#Hive-228"><span class="linenos">228</span></a> <span class="s2">&quot;DATE_SUB&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="Hive-229"><a href="#Hive-229"><span class="linenos">229</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="Hive-230"><a href="#Hive-230"><span class="linenos">230</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span>
-</span><span id="Hive-231"><a href="#Hive-231"><span class="linenos">231</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Hive-232"><a href="#Hive-232"><span class="linenos">232</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="Hive-233"><a href="#Hive-233"><span class="linenos">233</span></a> <span class="p">),</span>
-</span><span id="Hive-234"><a href="#Hive-234"><span class="linenos">234</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Hive-235"><a href="#Hive-235"><span class="linenos">235</span></a> <span class="p">),</span>
-</span><span id="Hive-236"><a href="#Hive-236"><span class="linenos">236</span></a> <span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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;hive&quot;</span><span class="p">)(</span>
-</span><span id="Hive-237"><a href="#Hive-237"><span class="linenos">237</span></a> <span class="p">[</span>
-</span><span id="Hive-238"><a href="#Hive-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</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="Hive-239"><a href="#Hive-239"><span class="linenos">239</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Hive-240"><a href="#Hive-240"><span class="linenos">240</span></a> <span class="p">]</span>
-</span><span id="Hive-241"><a href="#Hive-241"><span class="linenos">241</span></a> <span class="p">),</span>
-</span><span id="Hive-242"><a href="#Hive-242"><span class="linenos">242</span></a> <span class="s2">&quot;DAY&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">Day</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">TsOrDsToDate</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="Hive-243"><a href="#Hive-243"><span class="linenos">243</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">UnixToStr</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
-</span><span id="Hive-244"><a href="#Hive-244"><span class="linenos">244</span></a> <span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-245"><a href="#Hive-245"><span class="linenos">245</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="n">locate_to_strposition</span><span class="p">,</span>
-</span><span id="Hive-246"><a href="#Hive-246"><span class="linenos">246</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="Hive-247"><a href="#Hive-247"><span class="linenos">247</span></a> <span class="s2">&quot;MONTH&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">Month</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">TsOrDsToDate</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="Hive-248"><a href="#Hive-248"><span class="linenos">248</span></a> <span class="s2">&quot;PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-249"><a href="#Hive-249"><span class="linenos">249</span></a> <span class="s2">&quot;PERCENTILE_APPROX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-250"><a href="#Hive-250"><span class="linenos">250</span></a> <span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-251"><a href="#Hive-251"><span class="linenos">251</span></a> <span class="s2">&quot;SIZE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-252"><a href="#Hive-252"><span class="linenos">252</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-253"><a href="#Hive-253"><span class="linenos">253</span></a> <span class="s2">&quot;TO_DATE&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">TsOrDsToDate</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">),</span>
-</span><span id="Hive-254"><a href="#Hive-254"><span class="linenos">254</span></a> <span class="s2">&quot;TO_JSON&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive-255"><a href="#Hive-255"><span class="linenos">255</span></a> <span class="s2">&quot;UNIX_TIMESTAMP&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">StrToUnix</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
-</span><span id="Hive-256"><a href="#Hive-256"><span class="linenos">256</span></a> <span class="s2">&quot;YEAR&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">Year</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">TsOrDsToDate</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="Hive-257"><a href="#Hive-257"><span class="linenos">257</span></a> <span class="p">}</span>
-</span><span id="Hive-258"><a href="#Hive-258"><span class="linenos">258</span></a>
-</span><span id="Hive-259"><a href="#Hive-259"><span class="linenos">259</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-260"><a href="#Hive-260"><span class="linenos">260</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 class="c1"># type: ignore</span>
-</span><span id="Hive-261"><a href="#Hive-261"><span class="linenos">261</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">(</span>
-</span><span id="Hive-262"><a href="#Hive-262"><span class="linenos">262</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_property</span><span class="p">)</span>
-</span><span id="Hive-263"><a href="#Hive-263"><span class="linenos">263</span></a> <span class="p">),</span>
-</span><span id="Hive-264"><a href="#Hive-264"><span class="linenos">264</span></a> <span class="p">}</span>
-</span><span id="Hive-265"><a href="#Hive-265"><span class="linenos">265</span></a>
-</span><span id="Hive-266"><a href="#Hive-266"><span class="linenos">266</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="Hive-267"><a href="#Hive-267"><span class="linenos">267</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="Hive-268"><a href="#Hive-268"><span class="linenos">268</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-269"><a href="#Hive-269"><span class="linenos">269</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive-270"><a href="#Hive-270"><span class="linenos">270</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-271"><a href="#Hive-271"><span class="linenos">271</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive-272"><a href="#Hive-272"><span class="linenos">272</span></a>
-</span><span id="Hive-273"><a href="#Hive-273"><span class="linenos">273</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-274"><a href="#Hive-274"><span class="linenos">274</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive-275"><a href="#Hive-275"><span class="linenos">275</span></a> <span class="n">exp</span><span 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="Hive-276"><a href="#Hive-276"><span class="linenos">276</span></a> <span class="n">exp</span><span 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="Hive-277"><a href="#Hive-277"><span class="linenos">277</span></a> <span class="n">exp</span><span 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;BINARY&quot;</span><span class="p">,</span>
-</span><span id="Hive-278"><a href="#Hive-278"><span class="linenos">278</span></a> <span class="n">exp</span><span 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="Hive-279"><a href="#Hive-279"><span class="linenos">279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIT</span><span class="p">:</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span>
-</span><span id="Hive-280"><a href="#Hive-280"><span class="linenos">280</span></a> <span class="p">}</span>
-</span><span id="Hive-281"><a href="#Hive-281"><span class="linenos">281</span></a>
-</span><span id="Hive-282"><a href="#Hive-282"><span class="linenos">282</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-283"><a href="#Hive-283"><span class="linenos">283</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive-284"><a href="#Hive-284"><span class="linenos">284</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive-285"><a href="#Hive-285"><span class="linenos">285</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive-286"><a href="#Hive-286"><span class="linenos">286</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="Hive-287"><a href="#Hive-287"><span class="linenos">287</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</span><span class="p">]</span>
-</span><span id="Hive-288"><a href="#Hive-288"><span class="linenos">288</span></a> <span class="p">),</span>
-</span><span id="Hive-289"><a href="#Hive-289"><span class="linenos">289</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">_property_sql</span><span class="p">,</span>
-</span><span id="Hive-290"><a href="#Hive-290"><span class="linenos">290</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="Hive-291"><a href="#Hive-291"><span class="linenos">291</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="Hive-292"><a href="#Hive-292"><span class="linenos">292</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;SIZE&quot;</span><span class="p">),</span>
-</span><span id="Hive-293"><a href="#Hive-293"><span class="linenos">293</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</span><span class="p">,</span>
-</span><span id="Hive-294"><a href="#Hive-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">no_recursive_cte_sql</span><span class="p">,</span>
-</span><span id="Hive-295"><a href="#Hive-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
-</span><span id="Hive-296"><a href="#Hive-296"><span class="linenos">296</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="Hive-297"><a href="#Hive-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="Hive-298"><a href="#Hive-298"><span class="linenos">298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
-</span><span id="Hive-299"><a href="#Hive-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">Hive</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="Hive-300"><a href="#Hive-300"><span class="linenos">300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), </span><span class="si">{</span><span class="n">Hive</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Hive-301"><a href="#Hive-301"><span class="linenos">301</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;STORED 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">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </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">&quot;</span><span class="p">,</span>
-</span><span id="Hive-302"><a href="#Hive-302"><span class="linenos">302</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="Hive-303"><a href="#Hive-303"><span class="linenos">303</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">:</span> <span class="n">_index_sql</span><span class="p">,</span>
-</span><span id="Hive-304"><a href="#Hive-304"><span class="linenos">304</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="Hive-305"><a href="#Hive-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
-</span><span id="Hive-306"><a href="#Hive-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
-</span><span id="Hive-307"><a href="#Hive-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">),</span>
-</span><span id="Hive-308"><a href="#Hive-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
-</span><span id="Hive-309"><a href="#Hive-309"><span class="linenos">309</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="Hive-310"><a href="#Hive-310"><span class="linenos">310</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="Hive-311"><a href="#Hive-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
-</span><span id="Hive-312"><a href="#Hive-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
-</span><span id="Hive-313"><a href="#Hive-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE&quot;</span><span class="p">),</span>
-</span><span id="Hive-314"><a href="#Hive-314"><span class="linenos">314</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;PERCENTILE_APPROX&quot;</span><span class="p">),</span>
-</span><span id="Hive-315"><a href="#Hive-315"><span class="linenos">315</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;RLIKE&quot;</span><span class="p">),</span>
-</span><span id="Hive-316"><a href="#Hive-316"><span class="linenos">316</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;SPLIT&quot;</span><span class="p">),</span>
-</span><span id="Hive-317"><a href="#Hive-317"><span class="linenos">317</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="Hive-318"><a href="#Hive-318"><span class="linenos">318</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="Hive-319"><a href="#Hive-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">),</span>
-</span><span id="Hive-320"><a href="#Hive-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span 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;SPLIT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, CONCAT(&#39;</span><span class="se">\\\\</span><span class="s2">Q&#39;, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="Hive-321"><a href="#Hive-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
-</span><span id="Hive-322"><a href="#Hive-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
-</span><span id="Hive-323"><a href="#Hive-323"><span class="linenos">323</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</span><span class="p">,</span>
-</span><span id="Hive-324"><a href="#Hive-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="n">_str_to_unix</span><span class="p">,</span>
-</span><span id="Hive-325"><a href="#Hive-325"><span class="linenos">325</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="Hive-326"><a href="#Hive-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;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">e</span><span class="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="Hive-327"><a href="#Hive-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="Hive-328"><a href="#Hive-328"><span class="linenos">328</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="Hive-329"><a href="#Hive-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Hive-330"><a href="#Hive-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_time_to_str</span><span class="p">,</span>
-</span><span id="Hive-331"><a href="#Hive-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Hive-332"><a href="#Hive-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Hive-333"><a href="#Hive-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive-334"><a href="#Hive-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_to_date_sql</span><span class="p">,</span>
-</span><span id="Hive-335"><a href="#Hive-335"><span class="linenos">335</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="Hive-336"><a href="#Hive-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Hive-337"><a href="#Hive-337"><span class="linenos">337</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">_time_format</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="Hive-338"><a href="#Hive-338"><span class="linenos">338</span></a> <span class="p">),</span>
-</span><span id="Hive-339"><a href="#Hive-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="Hive-340"><a href="#Hive-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="Hive-341"><a href="#Hive-341"><span class="linenos">341</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;PARTITIONED 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="Hive-342"><a href="#Hive-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span 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;ROW FORMAT SERDE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive-343"><a href="#Hive-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">),</span>
-</span><span id="Hive-344"><a href="#Hive-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FORMAT_NUMBER&quot;</span><span class="p">),</span>
-</span><span id="Hive-345"><a href="#Hive-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LAST_DAY&quot;</span><span class="p">),</span>
-</span><span id="Hive-346"><a href="#Hive-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="Hive-347"><a href="#Hive-347"><span class="linenos">347</span></a> <span class="p">}</span>
-</span><span id="Hive-348"><a href="#Hive-348"><span class="linenos">348</span></a>
-</span><span id="Hive-349"><a href="#Hive-349"><span class="linenos">349</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive-350"><a href="#Hive-350"><span class="linenos">350</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive-351"><a href="#Hive-351"><span class="linenos">351</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_SCHEMA</span><span class="p">,</span>
-</span><span id="Hive-352"><a href="#Hive-352"><span class="linenos">352</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="Hive-353"><a href="#Hive-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="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="Hive-354"><a href="#Hive-354"><span class="linenos">354</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="Hive-355"><a href="#Hive-355"><span class="linenos">355</span></a> <span class="p">}</span>
-</span><span id="Hive-356"><a href="#Hive-356"><span class="linenos">356</span></a>
-</span><span id="Hive-357"><a href="#Hive-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Hive-358"><a href="#Hive-358"><span class="linenos">358</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="Hive-359"><a href="#Hive-359"><span class="linenos">359</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="Hive-360"><a href="#Hive-360"><span class="linenos">360</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Hive-361"><a href="#Hive-361"><span class="linenos">361</span></a> <span class="p">)</span>
-</span><span id="Hive-362"><a href="#Hive-362"><span class="linenos">362</span></a>
-</span><span id="Hive-363"><a href="#Hive-363"><span class="linenos">363</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="Hive-364"><a href="#Hive-364"><span class="linenos">364</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><span id="Hive-365"><a href="#Hive-365"><span class="linenos">365</span></a> <span class="n">properties</span><span class="p">,</span>
-</span><span id="Hive-366"><a href="#Hive-366"><span class="linenos">366</span></a> <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;TBLPROPERTIES&quot;</span><span class="p">),</span>
-</span><span id="Hive-367"><a href="#Hive-367"><span class="linenos">367</span></a> <span class="p">)</span>
-</span><span id="Hive-368"><a href="#Hive-368"><span class="linenos">368</span></a>
-</span><span id="Hive-369"><a href="#Hive-369"><span class="linenos">369</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="Hive-370"><a href="#Hive-370"><span class="linenos">370</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Hive-371"><a href="#Hive-371"><span class="linenos">371</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="Hive-372"><a href="#Hive-372"><span class="linenos">372</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Hive-373"><a href="#Hive-373"><span class="linenos">373</span></a> <span class="p">):</span>
-</span><span id="Hive-374"><a href="#Hive-374"><span class="linenos">374</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="s2">&quot;text&quot;</span><span class="p">)</span>
-</span><span id="Hive-375"><a href="#Hive-375"><span class="linenos">375</span></a> <span class="k">elif</span> <span class="n">expression</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="Hive-376"><a href="#Hive-376"><span class="linenos">376</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Hive-377"><a href="#Hive-377"><span class="linenos">377</span></a>
-</span><span id="Hive-378"><a href="#Hive-378"><span class="linenos">378</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="Hive-215"><a href="#Hive-215"><span class="linenos">215</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-216"><a href="#Hive-216"><span class="linenos">216</span></a> <span class="s2">&quot;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&quot;</span><span class="p">,</span>
+</span><span id="Hive-217"><a href="#Hive-217"><span class="linenos">217</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
+</span><span id="Hive-218"><a href="#Hive-218"><span class="linenos">218</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;TINYINT&quot;</span><span class="p">,</span>
+</span><span id="Hive-219"><a href="#Hive-219"><span class="linenos">219</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">,</span>
+</span><span id="Hive-220"><a href="#Hive-220"><span class="linenos">220</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;FLOAT&quot;</span><span class="p">,</span>
+</span><span id="Hive-221"><a href="#Hive-221"><span class="linenos">221</span></a> <span class="s2">&quot;BD&quot;</span><span class="p">:</span> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">,</span>
+</span><span id="Hive-222"><a href="#Hive-222"><span class="linenos">222</span></a> <span class="p">}</span>
+</span><span id="Hive-223"><a href="#Hive-223"><span class="linenos">223</span></a>
+</span><span id="Hive-224"><a href="#Hive-224"><span class="linenos">224</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="Hive-225"><a href="#Hive-225"><span class="linenos">225</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive-226"><a href="#Hive-226"><span class="linenos">226</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-227"><a href="#Hive-227"><span class="linenos">227</span></a>
+</span><span id="Hive-228"><a href="#Hive-228"><span class="linenos">228</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-229"><a href="#Hive-229"><span class="linenos">229</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive-230"><a href="#Hive-230"><span class="linenos">230</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-231"><a href="#Hive-231"><span class="linenos">231</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-232"><a href="#Hive-232"><span class="linenos">232</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">TsOrDsAdd</span><span class="p">(</span>
+</span><span id="Hive-233"><a href="#Hive-233"><span class="linenos">233</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="Hive-234"><a href="#Hive-234"><span class="linenos">234</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="Hive-235"><a href="#Hive-235"><span class="linenos">235</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Hive-236"><a href="#Hive-236"><span class="linenos">236</span></a> <span class="p">),</span>
+</span><span id="Hive-237"><a href="#Hive-237"><span class="linenos">237</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="Hive-238"><a href="#Hive-238"><span class="linenos">238</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Hive-239"><a href="#Hive-239"><span class="linenos">239</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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">1</span><span class="p">)),</span>
+</span><span id="Hive-240"><a href="#Hive-240"><span class="linenos">240</span></a> <span class="p">),</span>
+</span><span id="Hive-241"><a href="#Hive-241"><span class="linenos">241</span></a> <span class="s2">&quot;DATE_SUB&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="Hive-242"><a href="#Hive-242"><span class="linenos">242</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="Hive-243"><a href="#Hive-243"><span class="linenos">243</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span>
+</span><span id="Hive-244"><a href="#Hive-244"><span class="linenos">244</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Hive-245"><a href="#Hive-245"><span class="linenos">245</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="Hive-246"><a href="#Hive-246"><span class="linenos">246</span></a> <span class="p">),</span>
+</span><span id="Hive-247"><a href="#Hive-247"><span class="linenos">247</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Hive-248"><a href="#Hive-248"><span class="linenos">248</span></a> <span class="p">),</span>
+</span><span id="Hive-249"><a href="#Hive-249"><span class="linenos">249</span></a> <span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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;hive&quot;</span><span class="p">)(</span>
+</span><span id="Hive-250"><a href="#Hive-250"><span class="linenos">250</span></a> <span class="p">[</span>
+</span><span id="Hive-251"><a href="#Hive-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</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="Hive-252"><a href="#Hive-252"><span class="linenos">252</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Hive-253"><a href="#Hive-253"><span class="linenos">253</span></a> <span class="p">]</span>
+</span><span id="Hive-254"><a href="#Hive-254"><span class="linenos">254</span></a> <span class="p">),</span>
+</span><span id="Hive-255"><a href="#Hive-255"><span class="linenos">255</span></a> <span class="s2">&quot;DAY&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">Day</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">TsOrDsToDate</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="Hive-256"><a href="#Hive-256"><span class="linenos">256</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">UnixToStr</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="Hive-257"><a href="#Hive-257"><span class="linenos">257</span></a> <span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-258"><a href="#Hive-258"><span class="linenos">258</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="n">locate_to_strposition</span><span class="p">,</span>
+</span><span id="Hive-259"><a href="#Hive-259"><span class="linenos">259</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="Hive-260"><a href="#Hive-260"><span class="linenos">260</span></a> <span class="s2">&quot;MONTH&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">Month</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">TsOrDsToDate</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="Hive-261"><a href="#Hive-261"><span class="linenos">261</span></a> <span class="s2">&quot;PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-262"><a href="#Hive-262"><span class="linenos">262</span></a> <span class="s2">&quot;PERCENTILE_APPROX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-263"><a href="#Hive-263"><span class="linenos">263</span></a> <span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-264"><a href="#Hive-264"><span class="linenos">264</span></a> <span class="s2">&quot;SIZE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-265"><a href="#Hive-265"><span class="linenos">265</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-266"><a href="#Hive-266"><span class="linenos">266</span></a> <span class="s2">&quot;TO_DATE&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">TsOrDsToDate</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">),</span>
+</span><span id="Hive-267"><a href="#Hive-267"><span class="linenos">267</span></a> <span class="s2">&quot;TO_JSON&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive-268"><a href="#Hive-268"><span class="linenos">268</span></a> <span class="s2">&quot;UNIX_TIMESTAMP&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">StrToUnix</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="Hive-269"><a href="#Hive-269"><span class="linenos">269</span></a> <span class="s2">&quot;YEAR&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">Year</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">TsOrDsToDate</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="Hive-270"><a href="#Hive-270"><span class="linenos">270</span></a> <span class="p">}</span>
+</span><span id="Hive-271"><a href="#Hive-271"><span class="linenos">271</span></a>
+</span><span id="Hive-272"><a href="#Hive-272"><span class="linenos">272</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-273"><a href="#Hive-273"><span class="linenos">273</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 class="c1"># type: ignore</span>
+</span><span id="Hive-274"><a href="#Hive-274"><span class="linenos">274</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">(</span>
+</span><span id="Hive-275"><a href="#Hive-275"><span class="linenos">275</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_property</span><span class="p">)</span>
+</span><span id="Hive-276"><a href="#Hive-276"><span class="linenos">276</span></a> <span class="p">),</span>
+</span><span id="Hive-277"><a href="#Hive-277"><span class="linenos">277</span></a> <span class="p">}</span>
+</span><span id="Hive-278"><a href="#Hive-278"><span class="linenos">278</span></a>
+</span><span id="Hive-279"><a href="#Hive-279"><span class="linenos">279</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="Hive-280"><a href="#Hive-280"><span class="linenos">280</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="Hive-281"><a href="#Hive-281"><span class="linenos">281</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-282"><a href="#Hive-282"><span class="linenos">282</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive-283"><a href="#Hive-283"><span class="linenos">283</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-284"><a href="#Hive-284"><span class="linenos">284</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive-285"><a href="#Hive-285"><span class="linenos">285</span></a>
+</span><span id="Hive-286"><a href="#Hive-286"><span class="linenos">286</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-287"><a href="#Hive-287"><span class="linenos">287</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive-288"><a href="#Hive-288"><span class="linenos">288</span></a> <span class="n">exp</span><span 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="Hive-289"><a href="#Hive-289"><span class="linenos">289</span></a> <span class="n">exp</span><span 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="Hive-290"><a href="#Hive-290"><span class="linenos">290</span></a> <span class="n">exp</span><span 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;BINARY&quot;</span><span class="p">,</span>
+</span><span id="Hive-291"><a href="#Hive-291"><span class="linenos">291</span></a> <span class="n">exp</span><span 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="Hive-292"><a href="#Hive-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIT</span><span class="p">:</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span>
+</span><span id="Hive-293"><a href="#Hive-293"><span class="linenos">293</span></a> <span class="p">}</span>
+</span><span id="Hive-294"><a href="#Hive-294"><span class="linenos">294</span></a>
+</span><span id="Hive-295"><a href="#Hive-295"><span class="linenos">295</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-296"><a href="#Hive-296"><span class="linenos">296</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive-297"><a href="#Hive-297"><span class="linenos">297</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="Hive-298"><a href="#Hive-298"><span class="linenos">298</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="Hive-299"><a href="#Hive-299"><span class="linenos">299</span></a> <span class="p">[</span>
+</span><span id="Hive-300"><a href="#Hive-300"><span class="linenos">300</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="Hive-301"><a href="#Hive-301"><span class="linenos">301</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="Hive-302"><a href="#Hive-302"><span class="linenos">302</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</span><span class="p">,</span>
+</span><span id="Hive-303"><a href="#Hive-303"><span class="linenos">303</span></a> <span class="p">]</span>
+</span><span id="Hive-304"><a href="#Hive-304"><span class="linenos">304</span></a> <span class="p">),</span>
+</span><span id="Hive-305"><a href="#Hive-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">_property_sql</span><span class="p">,</span>
+</span><span id="Hive-306"><a href="#Hive-306"><span class="linenos">306</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="Hive-307"><a href="#Hive-307"><span class="linenos">307</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="Hive-308"><a href="#Hive-308"><span class="linenos">308</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;SIZE&quot;</span><span class="p">),</span>
+</span><span id="Hive-309"><a href="#Hive-309"><span class="linenos">309</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="Hive-310"><a href="#Hive-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">no_recursive_cte_sql</span><span class="p">,</span>
+</span><span id="Hive-311"><a href="#Hive-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
+</span><span id="Hive-312"><a href="#Hive-312"><span class="linenos">312</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="Hive-313"><a href="#Hive-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="Hive-314"><a href="#Hive-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
+</span><span id="Hive-315"><a href="#Hive-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">Hive</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="Hive-316"><a href="#Hive-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), </span><span class="si">{</span><span class="n">Hive</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Hive-317"><a href="#Hive-317"><span class="linenos">317</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;STORED 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">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </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">&quot;</span><span class="p">,</span>
+</span><span id="Hive-318"><a href="#Hive-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 class="n">if_sql</span><span class="p">,</span>
+</span><span id="Hive-319"><a href="#Hive-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">:</span> <span class="n">_index_sql</span><span class="p">,</span>
+</span><span id="Hive-320"><a href="#Hive-320"><span class="linenos">320</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="Hive-321"><a href="#Hive-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
+</span><span id="Hive-322"><a href="#Hive-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
+</span><span id="Hive-323"><a href="#Hive-323"><span class="linenos">323</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="Hive-324"><a href="#Hive-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
+</span><span id="Hive-325"><a href="#Hive-325"><span class="linenos">325</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="Hive-326"><a href="#Hive-326"><span class="linenos">326</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="Hive-327"><a href="#Hive-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
+</span><span id="Hive-328"><a href="#Hive-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
+</span><span id="Hive-329"><a href="#Hive-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE&quot;</span><span class="p">),</span>
+</span><span id="Hive-330"><a href="#Hive-330"><span class="linenos">330</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;PERCENTILE_APPROX&quot;</span><span class="p">),</span>
+</span><span id="Hive-331"><a href="#Hive-331"><span class="linenos">331</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;RLIKE&quot;</span><span class="p">),</span>
+</span><span id="Hive-332"><a href="#Hive-332"><span class="linenos">332</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;SPLIT&quot;</span><span class="p">),</span>
+</span><span id="Hive-333"><a href="#Hive-333"><span class="linenos">333</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="Hive-334"><a href="#Hive-334"><span class="linenos">334</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="Hive-335"><a href="#Hive-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">),</span>
+</span><span id="Hive-336"><a href="#Hive-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span 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;SPLIT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, CONCAT(&#39;</span><span class="se">\\\\</span><span class="s2">Q&#39;, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="Hive-337"><a href="#Hive-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
+</span><span id="Hive-338"><a href="#Hive-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date_sql</span><span class="p">,</span>
+</span><span id="Hive-339"><a href="#Hive-339"><span class="linenos">339</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="Hive-340"><a href="#Hive-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="n">_str_to_unix_sql</span><span class="p">,</span>
+</span><span id="Hive-341"><a href="#Hive-341"><span class="linenos">341</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="Hive-342"><a href="#Hive-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;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">e</span><span class="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="Hive-343"><a href="#Hive-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="Hive-344"><a href="#Hive-344"><span class="linenos">344</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="Hive-345"><a href="#Hive-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Hive-346"><a href="#Hive-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_time_to_str</span><span class="p">,</span>
+</span><span id="Hive-347"><a href="#Hive-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Hive-348"><a href="#Hive-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Hive-349"><a href="#Hive-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive-350"><a href="#Hive-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_to_date_sql</span><span class="p">,</span>
+</span><span id="Hive-351"><a href="#Hive-351"><span class="linenos">351</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="Hive-352"><a href="#Hive-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Hive-353"><a href="#Hive-353"><span class="linenos">353</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">_time_format</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="Hive-354"><a href="#Hive-354"><span class="linenos">354</span></a> <span class="p">),</span>
+</span><span id="Hive-355"><a href="#Hive-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Hive-356"><a href="#Hive-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Hive-357"><a href="#Hive-357"><span class="linenos">357</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;PARTITIONED 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="Hive-358"><a href="#Hive-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span 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;ROW FORMAT SERDE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive-359"><a href="#Hive-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">),</span>
+</span><span id="Hive-360"><a href="#Hive-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FORMAT_NUMBER&quot;</span><span class="p">),</span>
+</span><span id="Hive-361"><a href="#Hive-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LAST_DAY&quot;</span><span class="p">),</span>
+</span><span id="Hive-362"><a href="#Hive-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="Hive-363"><a href="#Hive-363"><span class="linenos">363</span></a> <span class="p">}</span>
+</span><span id="Hive-364"><a href="#Hive-364"><span class="linenos">364</span></a>
+</span><span id="Hive-365"><a href="#Hive-365"><span class="linenos">365</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive-366"><a href="#Hive-366"><span class="linenos">366</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive-367"><a href="#Hive-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_SCHEMA</span><span class="p">,</span>
+</span><span id="Hive-368"><a href="#Hive-368"><span class="linenos">368</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="Hive-369"><a href="#Hive-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="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="Hive-370"><a href="#Hive-370"><span class="linenos">370</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="Hive-371"><a href="#Hive-371"><span class="linenos">371</span></a> <span class="p">}</span>
+</span><span id="Hive-372"><a href="#Hive-372"><span class="linenos">372</span></a>
+</span><span id="Hive-373"><a href="#Hive-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive-374"><a href="#Hive-374"><span class="linenos">374</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="Hive-375"><a href="#Hive-375"><span class="linenos">375</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="Hive-376"><a href="#Hive-376"><span class="linenos">376</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Hive-377"><a href="#Hive-377"><span class="linenos">377</span></a> <span class="p">)</span>
+</span><span id="Hive-378"><a href="#Hive-378"><span class="linenos">378</span></a>
+</span><span id="Hive-379"><a href="#Hive-379"><span class="linenos">379</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="Hive-380"><a href="#Hive-380"><span class="linenos">380</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><span id="Hive-381"><a href="#Hive-381"><span class="linenos">381</span></a> <span class="n">properties</span><span class="p">,</span>
+</span><span id="Hive-382"><a href="#Hive-382"><span class="linenos">382</span></a> <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;TBLPROPERTIES&quot;</span><span class="p">),</span>
+</span><span id="Hive-383"><a href="#Hive-383"><span class="linenos">383</span></a> <span class="p">)</span>
+</span><span id="Hive-384"><a href="#Hive-384"><span class="linenos">384</span></a>
+</span><span id="Hive-385"><a href="#Hive-385"><span class="linenos">385</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="Hive-386"><a href="#Hive-386"><span class="linenos">386</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Hive-387"><a href="#Hive-387"><span class="linenos">387</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="Hive-388"><a href="#Hive-388"><span class="linenos">388</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Hive-389"><a href="#Hive-389"><span class="linenos">389</span></a> <span class="p">):</span>
+</span><span id="Hive-390"><a href="#Hive-390"><span class="linenos">390</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="s2">&quot;text&quot;</span><span class="p">)</span>
+</span><span id="Hive-391"><a href="#Hive-391"><span class="linenos">391</span></a> <span class="k">elif</span> <span class="n">expression</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="Hive-392"><a href="#Hive-392"><span class="linenos">392</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Hive-393"><a href="#Hive-393"><span class="linenos">393</span></a>
+</span><span id="Hive-394"><a href="#Hive-394"><span class="linenos">394</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>
@@ -746,33 +765,33 @@
</div>
<a class="headerlink" href="#Hive.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Tokenizer-183"><a href="#Hive.Tokenizer-183"><span class="linenos">183</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="Hive.Tokenizer-184"><a href="#Hive.Tokenizer-184"><span class="linenos">184</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
-</span><span id="Hive.Tokenizer-185"><a href="#Hive.Tokenizer-185"><span class="linenos">185</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
-</span><span id="Hive.Tokenizer-186"><a href="#Hive.Tokenizer-186"><span class="linenos">186</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><span id="Hive.Tokenizer-187"><a href="#Hive.Tokenizer-187"><span class="linenos">187</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
-</span><span id="Hive.Tokenizer-188"><a href="#Hive.Tokenizer-188"><span class="linenos">188</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive.Tokenizer-189"><a href="#Hive.Tokenizer-189"><span class="linenos">189</span></a>
-</span><span id="Hive.Tokenizer-190"><a href="#Hive.Tokenizer-190"><span class="linenos">190</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Tokenizer-191"><a href="#Hive.Tokenizer-191"><span class="linenos">191</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="Hive.Tokenizer-192"><a href="#Hive.Tokenizer-192"><span class="linenos">192</span></a> <span class="s2">&quot;ADD ARCHIVE&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="Hive.Tokenizer-193"><a href="#Hive.Tokenizer-193"><span class="linenos">193</span></a> <span class="s2">&quot;ADD ARCHIVES&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="Hive.Tokenizer-194"><a href="#Hive.Tokenizer-194"><span class="linenos">194</span></a> <span class="s2">&quot;ADD FILE&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="Hive.Tokenizer-195"><a href="#Hive.Tokenizer-195"><span class="linenos">195</span></a> <span class="s2">&quot;ADD FILES&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="Hive.Tokenizer-196"><a href="#Hive.Tokenizer-196"><span class="linenos">196</span></a> <span class="s2">&quot;ADD JAR&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="Hive.Tokenizer-197"><a href="#Hive.Tokenizer-197"><span class="linenos">197</span></a> <span class="s2">&quot;ADD JARS&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="Hive.Tokenizer-198"><a href="#Hive.Tokenizer-198"><span class="linenos">198</span></a> <span class="s2">&quot;MSCK REPAIR&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="Hive.Tokenizer-199"><a href="#Hive.Tokenizer-199"><span class="linenos">199</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">,</span>
-</span><span id="Hive.Tokenizer-200"><a href="#Hive.Tokenizer-200"><span class="linenos">200</span></a> <span class="p">}</span>
-</span><span id="Hive.Tokenizer-201"><a href="#Hive.Tokenizer-201"><span class="linenos">201</span></a>
-</span><span id="Hive.Tokenizer-202"><a href="#Hive.Tokenizer-202"><span class="linenos">202</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Tokenizer-203"><a href="#Hive.Tokenizer-203"><span class="linenos">203</span></a> <span class="s2">&quot;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&quot;</span><span class="p">,</span>
-</span><span id="Hive.Tokenizer-204"><a href="#Hive.Tokenizer-204"><span class="linenos">204</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="Hive.Tokenizer-205"><a href="#Hive.Tokenizer-205"><span class="linenos">205</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;TINYINT&quot;</span><span class="p">,</span>
-</span><span id="Hive.Tokenizer-206"><a href="#Hive.Tokenizer-206"><span class="linenos">206</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">,</span>
-</span><span id="Hive.Tokenizer-207"><a href="#Hive.Tokenizer-207"><span class="linenos">207</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;FLOAT&quot;</span><span class="p">,</span>
-</span><span id="Hive.Tokenizer-208"><a href="#Hive.Tokenizer-208"><span class="linenos">208</span></a> <span class="s2">&quot;BD&quot;</span><span class="p">:</span> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">,</span>
-</span><span id="Hive.Tokenizer-209"><a href="#Hive.Tokenizer-209"><span class="linenos">209</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Tokenizer-196"><a href="#Hive.Tokenizer-196"><span class="linenos">196</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="Hive.Tokenizer-197"><a href="#Hive.Tokenizer-197"><span class="linenos">197</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">]</span>
+</span><span id="Hive.Tokenizer-198"><a href="#Hive.Tokenizer-198"><span class="linenos">198</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;`&quot;</span><span class="p">]</span>
+</span><span id="Hive.Tokenizer-199"><a href="#Hive.Tokenizer-199"><span class="linenos">199</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><span id="Hive.Tokenizer-200"><a href="#Hive.Tokenizer-200"><span class="linenos">200</span></a> <span class="n">ENCODE</span> <span class="o">=</span> <span class="s2">&quot;utf-8&quot;</span>
+</span><span id="Hive.Tokenizer-201"><a href="#Hive.Tokenizer-201"><span class="linenos">201</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive.Tokenizer-202"><a href="#Hive.Tokenizer-202"><span class="linenos">202</span></a>
+</span><span id="Hive.Tokenizer-203"><a href="#Hive.Tokenizer-203"><span class="linenos">203</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Tokenizer-204"><a href="#Hive.Tokenizer-204"><span class="linenos">204</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="Hive.Tokenizer-205"><a href="#Hive.Tokenizer-205"><span class="linenos">205</span></a> <span class="s2">&quot;ADD ARCHIVE&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="Hive.Tokenizer-206"><a href="#Hive.Tokenizer-206"><span class="linenos">206</span></a> <span class="s2">&quot;ADD ARCHIVES&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="Hive.Tokenizer-207"><a href="#Hive.Tokenizer-207"><span class="linenos">207</span></a> <span class="s2">&quot;ADD FILE&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="Hive.Tokenizer-208"><a href="#Hive.Tokenizer-208"><span class="linenos">208</span></a> <span class="s2">&quot;ADD FILES&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="Hive.Tokenizer-209"><a href="#Hive.Tokenizer-209"><span class="linenos">209</span></a> <span class="s2">&quot;ADD JAR&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="Hive.Tokenizer-210"><a href="#Hive.Tokenizer-210"><span class="linenos">210</span></a> <span class="s2">&quot;ADD JARS&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="Hive.Tokenizer-211"><a href="#Hive.Tokenizer-211"><span class="linenos">211</span></a> <span class="s2">&quot;MSCK REPAIR&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="Hive.Tokenizer-212"><a href="#Hive.Tokenizer-212"><span class="linenos">212</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-213"><a href="#Hive.Tokenizer-213"><span class="linenos">213</span></a> <span class="p">}</span>
+</span><span id="Hive.Tokenizer-214"><a href="#Hive.Tokenizer-214"><span class="linenos">214</span></a>
+</span><span id="Hive.Tokenizer-215"><a href="#Hive.Tokenizer-215"><span class="linenos">215</span></a> <span class="n">NUMERIC_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Tokenizer-216"><a href="#Hive.Tokenizer-216"><span class="linenos">216</span></a> <span class="s2">&quot;L&quot;</span><span class="p">:</span> <span class="s2">&quot;BIGINT&quot;</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-217"><a href="#Hive.Tokenizer-217"><span class="linenos">217</span></a> <span class="s2">&quot;S&quot;</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-218"><a href="#Hive.Tokenizer-218"><span class="linenos">218</span></a> <span class="s2">&quot;Y&quot;</span><span class="p">:</span> <span class="s2">&quot;TINYINT&quot;</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-219"><a href="#Hive.Tokenizer-219"><span class="linenos">219</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-220"><a href="#Hive.Tokenizer-220"><span class="linenos">220</span></a> <span class="s2">&quot;F&quot;</span><span class="p">:</span> <span class="s2">&quot;FLOAT&quot;</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-221"><a href="#Hive.Tokenizer-221"><span class="linenos">221</span></a> <span class="s2">&quot;BD&quot;</span><span class="p">:</span> <span class="s2">&quot;DECIMAL&quot;</span><span class="p">,</span>
+</span><span id="Hive.Tokenizer-222"><a href="#Hive.Tokenizer-222"><span class="linenos">222</span></a> <span class="p">}</span>
</span></pre></div>
@@ -800,60 +819,60 @@
</div>
<a class="headerlink" href="#Hive.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Parser-211"><a href="#Hive.Parser-211"><span class="linenos">211</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="Hive.Parser-212"><a href="#Hive.Parser-212"><span class="linenos">212</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive.Parser-213"><a href="#Hive.Parser-213"><span class="linenos">213</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Parser-214"><a href="#Hive.Parser-214"><span class="linenos">214</span></a>
-</span><span id="Hive.Parser-215"><a href="#Hive.Parser-215"><span class="linenos">215</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Parser-216"><a href="#Hive.Parser-216"><span class="linenos">216</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive.Parser-217"><a href="#Hive.Parser-217"><span class="linenos">217</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-218"><a href="#Hive.Parser-218"><span class="linenos">218</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-219"><a href="#Hive.Parser-219"><span class="linenos">219</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">TsOrDsAdd</span><span class="p">(</span>
-</span><span id="Hive.Parser-220"><a href="#Hive.Parser-220"><span class="linenos">220</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="Hive.Parser-221"><a href="#Hive.Parser-221"><span class="linenos">221</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="Hive.Parser-222"><a href="#Hive.Parser-222"><span class="linenos">222</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Hive.Parser-223"><a href="#Hive.Parser-223"><span class="linenos">223</span></a> <span class="p">),</span>
-</span><span id="Hive.Parser-224"><a href="#Hive.Parser-224"><span class="linenos">224</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="Hive.Parser-225"><a href="#Hive.Parser-225"><span class="linenos">225</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Hive.Parser-226"><a href="#Hive.Parser-226"><span class="linenos">226</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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">1</span><span class="p">)),</span>
-</span><span id="Hive.Parser-227"><a href="#Hive.Parser-227"><span class="linenos">227</span></a> <span class="p">),</span>
-</span><span id="Hive.Parser-228"><a href="#Hive.Parser-228"><span class="linenos">228</span></a> <span class="s2">&quot;DATE_SUB&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="Hive.Parser-229"><a href="#Hive.Parser-229"><span class="linenos">229</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="Hive.Parser-230"><a href="#Hive.Parser-230"><span class="linenos">230</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span>
-</span><span id="Hive.Parser-231"><a href="#Hive.Parser-231"><span class="linenos">231</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Hive.Parser-232"><a href="#Hive.Parser-232"><span class="linenos">232</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span>
-</span><span id="Hive.Parser-233"><a href="#Hive.Parser-233"><span class="linenos">233</span></a> <span class="p">),</span>
-</span><span id="Hive.Parser-234"><a href="#Hive.Parser-234"><span class="linenos">234</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
-</span><span id="Hive.Parser-235"><a href="#Hive.Parser-235"><span class="linenos">235</span></a> <span class="p">),</span>
-</span><span id="Hive.Parser-236"><a href="#Hive.Parser-236"><span class="linenos">236</span></a> <span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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;hive&quot;</span><span class="p">)(</span>
-</span><span id="Hive.Parser-237"><a href="#Hive.Parser-237"><span class="linenos">237</span></a> <span class="p">[</span>
-</span><span id="Hive.Parser-238"><a href="#Hive.Parser-238"><span class="linenos">238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</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="Hive.Parser-239"><a href="#Hive.Parser-239"><span class="linenos">239</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Hive.Parser-240"><a href="#Hive.Parser-240"><span class="linenos">240</span></a> <span class="p">]</span>
-</span><span id="Hive.Parser-241"><a href="#Hive.Parser-241"><span class="linenos">241</span></a> <span class="p">),</span>
-</span><span id="Hive.Parser-242"><a href="#Hive.Parser-242"><span class="linenos">242</span></a> <span class="s2">&quot;DAY&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">Day</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">TsOrDsToDate</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="Hive.Parser-243"><a href="#Hive.Parser-243"><span class="linenos">243</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">UnixToStr</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
-</span><span id="Hive.Parser-244"><a href="#Hive.Parser-244"><span class="linenos">244</span></a> <span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-245"><a href="#Hive.Parser-245"><span class="linenos">245</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="n">locate_to_strposition</span><span class="p">,</span>
-</span><span id="Hive.Parser-246"><a href="#Hive.Parser-246"><span class="linenos">246</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="Hive.Parser-247"><a href="#Hive.Parser-247"><span class="linenos">247</span></a> <span class="s2">&quot;MONTH&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">Month</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">TsOrDsToDate</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="Hive.Parser-248"><a href="#Hive.Parser-248"><span class="linenos">248</span></a> <span class="s2">&quot;PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-249"><a href="#Hive.Parser-249"><span class="linenos">249</span></a> <span class="s2">&quot;PERCENTILE_APPROX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-250"><a href="#Hive.Parser-250"><span class="linenos">250</span></a> <span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-251"><a href="#Hive.Parser-251"><span class="linenos">251</span></a> <span class="s2">&quot;SIZE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-252"><a href="#Hive.Parser-252"><span class="linenos">252</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-253"><a href="#Hive.Parser-253"><span class="linenos">253</span></a> <span class="s2">&quot;TO_DATE&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">TsOrDsToDate</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">),</span>
-</span><span id="Hive.Parser-254"><a href="#Hive.Parser-254"><span class="linenos">254</span></a> <span class="s2">&quot;TO_JSON&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Hive.Parser-255"><a href="#Hive.Parser-255"><span class="linenos">255</span></a> <span class="s2">&quot;UNIX_TIMESTAMP&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">StrToUnix</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
-</span><span id="Hive.Parser-256"><a href="#Hive.Parser-256"><span class="linenos">256</span></a> <span class="s2">&quot;YEAR&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">Year</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">TsOrDsToDate</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="Hive.Parser-257"><a href="#Hive.Parser-257"><span class="linenos">257</span></a> <span class="p">}</span>
-</span><span id="Hive.Parser-258"><a href="#Hive.Parser-258"><span class="linenos">258</span></a>
-</span><span id="Hive.Parser-259"><a href="#Hive.Parser-259"><span class="linenos">259</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Parser-260"><a href="#Hive.Parser-260"><span class="linenos">260</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 class="c1"># type: ignore</span>
-</span><span id="Hive.Parser-261"><a href="#Hive.Parser-261"><span class="linenos">261</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">(</span>
-</span><span id="Hive.Parser-262"><a href="#Hive.Parser-262"><span class="linenos">262</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_property</span><span class="p">)</span>
-</span><span id="Hive.Parser-263"><a href="#Hive.Parser-263"><span class="linenos">263</span></a> <span class="p">),</span>
-</span><span id="Hive.Parser-264"><a href="#Hive.Parser-264"><span class="linenos">264</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Parser-224"><a href="#Hive.Parser-224"><span class="linenos">224</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="Hive.Parser-225"><a href="#Hive.Parser-225"><span class="linenos">225</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive.Parser-226"><a href="#Hive.Parser-226"><span class="linenos">226</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Parser-227"><a href="#Hive.Parser-227"><span class="linenos">227</span></a>
+</span><span id="Hive.Parser-228"><a href="#Hive.Parser-228"><span class="linenos">228</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Parser-229"><a href="#Hive.Parser-229"><span class="linenos">229</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive.Parser-230"><a href="#Hive.Parser-230"><span class="linenos">230</span></a> <span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-231"><a href="#Hive.Parser-231"><span class="linenos">231</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-232"><a href="#Hive.Parser-232"><span class="linenos">232</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">TsOrDsAdd</span><span class="p">(</span>
+</span><span id="Hive.Parser-233"><a href="#Hive.Parser-233"><span class="linenos">233</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="Hive.Parser-234"><a href="#Hive.Parser-234"><span class="linenos">234</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="Hive.Parser-235"><a href="#Hive.Parser-235"><span class="linenos">235</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Hive.Parser-236"><a href="#Hive.Parser-236"><span class="linenos">236</span></a> <span class="p">),</span>
+</span><span id="Hive.Parser-237"><a href="#Hive.Parser-237"><span class="linenos">237</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="Hive.Parser-238"><a href="#Hive.Parser-238"><span class="linenos">238</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Hive.Parser-239"><a href="#Hive.Parser-239"><span class="linenos">239</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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">1</span><span class="p">)),</span>
+</span><span id="Hive.Parser-240"><a href="#Hive.Parser-240"><span class="linenos">240</span></a> <span class="p">),</span>
+</span><span id="Hive.Parser-241"><a href="#Hive.Parser-241"><span class="linenos">241</span></a> <span class="s2">&quot;DATE_SUB&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="Hive.Parser-242"><a href="#Hive.Parser-242"><span class="linenos">242</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="Hive.Parser-243"><a href="#Hive.Parser-243"><span class="linenos">243</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">(</span>
+</span><span id="Hive.Parser-244"><a href="#Hive.Parser-244"><span class="linenos">244</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Hive.Parser-245"><a href="#Hive.Parser-245"><span class="linenos">245</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span>
+</span><span id="Hive.Parser-246"><a href="#Hive.Parser-246"><span class="linenos">246</span></a> <span class="p">),</span>
+</span><span id="Hive.Parser-247"><a href="#Hive.Parser-247"><span class="linenos">247</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;DAY&quot;</span><span class="p">),</span>
+</span><span id="Hive.Parser-248"><a href="#Hive.Parser-248"><span class="linenos">248</span></a> <span class="p">),</span>
+</span><span id="Hive.Parser-249"><a href="#Hive.Parser-249"><span class="linenos">249</span></a> <span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</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;hive&quot;</span><span class="p">)(</span>
+</span><span id="Hive.Parser-250"><a href="#Hive.Parser-250"><span class="linenos">250</span></a> <span class="p">[</span>
+</span><span id="Hive.Parser-251"><a href="#Hive.Parser-251"><span class="linenos">251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</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="Hive.Parser-252"><a href="#Hive.Parser-252"><span class="linenos">252</span></a> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Hive.Parser-253"><a href="#Hive.Parser-253"><span class="linenos">253</span></a> <span class="p">]</span>
+</span><span id="Hive.Parser-254"><a href="#Hive.Parser-254"><span class="linenos">254</span></a> <span class="p">),</span>
+</span><span id="Hive.Parser-255"><a href="#Hive.Parser-255"><span class="linenos">255</span></a> <span class="s2">&quot;DAY&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">Day</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">TsOrDsToDate</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="Hive.Parser-256"><a href="#Hive.Parser-256"><span class="linenos">256</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">UnixToStr</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="Hive.Parser-257"><a href="#Hive.Parser-257"><span class="linenos">257</span></a> <span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-258"><a href="#Hive.Parser-258"><span class="linenos">258</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="n">locate_to_strposition</span><span class="p">,</span>
+</span><span id="Hive.Parser-259"><a href="#Hive.Parser-259"><span class="linenos">259</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="Hive.Parser-260"><a href="#Hive.Parser-260"><span class="linenos">260</span></a> <span class="s2">&quot;MONTH&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">Month</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">TsOrDsToDate</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="Hive.Parser-261"><a href="#Hive.Parser-261"><span class="linenos">261</span></a> <span class="s2">&quot;PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-262"><a href="#Hive.Parser-262"><span class="linenos">262</span></a> <span class="s2">&quot;PERCENTILE_APPROX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-263"><a href="#Hive.Parser-263"><span class="linenos">263</span></a> <span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-264"><a href="#Hive.Parser-264"><span class="linenos">264</span></a> <span class="s2">&quot;SIZE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-265"><a href="#Hive.Parser-265"><span class="linenos">265</span></a> <span class="s2">&quot;SPLIT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpSplit</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-266"><a href="#Hive.Parser-266"><span class="linenos">266</span></a> <span class="s2">&quot;TO_DATE&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">TsOrDsToDate</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">),</span>
+</span><span id="Hive.Parser-267"><a href="#Hive.Parser-267"><span class="linenos">267</span></a> <span class="s2">&quot;TO_JSON&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Hive.Parser-268"><a href="#Hive.Parser-268"><span class="linenos">268</span></a> <span class="s2">&quot;UNIX_TIMESTAMP&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">StrToUnix</span><span class="p">,</span> <span class="s2">&quot;hive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="Hive.Parser-269"><a href="#Hive.Parser-269"><span class="linenos">269</span></a> <span class="s2">&quot;YEAR&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">Year</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">TsOrDsToDate</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="Hive.Parser-270"><a href="#Hive.Parser-270"><span class="linenos">270</span></a> <span class="p">}</span>
+</span><span id="Hive.Parser-271"><a href="#Hive.Parser-271"><span class="linenos">271</span></a>
+</span><span id="Hive.Parser-272"><a href="#Hive.Parser-272"><span class="linenos">272</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Parser-273"><a href="#Hive.Parser-273"><span class="linenos">273</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 class="c1"># type: ignore</span>
+</span><span id="Hive.Parser-274"><a href="#Hive.Parser-274"><span class="linenos">274</span></a> <span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">(</span>
+</span><span id="Hive.Parser-275"><a href="#Hive.Parser-275"><span class="linenos">275</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_property</span><span class="p">)</span>
+</span><span id="Hive.Parser-276"><a href="#Hive.Parser-276"><span class="linenos">276</span></a> <span class="p">),</span>
+</span><span id="Hive.Parser-277"><a href="#Hive.Parser-277"><span class="linenos">277</span></a> <span class="p">}</span>
</span></pre></div>
@@ -910,119 +929,122 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Hive.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator-266"><a href="#Hive.Generator-266"><span class="linenos">266</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="Hive.Generator-267"><a href="#Hive.Generator-267"><span class="linenos">267</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="Hive.Generator-268"><a href="#Hive.Generator-268"><span class="linenos">268</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-269"><a href="#Hive.Generator-269"><span class="linenos">269</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Hive.Generator-270"><a href="#Hive.Generator-270"><span class="linenos">270</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-271"><a href="#Hive.Generator-271"><span class="linenos">271</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Hive.Generator-272"><a href="#Hive.Generator-272"><span class="linenos">272</span></a>
-</span><span id="Hive.Generator-273"><a href="#Hive.Generator-273"><span class="linenos">273</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Generator-274"><a href="#Hive.Generator-274"><span class="linenos">274</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive.Generator-275"><a href="#Hive.Generator-275"><span class="linenos">275</span></a> <span class="n">exp</span><span 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="Hive.Generator-276"><a href="#Hive.Generator-276"><span class="linenos">276</span></a> <span class="n">exp</span><span 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="Hive.Generator-277"><a href="#Hive.Generator-277"><span class="linenos">277</span></a> <span class="n">exp</span><span 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;BINARY&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-278"><a href="#Hive.Generator-278"><span class="linenos">278</span></a> <span class="n">exp</span><span 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="Hive.Generator-279"><a href="#Hive.Generator-279"><span class="linenos">279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIT</span><span class="p">:</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-280"><a href="#Hive.Generator-280"><span class="linenos">280</span></a> <span class="p">}</span>
-</span><span id="Hive.Generator-281"><a href="#Hive.Generator-281"><span class="linenos">281</span></a>
-</span><span id="Hive.Generator-282"><a href="#Hive.Generator-282"><span class="linenos">282</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Generator-283"><a href="#Hive.Generator-283"><span class="linenos">283</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive.Generator-284"><a href="#Hive.Generator-284"><span class="linenos">284</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive.Generator-285"><a href="#Hive.Generator-285"><span class="linenos">285</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive.Generator-286"><a href="#Hive.Generator-286"><span class="linenos">286</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="Hive.Generator-287"><a href="#Hive.Generator-287"><span class="linenos">287</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</span><span class="p">]</span>
-</span><span id="Hive.Generator-288"><a href="#Hive.Generator-288"><span class="linenos">288</span></a> <span class="p">),</span>
-</span><span id="Hive.Generator-289"><a href="#Hive.Generator-289"><span class="linenos">289</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">_property_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-290"><a href="#Hive.Generator-290"><span class="linenos">290</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="Hive.Generator-291"><a href="#Hive.Generator-291"><span class="linenos">291</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="Hive.Generator-292"><a href="#Hive.Generator-292"><span class="linenos">292</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;SIZE&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-293"><a href="#Hive.Generator-293"><span class="linenos">293</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</span><span class="p">,</span>
-</span><span id="Hive.Generator-294"><a href="#Hive.Generator-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">no_recursive_cte_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-295"><a href="#Hive.Generator-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-296"><a href="#Hive.Generator-296"><span class="linenos">296</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="Hive.Generator-297"><a href="#Hive.Generator-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-298"><a href="#Hive.Generator-298"><span class="linenos">298</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-299"><a href="#Hive.Generator-299"><span class="linenos">299</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">Hive</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="Hive.Generator-300"><a href="#Hive.Generator-300"><span class="linenos">300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), </span><span class="si">{</span><span class="n">Hive</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-301"><a href="#Hive.Generator-301"><span class="linenos">301</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;STORED 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">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </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">&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-302"><a href="#Hive.Generator-302"><span class="linenos">302</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="Hive.Generator-303"><a href="#Hive.Generator-303"><span class="linenos">303</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">:</span> <span class="n">_index_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-304"><a href="#Hive.Generator-304"><span class="linenos">304</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="Hive.Generator-305"><a href="#Hive.Generator-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-306"><a href="#Hive.Generator-306"><span class="linenos">306</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-307"><a href="#Hive.Generator-307"><span class="linenos">307</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONFormat</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-308"><a href="#Hive.Generator-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-309"><a href="#Hive.Generator-309"><span class="linenos">309</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="Hive.Generator-310"><a href="#Hive.Generator-310"><span class="linenos">310</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="Hive.Generator-311"><a href="#Hive.Generator-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-312"><a href="#Hive.Generator-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-313"><a href="#Hive.Generator-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-314"><a href="#Hive.Generator-314"><span class="linenos">314</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;PERCENTILE_APPROX&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-315"><a href="#Hive.Generator-315"><span class="linenos">315</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;RLIKE&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-316"><a href="#Hive.Generator-316"><span class="linenos">316</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;SPLIT&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-317"><a href="#Hive.Generator-317"><span class="linenos">317</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="Hive.Generator-318"><a href="#Hive.Generator-318"><span class="linenos">318</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="Hive.Generator-319"><a href="#Hive.Generator-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-320"><a href="#Hive.Generator-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span 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;SPLIT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, CONCAT(&#39;</span><span class="se">\\\\</span><span class="s2">Q&#39;, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-321"><a href="#Hive.Generator-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-322"><a href="#Hive.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
-</span><span id="Hive.Generator-323"><a href="#Hive.Generator-323"><span class="linenos">323</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</span><span class="p">,</span>
-</span><span id="Hive.Generator-324"><a href="#Hive.Generator-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="n">_str_to_unix</span><span class="p">,</span>
-</span><span id="Hive.Generator-325"><a href="#Hive.Generator-325"><span class="linenos">325</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="Hive.Generator-326"><a href="#Hive.Generator-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;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">e</span><span class="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="Hive.Generator-327"><a href="#Hive.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-328"><a href="#Hive.Generator-328"><span class="linenos">328</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="Hive.Generator-329"><a href="#Hive.Generator-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-330"><a href="#Hive.Generator-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_time_to_str</span><span class="p">,</span>
-</span><span id="Hive.Generator-331"><a href="#Hive.Generator-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-332"><a href="#Hive.Generator-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-333"><a href="#Hive.Generator-333"><span class="linenos">333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive.Generator-334"><a href="#Hive.Generator-334"><span class="linenos">334</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_to_date_sql</span><span class="p">,</span>
-</span><span id="Hive.Generator-335"><a href="#Hive.Generator-335"><span class="linenos">335</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="Hive.Generator-336"><a href="#Hive.Generator-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Hive.Generator-337"><a href="#Hive.Generator-337"><span class="linenos">337</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">_time_format</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="Hive.Generator-338"><a href="#Hive.Generator-338"><span class="linenos">338</span></a> <span class="p">),</span>
-</span><span id="Hive.Generator-339"><a href="#Hive.Generator-339"><span class="linenos">339</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-340"><a href="#Hive.Generator-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-341"><a href="#Hive.Generator-341"><span class="linenos">341</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;PARTITIONED 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="Hive.Generator-342"><a href="#Hive.Generator-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span 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;ROW FORMAT SERDE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive.Generator-343"><a href="#Hive.Generator-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-344"><a href="#Hive.Generator-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FORMAT_NUMBER&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-345"><a href="#Hive.Generator-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LAST_DAY&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-346"><a href="#Hive.Generator-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-347"><a href="#Hive.Generator-347"><span class="linenos">347</span></a> <span class="p">}</span>
-</span><span id="Hive.Generator-348"><a href="#Hive.Generator-348"><span class="linenos">348</span></a>
-</span><span id="Hive.Generator-349"><a href="#Hive.Generator-349"><span class="linenos">349</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Hive.Generator-350"><a href="#Hive.Generator-350"><span class="linenos">350</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Hive.Generator-351"><a href="#Hive.Generator-351"><span class="linenos">351</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_SCHEMA</span><span class="p">,</span>
-</span><span id="Hive.Generator-352"><a href="#Hive.Generator-352"><span class="linenos">352</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="Hive.Generator-353"><a href="#Hive.Generator-353"><span class="linenos">353</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="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="Hive.Generator-354"><a href="#Hive.Generator-354"><span class="linenos">354</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="Hive.Generator-355"><a href="#Hive.Generator-355"><span class="linenos">355</span></a> <span class="p">}</span>
-</span><span id="Hive.Generator-356"><a href="#Hive.Generator-356"><span class="linenos">356</span></a>
-</span><span id="Hive.Generator-357"><a href="#Hive.Generator-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Hive.Generator-358"><a href="#Hive.Generator-358"><span class="linenos">358</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="Hive.Generator-359"><a href="#Hive.Generator-359"><span class="linenos">359</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator-360"><a href="#Hive.Generator-360"><span class="linenos">360</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Hive.Generator-361"><a href="#Hive.Generator-361"><span class="linenos">361</span></a> <span class="p">)</span>
-</span><span id="Hive.Generator-362"><a href="#Hive.Generator-362"><span class="linenos">362</span></a>
-</span><span id="Hive.Generator-363"><a href="#Hive.Generator-363"><span class="linenos">363</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="Hive.Generator-364"><a href="#Hive.Generator-364"><span class="linenos">364</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><span id="Hive.Generator-365"><a href="#Hive.Generator-365"><span class="linenos">365</span></a> <span class="n">properties</span><span class="p">,</span>
-</span><span id="Hive.Generator-366"><a href="#Hive.Generator-366"><span class="linenos">366</span></a> <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;TBLPROPERTIES&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator-367"><a href="#Hive.Generator-367"><span class="linenos">367</span></a> <span class="p">)</span>
-</span><span id="Hive.Generator-368"><a href="#Hive.Generator-368"><span class="linenos">368</span></a>
-</span><span id="Hive.Generator-369"><a href="#Hive.Generator-369"><span class="linenos">369</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="Hive.Generator-370"><a href="#Hive.Generator-370"><span class="linenos">370</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Hive.Generator-371"><a href="#Hive.Generator-371"><span class="linenos">371</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="Hive.Generator-372"><a href="#Hive.Generator-372"><span class="linenos">372</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Hive.Generator-373"><a href="#Hive.Generator-373"><span class="linenos">373</span></a> <span class="p">):</span>
-</span><span id="Hive.Generator-374"><a href="#Hive.Generator-374"><span class="linenos">374</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="s2">&quot;text&quot;</span><span class="p">)</span>
-</span><span id="Hive.Generator-375"><a href="#Hive.Generator-375"><span class="linenos">375</span></a> <span class="k">elif</span> <span class="n">expression</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="Hive.Generator-376"><a href="#Hive.Generator-376"><span class="linenos">376</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Hive.Generator-377"><a href="#Hive.Generator-377"><span class="linenos">377</span></a>
-</span><span id="Hive.Generator-378"><a href="#Hive.Generator-378"><span class="linenos">378</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="Hive.Generator-279"><a href="#Hive.Generator-279"><span class="linenos">279</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="Hive.Generator-280"><a href="#Hive.Generator-280"><span class="linenos">280</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="Hive.Generator-281"><a href="#Hive.Generator-281"><span class="linenos">281</span></a> <span class="n">TABLESAMPLE_WITH_METHOD</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-282"><a href="#Hive.Generator-282"><span class="linenos">282</span></a> <span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Hive.Generator-283"><a href="#Hive.Generator-283"><span class="linenos">283</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-284"><a href="#Hive.Generator-284"><span class="linenos">284</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Hive.Generator-285"><a href="#Hive.Generator-285"><span class="linenos">285</span></a>
+</span><span id="Hive.Generator-286"><a href="#Hive.Generator-286"><span class="linenos">286</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Generator-287"><a href="#Hive.Generator-287"><span class="linenos">287</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive.Generator-288"><a href="#Hive.Generator-288"><span class="linenos">288</span></a> <span class="n">exp</span><span 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="Hive.Generator-289"><a href="#Hive.Generator-289"><span class="linenos">289</span></a> <span class="n">exp</span><span 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="Hive.Generator-290"><a href="#Hive.Generator-290"><span class="linenos">290</span></a> <span class="n">exp</span><span 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;BINARY&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-291"><a href="#Hive.Generator-291"><span class="linenos">291</span></a> <span class="n">exp</span><span 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="Hive.Generator-292"><a href="#Hive.Generator-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIT</span><span class="p">:</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-293"><a href="#Hive.Generator-293"><span class="linenos">293</span></a> <span class="p">}</span>
+</span><span id="Hive.Generator-294"><a href="#Hive.Generator-294"><span class="linenos">294</span></a>
+</span><span id="Hive.Generator-295"><a href="#Hive.Generator-295"><span class="linenos">295</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Generator-296"><a href="#Hive.Generator-296"><span class="linenos">296</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive.Generator-297"><a href="#Hive.Generator-297"><span class="linenos">297</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="Hive.Generator-298"><a href="#Hive.Generator-298"><span class="linenos">298</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="Hive.Generator-299"><a href="#Hive.Generator-299"><span class="linenos">299</span></a> <span class="p">[</span>
+</span><span id="Hive.Generator-300"><a href="#Hive.Generator-300"><span class="linenos">300</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="Hive.Generator-301"><a href="#Hive.Generator-301"><span class="linenos">301</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="Hive.Generator-302"><a href="#Hive.Generator-302"><span class="linenos">302</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">unnest_to_explode</span><span class="p">,</span>
+</span><span id="Hive.Generator-303"><a href="#Hive.Generator-303"><span class="linenos">303</span></a> <span class="p">]</span>
+</span><span id="Hive.Generator-304"><a href="#Hive.Generator-304"><span class="linenos">304</span></a> <span class="p">),</span>
+</span><span id="Hive.Generator-305"><a href="#Hive.Generator-305"><span class="linenos">305</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">:</span> <span class="n">_property_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-306"><a href="#Hive.Generator-306"><span class="linenos">306</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="Hive.Generator-307"><a href="#Hive.Generator-307"><span class="linenos">307</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="Hive.Generator-308"><a href="#Hive.Generator-308"><span class="linenos">308</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;SIZE&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-309"><a href="#Hive.Generator-309"><span class="linenos">309</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="Hive.Generator-310"><a href="#Hive.Generator-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="n">no_recursive_cte_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-311"><a href="#Hive.Generator-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-312"><a href="#Hive.Generator-312"><span class="linenos">312</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="Hive.Generator-313"><a href="#Hive.Generator-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-314"><a href="#Hive.Generator-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateSub</span><span class="p">:</span> <span class="n">_add_date_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-315"><a href="#Hive.Generator-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">Hive</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="Hive.Generator-316"><a href="#Hive.Generator-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), </span><span class="si">{</span><span class="n">Hive</span><span class="o">.</span><span class="n">dateint_format</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-317"><a href="#Hive.Generator-317"><span class="linenos">317</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;STORED 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">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </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">&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-318"><a href="#Hive.Generator-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 class="n">if_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-319"><a href="#Hive.Generator-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">:</span> <span class="n">_index_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-320"><a href="#Hive.Generator-320"><span class="linenos">320</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="Hive.Generator-321"><a href="#Hive.Generator-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-322"><a href="#Hive.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GET_JSON_OBJECT&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-323"><a href="#Hive.Generator-323"><span class="linenos">323</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="Hive.Generator-324"><a href="#Hive.Generator-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-325"><a href="#Hive.Generator-325"><span class="linenos">325</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="Hive.Generator-326"><a href="#Hive.Generator-326"><span class="linenos">326</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="Hive.Generator-327"><a href="#Hive.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span> <span class="n">var_map_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-328"><a href="#Hive.Generator-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-329"><a href="#Hive.Generator-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Quantile</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;PERCENTILE&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-330"><a href="#Hive.Generator-330"><span class="linenos">330</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;PERCENTILE_APPROX&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-331"><a href="#Hive.Generator-331"><span class="linenos">331</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;RLIKE&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-332"><a href="#Hive.Generator-332"><span class="linenos">332</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;SPLIT&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-333"><a href="#Hive.Generator-333"><span class="linenos">333</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="Hive.Generator-334"><a href="#Hive.Generator-334"><span class="linenos">334</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="Hive.Generator-335"><a href="#Hive.Generator-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetAgg</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;COLLECT_SET&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-336"><a href="#Hive.Generator-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Split</span><span class="p">:</span> <span 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;SPLIT(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, CONCAT(&#39;</span><span class="se">\\\\</span><span class="s2">Q&#39;, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-337"><a href="#Hive.Generator-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-338"><a href="#Hive.Generator-338"><span class="linenos">338</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-339"><a href="#Hive.Generator-339"><span class="linenos">339</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="Hive.Generator-340"><a href="#Hive.Generator-340"><span class="linenos">340</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="n">_str_to_unix_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-341"><a href="#Hive.Generator-341"><span class="linenos">341</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="Hive.Generator-342"><a href="#Hive.Generator-342"><span class="linenos">342</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;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">e</span><span class="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="Hive.Generator-343"><a href="#Hive.Generator-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-344"><a href="#Hive.Generator-344"><span class="linenos">344</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="Hive.Generator-345"><a href="#Hive.Generator-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-346"><a href="#Hive.Generator-346"><span class="linenos">346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_time_to_str</span><span class="p">,</span>
+</span><span id="Hive.Generator-347"><a href="#Hive.Generator-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-348"><a href="#Hive.Generator-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS STRING), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-349"><a href="#Hive.Generator-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DATE_ADD(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive.Generator-350"><a href="#Hive.Generator-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">_to_date_sql</span><span class="p">,</span>
+</span><span id="Hive.Generator-351"><a href="#Hive.Generator-351"><span class="linenos">351</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="Hive.Generator-352"><a href="#Hive.Generator-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Hive.Generator-353"><a href="#Hive.Generator-353"><span class="linenos">353</span></a> <span class="s2">&quot;FROM_UNIXTIME&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">_time_format</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="Hive.Generator-354"><a href="#Hive.Generator-354"><span class="linenos">354</span></a> <span class="p">),</span>
+</span><span id="Hive.Generator-355"><a href="#Hive.Generator-355"><span class="linenos">355</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-356"><a href="#Hive.Generator-356"><span class="linenos">356</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTimeStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-357"><a href="#Hive.Generator-357"><span class="linenos">357</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;PARTITIONED 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="Hive.Generator-358"><a href="#Hive.Generator-358"><span class="linenos">358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span><span class="p">:</span> <span 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;ROW FORMAT SERDE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Hive.Generator-359"><a href="#Hive.Generator-359"><span class="linenos">359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;WITH SERDEPROPERTIES&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-360"><a href="#Hive.Generator-360"><span class="linenos">360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FORMAT_NUMBER&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-361"><a href="#Hive.Generator-361"><span class="linenos">361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LastDateOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;LAST_DAY&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-362"><a href="#Hive.Generator-362"><span class="linenos">362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-363"><a href="#Hive.Generator-363"><span class="linenos">363</span></a> <span class="p">}</span>
+</span><span id="Hive.Generator-364"><a href="#Hive.Generator-364"><span class="linenos">364</span></a>
+</span><span id="Hive.Generator-365"><a href="#Hive.Generator-365"><span class="linenos">365</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Hive.Generator-366"><a href="#Hive.Generator-366"><span class="linenos">366</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Hive.Generator-367"><a href="#Hive.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="n">exp</span><span class="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="Hive.Generator-368"><a href="#Hive.Generator-368"><span class="linenos">368</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="Hive.Generator-369"><a href="#Hive.Generator-369"><span class="linenos">369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span class="n">exp</span><span class="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="Hive.Generator-370"><a href="#Hive.Generator-370"><span class="linenos">370</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="Hive.Generator-371"><a href="#Hive.Generator-371"><span class="linenos">371</span></a> <span class="p">}</span>
+</span><span id="Hive.Generator-372"><a href="#Hive.Generator-372"><span class="linenos">372</span></a>
+</span><span id="Hive.Generator-373"><a href="#Hive.Generator-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive.Generator-374"><a href="#Hive.Generator-374"><span class="linenos">374</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="Hive.Generator-375"><a href="#Hive.Generator-375"><span class="linenos">375</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator-376"><a href="#Hive.Generator-376"><span class="linenos">376</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Hive.Generator-377"><a href="#Hive.Generator-377"><span class="linenos">377</span></a> <span class="p">)</span>
+</span><span id="Hive.Generator-378"><a href="#Hive.Generator-378"><span class="linenos">378</span></a>
+</span><span id="Hive.Generator-379"><a href="#Hive.Generator-379"><span class="linenos">379</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="Hive.Generator-380"><a href="#Hive.Generator-380"><span class="linenos">380</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><span id="Hive.Generator-381"><a href="#Hive.Generator-381"><span class="linenos">381</span></a> <span class="n">properties</span><span class="p">,</span>
+</span><span id="Hive.Generator-382"><a href="#Hive.Generator-382"><span class="linenos">382</span></a> <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;TBLPROPERTIES&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator-383"><a href="#Hive.Generator-383"><span class="linenos">383</span></a> <span class="p">)</span>
+</span><span id="Hive.Generator-384"><a href="#Hive.Generator-384"><span class="linenos">384</span></a>
+</span><span id="Hive.Generator-385"><a href="#Hive.Generator-385"><span class="linenos">385</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="Hive.Generator-386"><a href="#Hive.Generator-386"><span class="linenos">386</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Hive.Generator-387"><a href="#Hive.Generator-387"><span class="linenos">387</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="Hive.Generator-388"><a href="#Hive.Generator-388"><span class="linenos">388</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Hive.Generator-389"><a href="#Hive.Generator-389"><span class="linenos">389</span></a> <span class="p">):</span>
+</span><span id="Hive.Generator-390"><a href="#Hive.Generator-390"><span class="linenos">390</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="s2">&quot;text&quot;</span><span class="p">)</span>
+</span><span id="Hive.Generator-391"><a href="#Hive.Generator-391"><span class="linenos">391</span></a> <span class="k">elif</span> <span class="n">expression</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="Hive.Generator-392"><a href="#Hive.Generator-392"><span class="linenos">392</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Hive.Generator-393"><a href="#Hive.Generator-393"><span class="linenos">393</span></a>
+</span><span id="Hive.Generator-394"><a href="#Hive.Generator-394"><span class="linenos">394</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>
@@ -1081,11 +1103,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Hive.Generator.arrayagg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.arrayagg_sql-357"><a href="#Hive.Generator.arrayagg_sql-357"><span class="linenos">357</span></a> <span class="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Hive.Generator.arrayagg_sql-358"><a href="#Hive.Generator.arrayagg_sql-358"><span class="linenos">358</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="Hive.Generator.arrayagg_sql-359"><a href="#Hive.Generator.arrayagg_sql-359"><span class="linenos">359</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
-</span><span id="Hive.Generator.arrayagg_sql-360"><a href="#Hive.Generator.arrayagg_sql-360"><span class="linenos">360</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Hive.Generator.arrayagg_sql-361"><a href="#Hive.Generator.arrayagg_sql-361"><span class="linenos">361</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.arrayagg_sql-373"><a href="#Hive.Generator.arrayagg_sql-373"><span class="linenos">373</span></a> <span class="k">def</span> <span class="nf">arrayagg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Hive.Generator.arrayagg_sql-374"><a href="#Hive.Generator.arrayagg_sql-374"><span class="linenos">374</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="Hive.Generator.arrayagg_sql-375"><a href="#Hive.Generator.arrayagg_sql-375"><span class="linenos">375</span></a> <span class="s2">&quot;COLLECT_LIST&quot;</span><span class="p">,</span>
+</span><span id="Hive.Generator.arrayagg_sql-376"><a href="#Hive.Generator.arrayagg_sql-376"><span class="linenos">376</span></a> <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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Hive.Generator.arrayagg_sql-377"><a href="#Hive.Generator.arrayagg_sql-377"><span class="linenos">377</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1103,11 +1125,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Hive.Generator.with_properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.with_properties-363"><a href="#Hive.Generator.with_properties-363"><span class="linenos">363</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="Hive.Generator.with_properties-364"><a href="#Hive.Generator.with_properties-364"><span class="linenos">364</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><span id="Hive.Generator.with_properties-365"><a href="#Hive.Generator.with_properties-365"><span class="linenos">365</span></a> <span class="n">properties</span><span class="p">,</span>
-</span><span id="Hive.Generator.with_properties-366"><a href="#Hive.Generator.with_properties-366"><span class="linenos">366</span></a> <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;TBLPROPERTIES&quot;</span><span class="p">),</span>
-</span><span id="Hive.Generator.with_properties-367"><a href="#Hive.Generator.with_properties-367"><span class="linenos">367</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.with_properties-379"><a href="#Hive.Generator.with_properties-379"><span class="linenos">379</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="Hive.Generator.with_properties-380"><a href="#Hive.Generator.with_properties-380"><span class="linenos">380</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><span id="Hive.Generator.with_properties-381"><a href="#Hive.Generator.with_properties-381"><span class="linenos">381</span></a> <span class="n">properties</span><span class="p">,</span>
+</span><span id="Hive.Generator.with_properties-382"><a href="#Hive.Generator.with_properties-382"><span class="linenos">382</span></a> <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;TBLPROPERTIES&quot;</span><span class="p">),</span>
+</span><span id="Hive.Generator.with_properties-383"><a href="#Hive.Generator.with_properties-383"><span class="linenos">383</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1125,16 +1147,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#Hive.Generator.datatype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hive.Generator.datatype_sql-369"><a href="#Hive.Generator.datatype_sql-369"><span class="linenos">369</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="Hive.Generator.datatype_sql-370"><a href="#Hive.Generator.datatype_sql-370"><span class="linenos">370</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Hive.Generator.datatype_sql-371"><a href="#Hive.Generator.datatype_sql-371"><span class="linenos">371</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="Hive.Generator.datatype_sql-372"><a href="#Hive.Generator.datatype_sql-372"><span class="linenos">372</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Hive.Generator.datatype_sql-373"><a href="#Hive.Generator.datatype_sql-373"><span class="linenos">373</span></a> <span class="p">):</span>
-</span><span id="Hive.Generator.datatype_sql-374"><a href="#Hive.Generator.datatype_sql-374"><span class="linenos">374</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="s2">&quot;text&quot;</span><span class="p">)</span>
-</span><span id="Hive.Generator.datatype_sql-375"><a href="#Hive.Generator.datatype_sql-375"><span class="linenos">375</span></a> <span class="k">elif</span> <span class="n">expression</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="Hive.Generator.datatype_sql-376"><a href="#Hive.Generator.datatype_sql-376"><span class="linenos">376</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Hive.Generator.datatype_sql-377"><a href="#Hive.Generator.datatype_sql-377"><span class="linenos">377</span></a>
-</span><span id="Hive.Generator.datatype_sql-378"><a href="#Hive.Generator.datatype_sql-378"><span class="linenos">378</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="Hive.Generator.datatype_sql-385"><a href="#Hive.Generator.datatype_sql-385"><span class="linenos">385</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="Hive.Generator.datatype_sql-386"><a href="#Hive.Generator.datatype_sql-386"><span class="linenos">386</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Hive.Generator.datatype_sql-387"><a href="#Hive.Generator.datatype_sql-387"><span class="linenos">387</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</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 class="n">exp</span><span 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><span id="Hive.Generator.datatype_sql-388"><a href="#Hive.Generator.datatype_sql-388"><span class="linenos">388</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Hive.Generator.datatype_sql-389"><a href="#Hive.Generator.datatype_sql-389"><span class="linenos">389</span></a> <span class="p">):</span>
+</span><span id="Hive.Generator.datatype_sql-390"><a href="#Hive.Generator.datatype_sql-390"><span class="linenos">390</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="s2">&quot;text&quot;</span><span class="p">)</span>
+</span><span id="Hive.Generator.datatype_sql-391"><a href="#Hive.Generator.datatype_sql-391"><span class="linenos">391</span></a> <span class="k">elif</span> <span class="n">expression</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="Hive.Generator.datatype_sql-392"><a href="#Hive.Generator.datatype_sql-392"><span class="linenos">392</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">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Hive.Generator.datatype_sql-393"><a href="#Hive.Generator.datatype_sql-393"><span class="linenos">393</span></a>
+</span><span id="Hive.Generator.datatype_sql-394"><a href="#Hive.Generator.datatype_sql-394"><span class="linenos">394</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>
@@ -1263,7 +1285,7 @@ Default: True</li>
<dd id="Hive.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Hive.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Hive.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Hive.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Hive.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Hive.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Hive.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Hive.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1272,6 +1294,7 @@ Default: True</li>
<dd id="Hive.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Hive.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Hive.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Hive.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Hive.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Hive.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Hive.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/mysql.html b/docs/sqlglot/dialects/mysql.html
index d87f91a..0e62bcc 100644
--- a/docs/sqlglot/dialects/mysql.html
+++ b/docs/sqlglot/dialects/mysql.html
@@ -82,7 +82,7 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
-</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a> <span class="n">Dialect</span><span class="p">,</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
@@ -485,84 +485,85 @@
</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">Min</span><span class="p">:</span> <span class="n">min_or_least</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">NullSafeEQ</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;=&gt;&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">NullSafeNEQ</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">not_sql</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;=&gt;&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">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_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">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date_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">StrToTime</span><span class="p">:</span> <span class="n">_str_to_date_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">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_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">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="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><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">Trim</span><span class="p">:</span> <span class="n">_trim_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">TryCast</span><span class="p">:</span> <span class="n">no_trycast_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">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-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="n">TYPE_MAPPING</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">TYPE_MAPPING</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a> <span class="n">TYPE_MAPPING</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">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><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">TYPE_MAPPING</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">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><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">TYPE_MAPPING</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">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><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">TYPE_MAPPING</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">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><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-426"><a href="#L-426"><span class="linenos">426</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-427"><a href="#L-427"><span class="linenos">427</span></a> <span class="p">}</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</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">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</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-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="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-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</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><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">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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-446"><a href="#L-446"><span class="linenos">446</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-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="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_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="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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-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="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</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><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">def</span> <span class="nf">_prefixed_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</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">arg</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-472"><a href="#L-472"><span class="linenos">472</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="n">arg</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="ow">not</span> <span class="n">sql</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="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; </span><span class="si">{</span><span class="n">prefix</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><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">_oldstyle_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">Show</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">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-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="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-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">limit_offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">offset</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">limit</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">limit</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; LIMIT </span><span class="si">{</span><span class="n">limit_offset</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</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">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_distinct_on</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">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_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">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date_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">StrToTime</span><span class="p">:</span> <span class="n">_str_to_date_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">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_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">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="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><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">Trim</span><span class="p">:</span> <span class="n">_trim_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">TryCast</span><span class="p">:</span> <span class="n">no_trycast_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">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-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="p">}</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="n">TYPE_MAPPING</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">TYPE_MAPPING</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">TYPE_MAPPING</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">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><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a> <span class="n">TYPE_MAPPING</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">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><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a> <span class="n">TYPE_MAPPING</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">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><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">TYPE_MAPPING</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">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><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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</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">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-427"><a href="#L-427"><span class="linenos">427</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-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="p">}</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="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</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">def</span> <span class="nf">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</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-436"><a href="#L-436"><span class="linenos">436</span></a>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span 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-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</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><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">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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-447"><a href="#L-447"><span class="linenos">447</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-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="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_sql</span><span class="p">(</span><span class="n">expression</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="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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-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="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</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">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</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">_prefixed_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</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">arg</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-473"><a href="#L-473"><span class="linenos">473</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="n">arg</span><span class="p">)</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</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-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">return</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">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="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</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 class="k">def</span> <span class="nf">_oldstyle_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">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</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-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="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-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="n">limit_offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">offset</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">limit</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">limit</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; LIMIT </span><span class="si">{</span><span class="n">limit_offset</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -891,84 +892,85 @@
</span><span id="MySQL-404"><a href="#MySQL-404"><span class="linenos">404</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="MySQL-405"><a href="#MySQL-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;=&gt;&quot;</span><span class="p">),</span>
</span><span id="MySQL-406"><a href="#MySQL-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">not_sql</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;=&gt;&quot;</span><span class="p">)),</span>
-</span><span id="MySQL-407"><a href="#MySQL-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
-</span><span id="MySQL-408"><a href="#MySQL-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date_sql</span><span class="p">,</span>
-</span><span id="MySQL-409"><a href="#MySQL-409"><span class="linenos">409</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_date_sql</span><span class="p">,</span>
-</span><span id="MySQL-410"><a href="#MySQL-410"><span class="linenos">410</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="MySQL-411"><a href="#MySQL-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="MySQL-412"><a href="#MySQL-412"><span class="linenos">412</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="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><span id="MySQL-413"><a href="#MySQL-413"><span class="linenos">413</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="MySQL-414"><a href="#MySQL-414"><span class="linenos">414</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="MySQL-415"><a href="#MySQL-415"><span class="linenos">415</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="MySQL-416"><a href="#MySQL-416"><span class="linenos">416</span></a> <span class="p">}</span>
-</span><span id="MySQL-417"><a href="#MySQL-417"><span class="linenos">417</span></a>
-</span><span id="MySQL-418"><a href="#MySQL-418"><span class="linenos">418</span></a> <span class="n">TYPE_MAPPING</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">TYPE_MAPPING</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="MySQL-419"><a href="#MySQL-419"><span class="linenos">419</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-420"><a href="#MySQL-420"><span class="linenos">420</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-421"><a href="#MySQL-421"><span class="linenos">421</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-422"><a href="#MySQL-422"><span class="linenos">422</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-423"><a href="#MySQL-423"><span class="linenos">423</span></a>
-</span><span id="MySQL-424"><a href="#MySQL-424"><span class="linenos">424</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL-425"><a href="#MySQL-425"><span class="linenos">425</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="MySQL-426"><a href="#MySQL-426"><span class="linenos">426</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="MySQL-427"><a href="#MySQL-427"><span class="linenos">427</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="MySQL-428"><a href="#MySQL-428"><span class="linenos">428</span></a> <span class="p">}</span>
-</span><span id="MySQL-429"><a href="#MySQL-429"><span class="linenos">429</span></a>
-</span><span id="MySQL-430"><a href="#MySQL-430"><span class="linenos">430</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="MySQL-431"><a href="#MySQL-431"><span class="linenos">431</span></a>
-</span><span id="MySQL-432"><a href="#MySQL-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL-433"><a href="#MySQL-433"><span class="linenos">433</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL-434"><a href="#MySQL-434"><span class="linenos">434</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL-435"><a href="#MySQL-435"><span class="linenos">435</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="MySQL-436"><a href="#MySQL-436"><span class="linenos">436</span></a>
-</span><span id="MySQL-437"><a href="#MySQL-437"><span class="linenos">437</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="MySQL-438"><a href="#MySQL-438"><span class="linenos">438</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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="MySQL-439"><a href="#MySQL-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
-</span><span id="MySQL-440"><a href="#MySQL-440"><span class="linenos">440</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL-441"><a href="#MySQL-441"><span class="linenos">441</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
-</span><span id="MySQL-442"><a href="#MySQL-442"><span class="linenos">442</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><span id="MySQL-443"><a href="#MySQL-443"><span class="linenos">443</span></a>
-</span><span id="MySQL-444"><a href="#MySQL-444"><span class="linenos">444</span></a> <span class="n">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
-</span><span id="MySQL-445"><a href="#MySQL-445"><span class="linenos">445</span></a>
-</span><span id="MySQL-446"><a href="#MySQL-446"><span class="linenos">446</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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="MySQL-447"><a href="#MySQL-447"><span class="linenos">447</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="MySQL-448"><a href="#MySQL-448"><span class="linenos">448</span></a>
-</span><span id="MySQL-449"><a href="#MySQL-449"><span class="linenos">449</span></a> <span class="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
-</span><span id="MySQL-450"><a href="#MySQL-450"><span class="linenos">450</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
-</span><span id="MySQL-451"><a href="#MySQL-451"><span class="linenos">451</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</span><span class="p">)</span>
-</span><span id="MySQL-452"><a href="#MySQL-452"><span class="linenos">452</span></a>
-</span><span id="MySQL-453"><a href="#MySQL-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
-</span><span id="MySQL-454"><a href="#MySQL-454"><span class="linenos">454</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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="MySQL-455"><a href="#MySQL-455"><span class="linenos">455</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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="MySQL-456"><a href="#MySQL-456"><span class="linenos">456</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-457"><a href="#MySQL-457"><span class="linenos">457</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL-458"><a href="#MySQL-458"><span class="linenos">458</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="MySQL-459"><a href="#MySQL-459"><span class="linenos">459</span></a>
-</span><span id="MySQL-460"><a href="#MySQL-460"><span class="linenos">460</span></a> <span class="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
-</span><span id="MySQL-461"><a href="#MySQL-461"><span class="linenos">461</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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="MySQL-462"><a href="#MySQL-462"><span class="linenos">462</span></a>
-</span><span id="MySQL-463"><a href="#MySQL-463"><span class="linenos">463</span></a> <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">)</span>
-</span><span id="MySQL-464"><a href="#MySQL-464"><span class="linenos">464</span></a>
-</span><span id="MySQL-465"><a href="#MySQL-465"><span class="linenos">465</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
-</span><span id="MySQL-466"><a href="#MySQL-466"><span class="linenos">466</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
-</span><span id="MySQL-467"><a href="#MySQL-467"><span class="linenos">467</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL-468"><a href="#MySQL-468"><span class="linenos">468</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL-469"><a href="#MySQL-469"><span class="linenos">469</span></a>
-</span><span id="MySQL-470"><a href="#MySQL-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL-471"><a href="#MySQL-471"><span class="linenos">471</span></a>
-</span><span id="MySQL-472"><a href="#MySQL-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">_prefixed_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</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">arg</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="MySQL-473"><a href="#MySQL-473"><span class="linenos">473</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="n">arg</span><span class="p">)</span>
-</span><span id="MySQL-474"><a href="#MySQL-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
-</span><span id="MySQL-475"><a href="#MySQL-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL-476"><a href="#MySQL-476"><span class="linenos">476</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="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL-477"><a href="#MySQL-477"><span class="linenos">477</span></a>
-</span><span id="MySQL-478"><a href="#MySQL-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">_oldstyle_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">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL-479"><a href="#MySQL-479"><span class="linenos">479</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="MySQL-480"><a href="#MySQL-480"><span class="linenos">480</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="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="MySQL-481"><a href="#MySQL-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
-</span><span id="MySQL-482"><a href="#MySQL-482"><span class="linenos">482</span></a> <span class="n">limit_offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">offset</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">limit</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">limit</span>
-</span><span id="MySQL-483"><a href="#MySQL-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; LIMIT </span><span class="si">{</span><span class="n">limit_offset</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL-484"><a href="#MySQL-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-407"><a href="#MySQL-407"><span class="linenos">407</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_distinct_on</span><span class="p">]),</span>
+</span><span id="MySQL-408"><a href="#MySQL-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">strposition_to_locate_sql</span><span class="p">,</span>
+</span><span id="MySQL-409"><a href="#MySQL-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="n">_str_to_date_sql</span><span class="p">,</span>
+</span><span id="MySQL-410"><a href="#MySQL-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_date_sql</span><span class="p">,</span>
+</span><span id="MySQL-411"><a href="#MySQL-411"><span class="linenos">411</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="MySQL-412"><a href="#MySQL-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="MySQL-413"><a href="#MySQL-413"><span class="linenos">413</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="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><span id="MySQL-414"><a href="#MySQL-414"><span class="linenos">414</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="MySQL-415"><a href="#MySQL-415"><span class="linenos">415</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="MySQL-416"><a href="#MySQL-416"><span class="linenos">416</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="MySQL-417"><a href="#MySQL-417"><span class="linenos">417</span></a> <span class="p">}</span>
+</span><span id="MySQL-418"><a href="#MySQL-418"><span class="linenos">418</span></a>
+</span><span id="MySQL-419"><a href="#MySQL-419"><span class="linenos">419</span></a> <span class="n">TYPE_MAPPING</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">TYPE_MAPPING</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="MySQL-420"><a href="#MySQL-420"><span class="linenos">420</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-421"><a href="#MySQL-421"><span class="linenos">421</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-422"><a href="#MySQL-422"><span class="linenos">422</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-423"><a href="#MySQL-423"><span class="linenos">423</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL-424"><a href="#MySQL-424"><span class="linenos">424</span></a>
+</span><span id="MySQL-425"><a href="#MySQL-425"><span class="linenos">425</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL-426"><a href="#MySQL-426"><span class="linenos">426</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="MySQL-427"><a href="#MySQL-427"><span class="linenos">427</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="MySQL-428"><a href="#MySQL-428"><span class="linenos">428</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="MySQL-429"><a href="#MySQL-429"><span class="linenos">429</span></a> <span class="p">}</span>
+</span><span id="MySQL-430"><a href="#MySQL-430"><span class="linenos">430</span></a>
+</span><span id="MySQL-431"><a href="#MySQL-431"><span class="linenos">431</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="MySQL-432"><a href="#MySQL-432"><span class="linenos">432</span></a>
+</span><span id="MySQL-433"><a href="#MySQL-433"><span class="linenos">433</span></a> <span class="k">def</span> <span class="nf">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL-434"><a href="#MySQL-434"><span class="linenos">434</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL-435"><a href="#MySQL-435"><span class="linenos">435</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-436"><a href="#MySQL-436"><span class="linenos">436</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="MySQL-437"><a href="#MySQL-437"><span class="linenos">437</span></a>
+</span><span id="MySQL-438"><a href="#MySQL-438"><span class="linenos">438</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="MySQL-439"><a href="#MySQL-439"><span class="linenos">439</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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="MySQL-440"><a href="#MySQL-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
+</span><span id="MySQL-441"><a href="#MySQL-441"><span class="linenos">441</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL-442"><a href="#MySQL-442"><span class="linenos">442</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
+</span><span id="MySQL-443"><a href="#MySQL-443"><span class="linenos">443</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><span id="MySQL-444"><a href="#MySQL-444"><span class="linenos">444</span></a>
+</span><span id="MySQL-445"><a href="#MySQL-445"><span class="linenos">445</span></a> <span class="n">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="MySQL-446"><a href="#MySQL-446"><span class="linenos">446</span></a>
+</span><span id="MySQL-447"><a href="#MySQL-447"><span class="linenos">447</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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="MySQL-448"><a href="#MySQL-448"><span class="linenos">448</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="MySQL-449"><a href="#MySQL-449"><span class="linenos">449</span></a>
+</span><span id="MySQL-450"><a href="#MySQL-450"><span class="linenos">450</span></a> <span class="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
+</span><span id="MySQL-451"><a href="#MySQL-451"><span class="linenos">451</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
+</span><span id="MySQL-452"><a href="#MySQL-452"><span class="linenos">452</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</span><span class="p">)</span>
+</span><span id="MySQL-453"><a href="#MySQL-453"><span class="linenos">453</span></a>
+</span><span id="MySQL-454"><a href="#MySQL-454"><span class="linenos">454</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
+</span><span id="MySQL-455"><a href="#MySQL-455"><span class="linenos">455</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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="MySQL-456"><a href="#MySQL-456"><span class="linenos">456</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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="MySQL-457"><a href="#MySQL-457"><span class="linenos">457</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-458"><a href="#MySQL-458"><span class="linenos">458</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-459"><a href="#MySQL-459"><span class="linenos">459</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="MySQL-460"><a href="#MySQL-460"><span class="linenos">460</span></a>
+</span><span id="MySQL-461"><a href="#MySQL-461"><span class="linenos">461</span></a> <span class="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
+</span><span id="MySQL-462"><a href="#MySQL-462"><span class="linenos">462</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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="MySQL-463"><a href="#MySQL-463"><span class="linenos">463</span></a>
+</span><span id="MySQL-464"><a href="#MySQL-464"><span class="linenos">464</span></a> <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">)</span>
+</span><span id="MySQL-465"><a href="#MySQL-465"><span class="linenos">465</span></a>
+</span><span id="MySQL-466"><a href="#MySQL-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
+</span><span id="MySQL-467"><a href="#MySQL-467"><span class="linenos">467</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
+</span><span id="MySQL-468"><a href="#MySQL-468"><span class="linenos">468</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL-469"><a href="#MySQL-469"><span class="linenos">469</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-470"><a href="#MySQL-470"><span class="linenos">470</span></a>
+</span><span id="MySQL-471"><a href="#MySQL-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL-472"><a href="#MySQL-472"><span class="linenos">472</span></a>
+</span><span id="MySQL-473"><a href="#MySQL-473"><span class="linenos">473</span></a> <span class="k">def</span> <span class="nf">_prefixed_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</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">arg</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="MySQL-474"><a href="#MySQL-474"><span class="linenos">474</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="n">arg</span><span class="p">)</span>
+</span><span id="MySQL-475"><a href="#MySQL-475"><span class="linenos">475</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
+</span><span id="MySQL-476"><a href="#MySQL-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL-477"><a href="#MySQL-477"><span class="linenos">477</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="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL-478"><a href="#MySQL-478"><span class="linenos">478</span></a>
+</span><span id="MySQL-479"><a href="#MySQL-479"><span class="linenos">479</span></a> <span class="k">def</span> <span class="nf">_oldstyle_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">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL-480"><a href="#MySQL-480"><span class="linenos">480</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="MySQL-481"><a href="#MySQL-481"><span class="linenos">481</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="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="MySQL-482"><a href="#MySQL-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
+</span><span id="MySQL-483"><a href="#MySQL-483"><span class="linenos">483</span></a> <span class="n">limit_offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">offset</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">limit</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">limit</span>
+</span><span id="MySQL-484"><a href="#MySQL-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; LIMIT </span><span class="si">{</span><span class="n">limit_offset</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL-485"><a href="#MySQL-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -1378,84 +1380,85 @@ Default: "nulls_are_small"</li>
</span><span id="MySQL.Generator-404"><a href="#MySQL.Generator-404"><span class="linenos">404</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="MySQL.Generator-405"><a href="#MySQL.Generator-405"><span class="linenos">405</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;=&gt;&quot;</span><span class="p">),</span>
</span><span id="MySQL.Generator-406"><a href="#MySQL.Generator-406"><span class="linenos">406</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">not_sql</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;=&gt;&quot;</span><span class="p">)),</span>
-</span><span id="MySQL.Generator-407"><a href="#MySQL.Generator-407"><span class="linenos">407</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="n">strposition_to_locate_sql</span><span class="p">,</span>
-</span><span id="MySQL.Generator-408"><a href="#MySQL.Generator-408"><span class="linenos">408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date_sql</span><span class="p">,</span>
-</span><span id="MySQL.Generator-409"><a href="#MySQL.Generator-409"><span class="linenos">409</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_date_sql</span><span class="p">,</span>
-</span><span id="MySQL.Generator-410"><a href="#MySQL.Generator-410"><span class="linenos">410</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="MySQL.Generator-411"><a href="#MySQL.Generator-411"><span class="linenos">411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
-</span><span id="MySQL.Generator-412"><a href="#MySQL.Generator-412"><span class="linenos">412</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="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><span id="MySQL.Generator-413"><a href="#MySQL.Generator-413"><span class="linenos">413</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="MySQL.Generator-414"><a href="#MySQL.Generator-414"><span class="linenos">414</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="MySQL.Generator-415"><a href="#MySQL.Generator-415"><span class="linenos">415</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="MySQL.Generator-416"><a href="#MySQL.Generator-416"><span class="linenos">416</span></a> <span class="p">}</span>
-</span><span id="MySQL.Generator-417"><a href="#MySQL.Generator-417"><span class="linenos">417</span></a>
-</span><span id="MySQL.Generator-418"><a href="#MySQL.Generator-418"><span class="linenos">418</span></a> <span class="n">TYPE_MAPPING</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">TYPE_MAPPING</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="MySQL.Generator-419"><a href="#MySQL.Generator-419"><span class="linenos">419</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-420"><a href="#MySQL.Generator-420"><span class="linenos">420</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-421"><a href="#MySQL.Generator-421"><span class="linenos">421</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-422"><a href="#MySQL.Generator-422"><span class="linenos">422</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-423"><a href="#MySQL.Generator-423"><span class="linenos">423</span></a>
-</span><span id="MySQL.Generator-424"><a href="#MySQL.Generator-424"><span class="linenos">424</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MySQL.Generator-425"><a href="#MySQL.Generator-425"><span class="linenos">425</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="MySQL.Generator-426"><a href="#MySQL.Generator-426"><span class="linenos">426</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="MySQL.Generator-427"><a href="#MySQL.Generator-427"><span class="linenos">427</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="MySQL.Generator-428"><a href="#MySQL.Generator-428"><span class="linenos">428</span></a> <span class="p">}</span>
-</span><span id="MySQL.Generator-429"><a href="#MySQL.Generator-429"><span class="linenos">429</span></a>
-</span><span id="MySQL.Generator-430"><a href="#MySQL.Generator-430"><span class="linenos">430</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
-</span><span id="MySQL.Generator-431"><a href="#MySQL.Generator-431"><span class="linenos">431</span></a>
-</span><span id="MySQL.Generator-432"><a href="#MySQL.Generator-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator-433"><a href="#MySQL.Generator-433"><span class="linenos">433</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL.Generator-434"><a href="#MySQL.Generator-434"><span class="linenos">434</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator-435"><a href="#MySQL.Generator-435"><span class="linenos">435</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="MySQL.Generator-436"><a href="#MySQL.Generator-436"><span class="linenos">436</span></a>
-</span><span id="MySQL.Generator-437"><a href="#MySQL.Generator-437"><span class="linenos">437</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="MySQL.Generator-438"><a href="#MySQL.Generator-438"><span class="linenos">438</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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="MySQL.Generator-439"><a href="#MySQL.Generator-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
-</span><span id="MySQL.Generator-440"><a href="#MySQL.Generator-440"><span class="linenos">440</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL.Generator-441"><a href="#MySQL.Generator-441"><span class="linenos">441</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator-442"><a href="#MySQL.Generator-442"><span class="linenos">442</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><span id="MySQL.Generator-443"><a href="#MySQL.Generator-443"><span class="linenos">443</span></a>
-</span><span id="MySQL.Generator-444"><a href="#MySQL.Generator-444"><span class="linenos">444</span></a> <span class="n">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator-445"><a href="#MySQL.Generator-445"><span class="linenos">445</span></a>
-</span><span id="MySQL.Generator-446"><a href="#MySQL.Generator-446"><span class="linenos">446</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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="MySQL.Generator-447"><a href="#MySQL.Generator-447"><span class="linenos">447</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="MySQL.Generator-448"><a href="#MySQL.Generator-448"><span class="linenos">448</span></a>
-</span><span id="MySQL.Generator-449"><a href="#MySQL.Generator-449"><span class="linenos">449</span></a> <span class="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator-450"><a href="#MySQL.Generator-450"><span class="linenos">450</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
-</span><span id="MySQL.Generator-451"><a href="#MySQL.Generator-451"><span class="linenos">451</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator-452"><a href="#MySQL.Generator-452"><span class="linenos">452</span></a>
-</span><span id="MySQL.Generator-453"><a href="#MySQL.Generator-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator-454"><a href="#MySQL.Generator-454"><span class="linenos">454</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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="MySQL.Generator-455"><a href="#MySQL.Generator-455"><span class="linenos">455</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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="MySQL.Generator-456"><a href="#MySQL.Generator-456"><span class="linenos">456</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator-457"><a href="#MySQL.Generator-457"><span class="linenos">457</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator-458"><a href="#MySQL.Generator-458"><span class="linenos">458</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="MySQL.Generator-459"><a href="#MySQL.Generator-459"><span class="linenos">459</span></a>
-</span><span id="MySQL.Generator-460"><a href="#MySQL.Generator-460"><span class="linenos">460</span></a> <span class="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator-461"><a href="#MySQL.Generator-461"><span class="linenos">461</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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="MySQL.Generator-462"><a href="#MySQL.Generator-462"><span class="linenos">462</span></a>
-</span><span id="MySQL.Generator-463"><a href="#MySQL.Generator-463"><span class="linenos">463</span></a> <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator-464"><a href="#MySQL.Generator-464"><span class="linenos">464</span></a>
-</span><span id="MySQL.Generator-465"><a href="#MySQL.Generator-465"><span class="linenos">465</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator-466"><a href="#MySQL.Generator-466"><span class="linenos">466</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
-</span><span id="MySQL.Generator-467"><a href="#MySQL.Generator-467"><span class="linenos">467</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator-468"><a href="#MySQL.Generator-468"><span class="linenos">468</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator-469"><a href="#MySQL.Generator-469"><span class="linenos">469</span></a>
-</span><span id="MySQL.Generator-470"><a href="#MySQL.Generator-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL.Generator-471"><a href="#MySQL.Generator-471"><span class="linenos">471</span></a>
-</span><span id="MySQL.Generator-472"><a href="#MySQL.Generator-472"><span class="linenos">472</span></a> <span class="k">def</span> <span class="nf">_prefixed_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</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">arg</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="MySQL.Generator-473"><a href="#MySQL.Generator-473"><span class="linenos">473</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="n">arg</span><span class="p">)</span>
-</span><span id="MySQL.Generator-474"><a href="#MySQL.Generator-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
-</span><span id="MySQL.Generator-475"><a href="#MySQL.Generator-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator-476"><a href="#MySQL.Generator-476"><span class="linenos">476</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="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL.Generator-477"><a href="#MySQL.Generator-477"><span class="linenos">477</span></a>
-</span><span id="MySQL.Generator-478"><a href="#MySQL.Generator-478"><span class="linenos">478</span></a> <span class="k">def</span> <span class="nf">_oldstyle_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">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator-479"><a href="#MySQL.Generator-479"><span class="linenos">479</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="MySQL.Generator-480"><a href="#MySQL.Generator-480"><span class="linenos">480</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="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="MySQL.Generator-481"><a href="#MySQL.Generator-481"><span class="linenos">481</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
-</span><span id="MySQL.Generator-482"><a href="#MySQL.Generator-482"><span class="linenos">482</span></a> <span class="n">limit_offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">offset</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">limit</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">limit</span>
-</span><span id="MySQL.Generator-483"><a href="#MySQL.Generator-483"><span class="linenos">483</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; LIMIT </span><span class="si">{</span><span class="n">limit_offset</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL.Generator-484"><a href="#MySQL.Generator-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-407"><a href="#MySQL.Generator-407"><span class="linenos">407</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_distinct_on</span><span class="p">]),</span>
+</span><span id="MySQL.Generator-408"><a href="#MySQL.Generator-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">strposition_to_locate_sql</span><span class="p">,</span>
+</span><span id="MySQL.Generator-409"><a href="#MySQL.Generator-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="n">_str_to_date_sql</span><span class="p">,</span>
+</span><span id="MySQL.Generator-410"><a href="#MySQL.Generator-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_date_sql</span><span class="p">,</span>
+</span><span id="MySQL.Generator-411"><a href="#MySQL.Generator-411"><span class="linenos">411</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="MySQL.Generator-412"><a href="#MySQL.Generator-412"><span class="linenos">412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToUnix</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;UNIX_TIMESTAMP&quot;</span><span class="p">),</span>
+</span><span id="MySQL.Generator-413"><a href="#MySQL.Generator-413"><span class="linenos">413</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE_FORMAT&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="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><span id="MySQL.Generator-414"><a href="#MySQL.Generator-414"><span class="linenos">414</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="MySQL.Generator-415"><a href="#MySQL.Generator-415"><span class="linenos">415</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="MySQL.Generator-416"><a href="#MySQL.Generator-416"><span class="linenos">416</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="MySQL.Generator-417"><a href="#MySQL.Generator-417"><span class="linenos">417</span></a> <span class="p">}</span>
+</span><span id="MySQL.Generator-418"><a href="#MySQL.Generator-418"><span class="linenos">418</span></a>
+</span><span id="MySQL.Generator-419"><a href="#MySQL.Generator-419"><span class="linenos">419</span></a> <span class="n">TYPE_MAPPING</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">TYPE_MAPPING</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="MySQL.Generator-420"><a href="#MySQL.Generator-420"><span class="linenos">420</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-421"><a href="#MySQL.Generator-421"><span class="linenos">421</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-422"><a href="#MySQL.Generator-422"><span class="linenos">422</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-423"><a href="#MySQL.Generator-423"><span class="linenos">423</span></a> <span class="n">TYPE_MAPPING</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">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><span id="MySQL.Generator-424"><a href="#MySQL.Generator-424"><span class="linenos">424</span></a>
+</span><span id="MySQL.Generator-425"><a href="#MySQL.Generator-425"><span class="linenos">425</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MySQL.Generator-426"><a href="#MySQL.Generator-426"><span class="linenos">426</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="MySQL.Generator-427"><a href="#MySQL.Generator-427"><span class="linenos">427</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="MySQL.Generator-428"><a href="#MySQL.Generator-428"><span class="linenos">428</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="MySQL.Generator-429"><a href="#MySQL.Generator-429"><span class="linenos">429</span></a> <span class="p">}</span>
+</span><span id="MySQL.Generator-430"><a href="#MySQL.Generator-430"><span class="linenos">430</span></a>
+</span><span id="MySQL.Generator-431"><a href="#MySQL.Generator-431"><span class="linenos">431</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="MySQL.Generator-432"><a href="#MySQL.Generator-432"><span class="linenos">432</span></a>
+</span><span id="MySQL.Generator-433"><a href="#MySQL.Generator-433"><span class="linenos">433</span></a> <span class="k">def</span> <span class="nf">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator-434"><a href="#MySQL.Generator-434"><span class="linenos">434</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL.Generator-435"><a href="#MySQL.Generator-435"><span class="linenos">435</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-436"><a href="#MySQL.Generator-436"><span class="linenos">436</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="MySQL.Generator-437"><a href="#MySQL.Generator-437"><span class="linenos">437</span></a>
+</span><span id="MySQL.Generator-438"><a href="#MySQL.Generator-438"><span class="linenos">438</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="MySQL.Generator-439"><a href="#MySQL.Generator-439"><span class="linenos">439</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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="MySQL.Generator-440"><a href="#MySQL.Generator-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
+</span><span id="MySQL.Generator-441"><a href="#MySQL.Generator-441"><span class="linenos">441</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL.Generator-442"><a href="#MySQL.Generator-442"><span class="linenos">442</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator-443"><a href="#MySQL.Generator-443"><span class="linenos">443</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><span id="MySQL.Generator-444"><a href="#MySQL.Generator-444"><span class="linenos">444</span></a>
+</span><span id="MySQL.Generator-445"><a href="#MySQL.Generator-445"><span class="linenos">445</span></a> <span class="n">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator-446"><a href="#MySQL.Generator-446"><span class="linenos">446</span></a>
+</span><span id="MySQL.Generator-447"><a href="#MySQL.Generator-447"><span class="linenos">447</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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="MySQL.Generator-448"><a href="#MySQL.Generator-448"><span class="linenos">448</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="MySQL.Generator-449"><a href="#MySQL.Generator-449"><span class="linenos">449</span></a>
+</span><span id="MySQL.Generator-450"><a href="#MySQL.Generator-450"><span class="linenos">450</span></a> <span class="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator-451"><a href="#MySQL.Generator-451"><span class="linenos">451</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
+</span><span id="MySQL.Generator-452"><a href="#MySQL.Generator-452"><span class="linenos">452</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator-453"><a href="#MySQL.Generator-453"><span class="linenos">453</span></a>
+</span><span id="MySQL.Generator-454"><a href="#MySQL.Generator-454"><span class="linenos">454</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator-455"><a href="#MySQL.Generator-455"><span class="linenos">455</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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="MySQL.Generator-456"><a href="#MySQL.Generator-456"><span class="linenos">456</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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="MySQL.Generator-457"><a href="#MySQL.Generator-457"><span class="linenos">457</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator-458"><a href="#MySQL.Generator-458"><span class="linenos">458</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-459"><a href="#MySQL.Generator-459"><span class="linenos">459</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="MySQL.Generator-460"><a href="#MySQL.Generator-460"><span class="linenos">460</span></a>
+</span><span id="MySQL.Generator-461"><a href="#MySQL.Generator-461"><span class="linenos">461</span></a> <span class="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator-462"><a href="#MySQL.Generator-462"><span class="linenos">462</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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="MySQL.Generator-463"><a href="#MySQL.Generator-463"><span class="linenos">463</span></a>
+</span><span id="MySQL.Generator-464"><a href="#MySQL.Generator-464"><span class="linenos">464</span></a> <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator-465"><a href="#MySQL.Generator-465"><span class="linenos">465</span></a>
+</span><span id="MySQL.Generator-466"><a href="#MySQL.Generator-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator-467"><a href="#MySQL.Generator-467"><span class="linenos">467</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
+</span><span id="MySQL.Generator-468"><a href="#MySQL.Generator-468"><span class="linenos">468</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator-469"><a href="#MySQL.Generator-469"><span class="linenos">469</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-470"><a href="#MySQL.Generator-470"><span class="linenos">470</span></a>
+</span><span id="MySQL.Generator-471"><a href="#MySQL.Generator-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL.Generator-472"><a href="#MySQL.Generator-472"><span class="linenos">472</span></a>
+</span><span id="MySQL.Generator-473"><a href="#MySQL.Generator-473"><span class="linenos">473</span></a> <span class="k">def</span> <span class="nf">_prefixed_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</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">arg</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="MySQL.Generator-474"><a href="#MySQL.Generator-474"><span class="linenos">474</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="n">arg</span><span class="p">)</span>
+</span><span id="MySQL.Generator-475"><a href="#MySQL.Generator-475"><span class="linenos">475</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">sql</span><span class="p">:</span>
+</span><span id="MySQL.Generator-476"><a href="#MySQL.Generator-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator-477"><a href="#MySQL.Generator-477"><span class="linenos">477</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="s2"> </span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL.Generator-478"><a href="#MySQL.Generator-478"><span class="linenos">478</span></a>
+</span><span id="MySQL.Generator-479"><a href="#MySQL.Generator-479"><span class="linenos">479</span></a> <span class="k">def</span> <span class="nf">_oldstyle_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">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator-480"><a href="#MySQL.Generator-480"><span class="linenos">480</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="MySQL.Generator-481"><a href="#MySQL.Generator-481"><span class="linenos">481</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="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="MySQL.Generator-482"><a href="#MySQL.Generator-482"><span class="linenos">482</span></a> <span class="k">if</span> <span class="n">limit</span><span class="p">:</span>
+</span><span id="MySQL.Generator-483"><a href="#MySQL.Generator-483"><span class="linenos">483</span></a> <span class="n">limit_offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">offset</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">limit</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">limit</span>
+</span><span id="MySQL.Generator-484"><a href="#MySQL.Generator-484"><span class="linenos">484</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot; LIMIT </span><span class="si">{</span><span class="n">limit_offset</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL.Generator-485"><a href="#MySQL.Generator-485"><span class="linenos">485</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -1514,45 +1517,45 @@ Default: True</li>
</div>
<a class="headerlink" href="#MySQL.Generator.show_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.show_sql-432"><a href="#MySQL.Generator.show_sql-432"><span class="linenos">432</span></a> <span class="k">def</span> <span class="nf">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-433"><a href="#MySQL.Generator.show_sql-433"><span class="linenos">433</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL.Generator.show_sql-434"><a href="#MySQL.Generator.show_sql-434"><span class="linenos">434</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator.show_sql-435"><a href="#MySQL.Generator.show_sql-435"><span class="linenos">435</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="MySQL.Generator.show_sql-436"><a href="#MySQL.Generator.show_sql-436"><span class="linenos">436</span></a>
-</span><span id="MySQL.Generator.show_sql-437"><a href="#MySQL.Generator.show_sql-437"><span class="linenos">437</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="MySQL.Generator.show_sql-438"><a href="#MySQL.Generator.show_sql-438"><span class="linenos">438</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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="MySQL.Generator.show_sql-439"><a href="#MySQL.Generator.show_sql-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
-</span><span id="MySQL.Generator.show_sql-440"><a href="#MySQL.Generator.show_sql-440"><span class="linenos">440</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="MySQL.Generator.show_sql-441"><a href="#MySQL.Generator.show_sql-441"><span class="linenos">441</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-442"><a href="#MySQL.Generator.show_sql-442"><span class="linenos">442</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><span id="MySQL.Generator.show_sql-443"><a href="#MySQL.Generator.show_sql-443"><span class="linenos">443</span></a>
-</span><span id="MySQL.Generator.show_sql-444"><a href="#MySQL.Generator.show_sql-444"><span class="linenos">444</span></a> <span class="n">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator.show_sql-445"><a href="#MySQL.Generator.show_sql-445"><span class="linenos">445</span></a>
-</span><span id="MySQL.Generator.show_sql-446"><a href="#MySQL.Generator.show_sql-446"><span class="linenos">446</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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="MySQL.Generator.show_sql-447"><a href="#MySQL.Generator.show_sql-447"><span class="linenos">447</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="MySQL.Generator.show_sql-448"><a href="#MySQL.Generator.show_sql-448"><span class="linenos">448</span></a>
-</span><span id="MySQL.Generator.show_sql-449"><a href="#MySQL.Generator.show_sql-449"><span class="linenos">449</span></a> <span class="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator.show_sql-450"><a href="#MySQL.Generator.show_sql-450"><span class="linenos">450</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
-</span><span id="MySQL.Generator.show_sql-451"><a href="#MySQL.Generator.show_sql-451"><span class="linenos">451</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator.show_sql-452"><a href="#MySQL.Generator.show_sql-452"><span class="linenos">452</span></a>
-</span><span id="MySQL.Generator.show_sql-453"><a href="#MySQL.Generator.show_sql-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-454"><a href="#MySQL.Generator.show_sql-454"><span class="linenos">454</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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="MySQL.Generator.show_sql-455"><a href="#MySQL.Generator.show_sql-455"><span class="linenos">455</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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="MySQL.Generator.show_sql-456"><a href="#MySQL.Generator.show_sql-456"><span class="linenos">456</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-457"><a href="#MySQL.Generator.show_sql-457"><span class="linenos">457</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator.show_sql-458"><a href="#MySQL.Generator.show_sql-458"><span class="linenos">458</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="MySQL.Generator.show_sql-459"><a href="#MySQL.Generator.show_sql-459"><span class="linenos">459</span></a>
-</span><span id="MySQL.Generator.show_sql-460"><a href="#MySQL.Generator.show_sql-460"><span class="linenos">460</span></a> <span class="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator.show_sql-461"><a href="#MySQL.Generator.show_sql-461"><span class="linenos">461</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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="MySQL.Generator.show_sql-462"><a href="#MySQL.Generator.show_sql-462"><span class="linenos">462</span></a>
-</span><span id="MySQL.Generator.show_sql-463"><a href="#MySQL.Generator.show_sql-463"><span class="linenos">463</span></a> <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">)</span>
-</span><span id="MySQL.Generator.show_sql-464"><a href="#MySQL.Generator.show_sql-464"><span class="linenos">464</span></a>
-</span><span id="MySQL.Generator.show_sql-465"><a href="#MySQL.Generator.show_sql-465"><span class="linenos">465</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-466"><a href="#MySQL.Generator.show_sql-466"><span class="linenos">466</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
-</span><span id="MySQL.Generator.show_sql-467"><a href="#MySQL.Generator.show_sql-467"><span class="linenos">467</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="MySQL.Generator.show_sql-468"><a href="#MySQL.Generator.show_sql-468"><span class="linenos">468</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="MySQL.Generator.show_sql-469"><a href="#MySQL.Generator.show_sql-469"><span class="linenos">469</span></a>
-</span><span id="MySQL.Generator.show_sql-470"><a href="#MySQL.Generator.show_sql-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MySQL.Generator.show_sql-433"><a href="#MySQL.Generator.show_sql-433"><span class="linenos">433</span></a> <span class="k">def</span> <span class="nf">show_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Show</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-434"><a href="#MySQL.Generator.show_sql-434"><span class="linenos">434</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">expression</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL.Generator.show_sql-435"><a href="#MySQL.Generator.show_sql-435"><span class="linenos">435</span></a> <span class="n">full</span> <span class="o">=</span> <span class="s2">&quot; FULL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;full&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator.show_sql-436"><a href="#MySQL.Generator.show_sql-436"><span class="linenos">436</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="MySQL.Generator.show_sql-437"><a href="#MySQL.Generator.show_sql-437"><span class="linenos">437</span></a>
+</span><span id="MySQL.Generator.show_sql-438"><a href="#MySQL.Generator.show_sql-438"><span class="linenos">438</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="MySQL.Generator.show_sql-439"><a href="#MySQL.Generator.show_sql-439"><span class="linenos">439</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </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="MySQL.Generator.show_sql-440"><a href="#MySQL.Generator.show_sql-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="p">{</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">}:</span>
+</span><span id="MySQL.Generator.show_sql-441"><a href="#MySQL.Generator.show_sql-441"><span class="linenos">441</span></a> <span class="n">target</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; FROM</span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="MySQL.Generator.show_sql-442"><a href="#MySQL.Generator.show_sql-442"><span class="linenos">442</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;GRANTS&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-443"><a href="#MySQL.Generator.show_sql-443"><span class="linenos">443</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><span id="MySQL.Generator.show_sql-444"><a href="#MySQL.Generator.show_sql-444"><span class="linenos">444</span></a>
+</span><span id="MySQL.Generator.show_sql-445"><a href="#MySQL.Generator.show_sql-445"><span class="linenos">445</span></a> <span class="n">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator.show_sql-446"><a href="#MySQL.Generator.show_sql-446"><span class="linenos">446</span></a>
+</span><span id="MySQL.Generator.show_sql-447"><a href="#MySQL.Generator.show_sql-447"><span class="linenos">447</span></a> <span class="n">like</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIKE&quot;</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="MySQL.Generator.show_sql-448"><a href="#MySQL.Generator.show_sql-448"><span class="linenos">448</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="MySQL.Generator.show_sql-449"><a href="#MySQL.Generator.show_sql-449"><span class="linenos">449</span></a>
+</span><span id="MySQL.Generator.show_sql-450"><a href="#MySQL.Generator.show_sql-450"><span class="linenos">450</span></a> <span class="n">types</span> <span class="o">=</span> <span class="bp">self</span><span 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;types&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator.show_sql-451"><a href="#MySQL.Generator.show_sql-451"><span class="linenos">451</span></a> <span class="n">types</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">types</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">types</span> <span class="k">else</span> <span class="n">types</span>
+</span><span id="MySQL.Generator.show_sql-452"><a href="#MySQL.Generator.show_sql-452"><span class="linenos">452</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR QUERY&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;query&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator.show_sql-453"><a href="#MySQL.Generator.show_sql-453"><span class="linenos">453</span></a>
+</span><span id="MySQL.Generator.show_sql-454"><a href="#MySQL.Generator.show_sql-454"><span class="linenos">454</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;PROFILE&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-455"><a href="#MySQL.Generator.show_sql-455"><span class="linenos">455</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;OFFSET&quot;</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="MySQL.Generator.show_sql-456"><a href="#MySQL.Generator.show_sql-456"><span class="linenos">456</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;LIMIT&quot;</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="MySQL.Generator.show_sql-457"><a href="#MySQL.Generator.show_sql-457"><span class="linenos">457</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-458"><a href="#MySQL.Generator.show_sql-458"><span class="linenos">458</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator.show_sql-459"><a href="#MySQL.Generator.show_sql-459"><span class="linenos">459</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_oldstyle_limit_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="MySQL.Generator.show_sql-460"><a href="#MySQL.Generator.show_sql-460"><span class="linenos">460</span></a>
+</span><span id="MySQL.Generator.show_sql-461"><a href="#MySQL.Generator.show_sql-461"><span class="linenos">461</span></a> <span class="n">log</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;log&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator.show_sql-462"><a href="#MySQL.Generator.show_sql-462"><span class="linenos">462</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</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="MySQL.Generator.show_sql-463"><a href="#MySQL.Generator.show_sql-463"><span class="linenos">463</span></a>
+</span><span id="MySQL.Generator.show_sql-464"><a href="#MySQL.Generator.show_sql-464"><span class="linenos">464</span></a> <span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prefixed_sql</span><span class="p">(</span><span class="s2">&quot;FOR CHANNEL&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">)</span>
+</span><span id="MySQL.Generator.show_sql-465"><a href="#MySQL.Generator.show_sql-465"><span class="linenos">465</span></a>
+</span><span id="MySQL.Generator.show_sql-466"><a href="#MySQL.Generator.show_sql-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-467"><a href="#MySQL.Generator.show_sql-467"><span class="linenos">467</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot; MUTEX&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mutex&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot; STATUS&quot;</span>
+</span><span id="MySQL.Generator.show_sql-468"><a href="#MySQL.Generator.show_sql-468"><span class="linenos">468</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="MySQL.Generator.show_sql-469"><a href="#MySQL.Generator.show_sql-469"><span class="linenos">469</span></a> <span class="n">mutex_or_status</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="MySQL.Generator.show_sql-470"><a href="#MySQL.Generator.show_sql-470"><span class="linenos">470</span></a>
+</span><span id="MySQL.Generator.show_sql-471"><a href="#MySQL.Generator.show_sql-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SHOW</span><span class="si">{</span><span class="n">full</span><span class="si">}{</span><span class="n">global_</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="n">types</span><span class="si">}{</span><span class="n">db</span><span class="si">}{</span><span class="n">query</span><span class="si">}{</span><span class="n">log</span><span class="si">}{</span><span class="n">position</span><span class="si">}{</span><span class="n">channel</span><span class="si">}{</span><span class="n">mutex_or_status</span><span class="si">}{</span><span class="n">like</span><span class="si">}{</span><span class="n">where</span><span class="si">}{</span><span class="n">offset</span><span class="si">}{</span><span class="n">limit</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -1683,7 +1686,7 @@ Default: True</li>
<dd id="MySQL.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="MySQL.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="MySQL.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="MySQL.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="MySQL.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="MySQL.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="MySQL.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="MySQL.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1692,6 +1695,7 @@ Default: True</li>
<dd id="MySQL.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="MySQL.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="MySQL.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="MySQL.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="MySQL.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="MySQL.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="MySQL.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/oracle.html b/docs/sqlglot/dialects/oracle.html
index a6534d3..df16a26 100644
--- a/docs/sqlglot/dialects/oracle.html
+++ b/docs/sqlglot/dialects/oracle.html
@@ -122,146 +122,157 @@
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="k">class</span> <span class="nc">Oracle</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Abbreviated name of month</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="p">}</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="p">}</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="p">}</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="p">)</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="p">}</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">return</span> <span class="n">column</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="p">}</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="p">),</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="p">}</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="p">}</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="p">)</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="p">}</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">True</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="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
+</span><span id="L-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 class="c1"># Abbreviated name of month</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</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-62"><a href="#L-62"><span class="linenos"> 62</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-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="p">}</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="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-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">WINDOW_BEFORE_PAREN_TOKENS</span> <span class="o">=</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="n">TokenType</span><span class="o">.</span><span class="n">KEEP</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">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
+</span><span id="L-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="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">}</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="p">)</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <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="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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">return</span> <span class="n">column</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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">_curr</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="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-97"><a href="#L-97"><span class="linenos"> 97</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-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="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
+</span><span id="L-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">return</span> <span class="kc">None</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="k">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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">TYPE_MAPPING</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</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><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">TRANSFORMS</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
+</span><span id="L-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="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-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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_distinct_on</span><span class="p">]),</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</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-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
+</span><span id="L-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><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</span></a> <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="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</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">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-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
+</span><span id="L-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">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">by_ref</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="p">)</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-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">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-171"><a href="#L-171"><span class="linenos">171</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-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="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="s2">&quot;BINARY_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-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="s2">&quot;BINARY_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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</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-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="p">}</span>
</span></pre></div>
@@ -278,146 +289,157 @@
</div>
<a class="headerlink" href="#Oracle"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Oracle-37"><a href="#Oracle-37"><span class="linenos"> 37</span></a><span class="k">class</span> <span class="nc">Oracle</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="Oracle-38"><a href="#Oracle-38"><span class="linenos"> 38</span></a> <span class="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
-</span><span id="Oracle-39"><a href="#Oracle-39"><span class="linenos"> 39</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
-</span><span id="Oracle-40"><a href="#Oracle-40"><span class="linenos"> 40</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-41"><a href="#Oracle-41"><span class="linenos"> 41</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="Oracle-42"><a href="#Oracle-42"><span class="linenos"> 42</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="Oracle-43"><a href="#Oracle-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="Oracle-44"><a href="#Oracle-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
-</span><span id="Oracle-45"><a href="#Oracle-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
-</span><span id="Oracle-46"><a href="#Oracle-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
-</span><span id="Oracle-47"><a href="#Oracle-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
-</span><span id="Oracle-48"><a href="#Oracle-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
-</span><span id="Oracle-49"><a href="#Oracle-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
-</span><span id="Oracle-50"><a href="#Oracle-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
-</span><span id="Oracle-51"><a href="#Oracle-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
-</span><span id="Oracle-52"><a href="#Oracle-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
-</span><span id="Oracle-53"><a href="#Oracle-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
-</span><span id="Oracle-54"><a href="#Oracle-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
-</span><span id="Oracle-55"><a href="#Oracle-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
-</span><span id="Oracle-56"><a href="#Oracle-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MON&quot;</span><span class="p">:</span> <span class="s2">&quot;%b&quot;</span><span class="p">,</span> <span class="c1"># Abbreviated name of month</span>
-</span><span id="Oracle-57"><a href="#Oracle-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
-</span><span id="Oracle-58"><a href="#Oracle-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
-</span><span id="Oracle-59"><a href="#Oracle-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
-</span><span id="Oracle-60"><a href="#Oracle-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
-</span><span id="Oracle-61"><a href="#Oracle-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
-</span><span id="Oracle-62"><a href="#Oracle-62"><span class="linenos"> 62</span></a> <span class="p">}</span>
-</span><span id="Oracle-63"><a href="#Oracle-63"><span class="linenos"> 63</span></a>
-</span><span id="Oracle-64"><a href="#Oracle-64"><span class="linenos"> 64</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Oracle-65"><a href="#Oracle-65"><span class="linenos"> 65</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-66"><a href="#Oracle-66"><span class="linenos"> 66</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle-67"><a href="#Oracle-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
-</span><span id="Oracle-68"><a href="#Oracle-68"><span class="linenos"> 68</span></a> <span class="p">}</span>
-</span><span id="Oracle-69"><a href="#Oracle-69"><span class="linenos"> 69</span></a>
-</span><span id="Oracle-70"><a href="#Oracle-70"><span class="linenos"> 70</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-71"><a href="#Oracle-71"><span class="linenos"> 71</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Oracle-72"><a href="#Oracle-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
-</span><span id="Oracle-73"><a href="#Oracle-73"><span class="linenos"> 73</span></a> <span class="p">}</span>
-</span><span id="Oracle-74"><a href="#Oracle-74"><span class="linenos"> 74</span></a>
-</span><span id="Oracle-75"><a href="#Oracle-75"><span class="linenos"> 75</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-76"><a href="#Oracle-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Oracle-77"><a href="#Oracle-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
-</span><span id="Oracle-78"><a href="#Oracle-78"><span class="linenos"> 78</span></a> <span class="p">)</span>
-</span><span id="Oracle-79"><a href="#Oracle-79"><span class="linenos"> 79</span></a> <span class="p">}</span>
-</span><span id="Oracle-80"><a href="#Oracle-80"><span class="linenos"> 80</span></a>
-</span><span id="Oracle-81"><a href="#Oracle-81"><span class="linenos"> 81</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Oracle-82"><a href="#Oracle-82"><span class="linenos"> 82</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Oracle-83"><a href="#Oracle-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
-</span><span id="Oracle-84"><a href="#Oracle-84"><span class="linenos"> 84</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
-</span><span id="Oracle-85"><a href="#Oracle-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="n">column</span>
-</span><span id="Oracle-86"><a href="#Oracle-86"><span class="linenos"> 86</span></a>
-</span><span id="Oracle-87"><a href="#Oracle-87"><span class="linenos"> 87</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Oracle-88"><a href="#Oracle-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="Oracle-89"><a href="#Oracle-89"><span class="linenos"> 89</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="Oracle-90"><a href="#Oracle-90"><span class="linenos"> 90</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="Oracle-91"><a href="#Oracle-91"><span class="linenos"> 91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Oracle-92"><a href="#Oracle-92"><span class="linenos"> 92</span></a>
-</span><span id="Oracle-93"><a href="#Oracle-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Oracle-94"><a href="#Oracle-94"><span class="linenos"> 94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="Oracle-95"><a href="#Oracle-95"><span class="linenos"> 95</span></a>
-</span><span id="Oracle-96"><a href="#Oracle-96"><span class="linenos"> 96</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
-</span><span id="Oracle-97"><a href="#Oracle-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
-</span><span id="Oracle-98"><a href="#Oracle-98"><span class="linenos"> 98</span></a>
-</span><span id="Oracle-99"><a href="#Oracle-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Oracle-100"><a href="#Oracle-100"><span class="linenos">100</span></a>
-</span><span id="Oracle-101"><a href="#Oracle-101"><span class="linenos">101</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Oracle-102"><a href="#Oracle-102"><span class="linenos">102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Oracle-103"><a href="#Oracle-103"><span class="linenos">103</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Oracle-104"><a href="#Oracle-104"><span class="linenos">104</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Oracle-105"><a href="#Oracle-105"><span class="linenos">105</span></a>
-</span><span id="Oracle-106"><a href="#Oracle-106"><span class="linenos">106</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-107"><a href="#Oracle-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle-108"><a href="#Oracle-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle-109"><a href="#Oracle-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle-110"><a href="#Oracle-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle-111"><a href="#Oracle-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle-112"><a href="#Oracle-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle-113"><a href="#Oracle-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="Oracle-114"><a href="#Oracle-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
-</span><span id="Oracle-115"><a href="#Oracle-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
-</span><span id="Oracle-116"><a href="#Oracle-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
-</span><span id="Oracle-117"><a href="#Oracle-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Oracle-118"><a href="#Oracle-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Oracle-119"><a href="#Oracle-119"><span class="linenos">119</span></a> <span class="p">}</span>
-</span><span id="Oracle-120"><a href="#Oracle-120"><span class="linenos">120</span></a>
-</span><span id="Oracle-121"><a href="#Oracle-121"><span class="linenos">121</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-122"><a href="#Oracle-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle-123"><a href="#Oracle-123"><span class="linenos">123</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle-124"><a href="#Oracle-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Oracle-125"><a href="#Oracle-125"><span class="linenos">125</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
-</span><span id="Oracle-126"><a href="#Oracle-126"><span class="linenos">126</span></a> <span class="p">),</span>
-</span><span id="Oracle-127"><a href="#Oracle-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
-</span><span id="Oracle-128"><a href="#Oracle-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="Oracle-129"><a href="#Oracle-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Oracle-130"><a href="#Oracle-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
-</span><span id="Oracle-131"><a href="#Oracle-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
-</span><span id="Oracle-132"><a href="#Oracle-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
-</span><span id="Oracle-133"><a href="#Oracle-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Oracle-134"><a href="#Oracle-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Oracle-135"><a href="#Oracle-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="Oracle-136"><a href="#Oracle-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
-</span><span id="Oracle-137"><a href="#Oracle-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
-</span><span id="Oracle-138"><a href="#Oracle-138"><span class="linenos">138</span></a> <span class="p">}</span>
-</span><span id="Oracle-139"><a href="#Oracle-139"><span class="linenos">139</span></a>
-</span><span id="Oracle-140"><a href="#Oracle-140"><span class="linenos">140</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-141"><a href="#Oracle-141"><span class="linenos">141</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle-142"><a href="#Oracle-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Oracle-143"><a href="#Oracle-143"><span class="linenos">143</span></a> <span class="p">}</span>
-</span><span id="Oracle-144"><a href="#Oracle-144"><span class="linenos">144</span></a>
-</span><span id="Oracle-145"><a href="#Oracle-145"><span class="linenos">145</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="Oracle-146"><a href="#Oracle-146"><span class="linenos">146</span></a>
-</span><span id="Oracle-147"><a href="#Oracle-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle-148"><a href="#Oracle-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
-</span><span id="Oracle-149"><a href="#Oracle-149"><span class="linenos">149</span></a>
-</span><span id="Oracle-150"><a href="#Oracle-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle-151"><a href="#Oracle-151"><span class="linenos">151</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Oracle-152"><a href="#Oracle-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
-</span><span id="Oracle-153"><a href="#Oracle-153"><span class="linenos">153</span></a>
-</span><span id="Oracle-154"><a href="#Oracle-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle-155"><a href="#Oracle-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Oracle-156"><a href="#Oracle-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
-</span><span id="Oracle-157"><a href="#Oracle-157"><span class="linenos">157</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle-158"><a href="#Oracle-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
-</span><span id="Oracle-159"><a href="#Oracle-159"><span class="linenos">159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle-160"><a href="#Oracle-160"><span class="linenos">160</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Oracle-161"><a href="#Oracle-161"><span class="linenos">161</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle-162"><a href="#Oracle-162"><span class="linenos">162</span></a> <span class="p">)</span>
-</span><span id="Oracle-163"><a href="#Oracle-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Oracle-164"><a href="#Oracle-164"><span class="linenos">164</span></a>
-</span><span id="Oracle-165"><a href="#Oracle-165"><span class="linenos">165</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Oracle-166"><a href="#Oracle-166"><span class="linenos">166</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle-167"><a href="#Oracle-167"><span class="linenos">167</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="Oracle-168"><a href="#Oracle-168"><span class="linenos">168</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
-</span><span id="Oracle-169"><a href="#Oracle-169"><span class="linenos">169</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
-</span><span id="Oracle-170"><a href="#Oracle-170"><span class="linenos">170</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
-</span><span id="Oracle-171"><a href="#Oracle-171"><span class="linenos">171</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="Oracle-172"><a href="#Oracle-172"><span class="linenos">172</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="Oracle-173"><a href="#Oracle-173"><span class="linenos">173</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
-</span><span id="Oracle-174"><a href="#Oracle-174"><span class="linenos">174</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Oracle-175"><a href="#Oracle-175"><span class="linenos">175</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="Oracle-176"><a href="#Oracle-176"><span class="linenos">176</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="Oracle-177"><a href="#Oracle-177"><span class="linenos">177</span></a> <span class="p">}</span>
+</span><span id="Oracle-38"><a href="#Oracle-38"><span class="linenos"> 38</span></a> <span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Oracle-39"><a href="#Oracle-39"><span class="linenos"> 39</span></a>
+</span><span id="Oracle-40"><a href="#Oracle-40"><span class="linenos"> 40</span></a> <span class="c1"># https://docs.oracle.com/database/121/SQLRF/sql_elements004.htm#SQLRF00212</span>
+</span><span id="Oracle-41"><a href="#Oracle-41"><span class="linenos"> 41</span></a> <span class="c1"># https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes</span>
+</span><span id="Oracle-42"><a href="#Oracle-42"><span class="linenos"> 42</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-43"><a href="#Oracle-43"><span class="linenos"> 43</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="Oracle-44"><a href="#Oracle-44"><span class="linenos"> 44</span></a> <span class="s2">&quot;A.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="Oracle-45"><a href="#Oracle-45"><span class="linenos"> 45</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="Oracle-46"><a href="#Oracle-46"><span class="linenos"> 46</span></a> <span class="s2">&quot;P.M.&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span> <span class="c1"># Meridian indicator with or without periods</span>
+</span><span id="Oracle-47"><a href="#Oracle-47"><span class="linenos"> 47</span></a> <span class="s2">&quot;D&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%u</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># Day of week (1-7)</span>
+</span><span id="Oracle-48"><a href="#Oracle-48"><span class="linenos"> 48</span></a> <span class="s2">&quot;DAY&quot;</span><span class="p">:</span> <span class="s2">&quot;%A&quot;</span><span class="p">,</span> <span class="c1"># name of day</span>
+</span><span id="Oracle-49"><a href="#Oracle-49"><span class="linenos"> 49</span></a> <span class="s2">&quot;DD&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># day of month (1-31)</span>
+</span><span id="Oracle-50"><a href="#Oracle-50"><span class="linenos"> 50</span></a> <span class="s2">&quot;DDD&quot;</span><span class="p">:</span> <span class="s2">&quot;%j&quot;</span><span class="p">,</span> <span class="c1"># day of year (1-366)</span>
+</span><span id="Oracle-51"><a href="#Oracle-51"><span class="linenos"> 51</span></a> <span class="s2">&quot;DY&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="si">%a</span><span class="s2">&quot;</span><span class="p">,</span> <span class="c1"># abbreviated name of day</span>
+</span><span id="Oracle-52"><a href="#Oracle-52"><span class="linenos"> 52</span></a> <span class="s2">&quot;HH&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (1-12)</span>
+</span><span id="Oracle-53"><a href="#Oracle-53"><span class="linenos"> 53</span></a> <span class="s2">&quot;HH12&quot;</span><span class="p">:</span> <span class="s2">&quot;%I&quot;</span><span class="p">,</span> <span class="c1"># alias for HH</span>
+</span><span id="Oracle-54"><a href="#Oracle-54"><span class="linenos"> 54</span></a> <span class="s2">&quot;HH24&quot;</span><span class="p">:</span> <span class="s2">&quot;%H&quot;</span><span class="p">,</span> <span class="c1"># Hour of day (0-23)</span>
+</span><span id="Oracle-55"><a href="#Oracle-55"><span class="linenos"> 55</span></a> <span class="s2">&quot;IW&quot;</span><span class="p">:</span> <span class="s2">&quot;%V&quot;</span><span class="p">,</span> <span class="c1"># Calendar week of year (1-52 or 1-53), as defined by the ISO 8601 standard</span>
+</span><span id="Oracle-56"><a href="#Oracle-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MI&quot;</span><span class="p">:</span> <span class="s2">&quot;%M&quot;</span><span class="p">,</span> <span class="c1"># Minute (0-59)</span>
+</span><span id="Oracle-57"><a href="#Oracle-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MM&quot;</span><span class="p">:</span> <span class="s2">&quot;%m&quot;</span><span class="p">,</span> <span class="c1"># Month (01-12; January = 01)</span>
+</span><span id="Oracle-58"><a href="#Oracle-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 class="c1"># Abbreviated name of month</span>
+</span><span id="Oracle-59"><a href="#Oracle-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span> <span class="s2">&quot;%B&quot;</span><span class="p">,</span> <span class="c1"># Name of month</span>
+</span><span id="Oracle-60"><a href="#Oracle-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;SS&quot;</span><span class="p">:</span> <span class="s2">&quot;%S&quot;</span><span class="p">,</span> <span class="c1"># Second (0-59)</span>
+</span><span id="Oracle-61"><a href="#Oracle-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;WW&quot;</span><span class="p">:</span> <span class="s2">&quot;%W&quot;</span><span class="p">,</span> <span class="c1"># Week of year (1-53)</span>
+</span><span id="Oracle-62"><a href="#Oracle-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;YY&quot;</span><span class="p">:</span> <span class="s2">&quot;%y&quot;</span><span class="p">,</span> <span class="c1"># 15</span>
+</span><span id="Oracle-63"><a href="#Oracle-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;YYYY&quot;</span><span class="p">:</span> <span class="s2">&quot;%Y&quot;</span><span class="p">,</span> <span class="c1"># 2015</span>
+</span><span id="Oracle-64"><a href="#Oracle-64"><span class="linenos"> 64</span></a> <span class="p">}</span>
+</span><span id="Oracle-65"><a href="#Oracle-65"><span class="linenos"> 65</span></a>
+</span><span id="Oracle-66"><a href="#Oracle-66"><span class="linenos"> 66</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Oracle-67"><a href="#Oracle-67"><span class="linenos"> 67</span></a> <span class="n">WINDOW_BEFORE_PAREN_TOKENS</span> <span class="o">=</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="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">}</span>
+</span><span id="Oracle-68"><a href="#Oracle-68"><span class="linenos"> 68</span></a>
+</span><span id="Oracle-69"><a href="#Oracle-69"><span class="linenos"> 69</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-70"><a href="#Oracle-70"><span class="linenos"> 70</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle-71"><a href="#Oracle-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
+</span><span id="Oracle-72"><a href="#Oracle-72"><span class="linenos"> 72</span></a> <span class="p">}</span>
+</span><span id="Oracle-73"><a href="#Oracle-73"><span class="linenos"> 73</span></a>
+</span><span id="Oracle-74"><a href="#Oracle-74"><span class="linenos"> 74</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-75"><a href="#Oracle-75"><span class="linenos"> 75</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Oracle-76"><a href="#Oracle-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
+</span><span id="Oracle-77"><a href="#Oracle-77"><span class="linenos"> 77</span></a> <span class="p">}</span>
+</span><span id="Oracle-78"><a href="#Oracle-78"><span class="linenos"> 78</span></a>
+</span><span id="Oracle-79"><a href="#Oracle-79"><span class="linenos"> 79</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-80"><a href="#Oracle-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Oracle-81"><a href="#Oracle-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
+</span><span id="Oracle-82"><a href="#Oracle-82"><span class="linenos"> 82</span></a> <span class="p">)</span>
+</span><span id="Oracle-83"><a href="#Oracle-83"><span class="linenos"> 83</span></a> <span class="p">}</span>
+</span><span id="Oracle-84"><a href="#Oracle-84"><span class="linenos"> 84</span></a>
+</span><span id="Oracle-85"><a href="#Oracle-85"><span class="linenos"> 85</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Oracle-86"><a href="#Oracle-86"><span class="linenos"> 86</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Oracle-87"><a href="#Oracle-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
+</span><span id="Oracle-88"><a href="#Oracle-88"><span class="linenos"> 88</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
+</span><span id="Oracle-89"><a href="#Oracle-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="n">column</span>
+</span><span id="Oracle-90"><a href="#Oracle-90"><span class="linenos"> 90</span></a>
+</span><span id="Oracle-91"><a href="#Oracle-91"><span class="linenos"> 91</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Oracle-92"><a href="#Oracle-92"><span class="linenos"> 92</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
+</span><span id="Oracle-93"><a href="#Oracle-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">_curr</span>
+</span><span id="Oracle-94"><a href="#Oracle-94"><span class="linenos"> 94</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
+</span><span id="Oracle-95"><a href="#Oracle-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Oracle-96"><a href="#Oracle-96"><span class="linenos"> 96</span></a>
+</span><span id="Oracle-97"><a href="#Oracle-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Oracle-98"><a href="#Oracle-98"><span class="linenos"> 98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
+</span><span id="Oracle-99"><a href="#Oracle-99"><span class="linenos"> 99</span></a>
+</span><span id="Oracle-100"><a href="#Oracle-100"><span class="linenos">100</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
+</span><span id="Oracle-101"><a href="#Oracle-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
+</span><span id="Oracle-102"><a href="#Oracle-102"><span class="linenos">102</span></a>
+</span><span id="Oracle-103"><a href="#Oracle-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Oracle-104"><a href="#Oracle-104"><span class="linenos">104</span></a>
+</span><span id="Oracle-105"><a href="#Oracle-105"><span class="linenos">105</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Oracle-106"><a href="#Oracle-106"><span class="linenos">106</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Oracle-107"><a href="#Oracle-107"><span class="linenos">107</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle-108"><a href="#Oracle-108"><span class="linenos">108</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle-109"><a href="#Oracle-109"><span class="linenos">109</span></a>
+</span><span id="Oracle-110"><a href="#Oracle-110"><span class="linenos">110</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-111"><a href="#Oracle-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle-112"><a href="#Oracle-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle-113"><a href="#Oracle-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle-114"><a href="#Oracle-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle-115"><a href="#Oracle-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle-116"><a href="#Oracle-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle-117"><a href="#Oracle-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="Oracle-118"><a href="#Oracle-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="Oracle-119"><a href="#Oracle-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="Oracle-120"><a href="#Oracle-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle-121"><a href="#Oracle-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle-122"><a href="#Oracle-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle-123"><a href="#Oracle-123"><span class="linenos">123</span></a> <span class="p">}</span>
+</span><span id="Oracle-124"><a href="#Oracle-124"><span class="linenos">124</span></a>
+</span><span id="Oracle-125"><a href="#Oracle-125"><span class="linenos">125</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-126"><a href="#Oracle-126"><span class="linenos">126</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle-127"><a href="#Oracle-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Oracle-128"><a href="#Oracle-128"><span class="linenos">128</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
+</span><span id="Oracle-129"><a href="#Oracle-129"><span class="linenos">129</span></a> <span class="p">),</span>
+</span><span id="Oracle-130"><a href="#Oracle-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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="Oracle-131"><a href="#Oracle-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
+</span><span id="Oracle-132"><a href="#Oracle-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="Oracle-133"><a href="#Oracle-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
+</span><span id="Oracle-134"><a href="#Oracle-134"><span class="linenos">134</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Oracle-135"><a href="#Oracle-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Oracle-136"><a href="#Oracle-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="Oracle-137"><a href="#Oracle-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
+</span><span id="Oracle-138"><a href="#Oracle-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="Oracle-139"><a href="#Oracle-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="Oracle-140"><a href="#Oracle-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Oracle-141"><a href="#Oracle-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Oracle-142"><a href="#Oracle-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
+</span><span id="Oracle-143"><a href="#Oracle-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
+</span><span id="Oracle-144"><a href="#Oracle-144"><span class="linenos">144</span></a> <span class="p">}</span>
+</span><span id="Oracle-145"><a href="#Oracle-145"><span class="linenos">145</span></a>
+</span><span id="Oracle-146"><a href="#Oracle-146"><span class="linenos">146</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-147"><a href="#Oracle-147"><span class="linenos">147</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle-148"><a href="#Oracle-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Oracle-149"><a href="#Oracle-149"><span class="linenos">149</span></a> <span class="p">}</span>
+</span><span id="Oracle-150"><a href="#Oracle-150"><span class="linenos">150</span></a>
+</span><span id="Oracle-151"><a href="#Oracle-151"><span class="linenos">151</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="Oracle-152"><a href="#Oracle-152"><span class="linenos">152</span></a>
+</span><span id="Oracle-153"><a href="#Oracle-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle-154"><a href="#Oracle-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="Oracle-155"><a href="#Oracle-155"><span class="linenos">155</span></a>
+</span><span id="Oracle-156"><a href="#Oracle-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle-157"><a href="#Oracle-157"><span class="linenos">157</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Oracle-158"><a href="#Oracle-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
+</span><span id="Oracle-159"><a href="#Oracle-159"><span class="linenos">159</span></a>
+</span><span id="Oracle-160"><a href="#Oracle-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle-161"><a href="#Oracle-161"><span class="linenos">161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Oracle-162"><a href="#Oracle-162"><span class="linenos">162</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
+</span><span id="Oracle-163"><a href="#Oracle-163"><span class="linenos">163</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle-164"><a href="#Oracle-164"><span class="linenos">164</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
+</span><span id="Oracle-165"><a href="#Oracle-165"><span class="linenos">165</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle-166"><a href="#Oracle-166"><span class="linenos">166</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Oracle-167"><a href="#Oracle-167"><span class="linenos">167</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle-168"><a href="#Oracle-168"><span class="linenos">168</span></a> <span class="p">)</span>
+</span><span id="Oracle-169"><a href="#Oracle-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Oracle-170"><a href="#Oracle-170"><span class="linenos">170</span></a>
+</span><span id="Oracle-171"><a href="#Oracle-171"><span class="linenos">171</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Oracle-172"><a href="#Oracle-172"><span class="linenos">172</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="Oracle-173"><a href="#Oracle-173"><span class="linenos">173</span></a>
+</span><span id="Oracle-174"><a href="#Oracle-174"><span class="linenos">174</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle-175"><a href="#Oracle-175"><span class="linenos">175</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="Oracle-176"><a href="#Oracle-176"><span class="linenos">176</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
+</span><span id="Oracle-177"><a href="#Oracle-177"><span class="linenos">177</span></a> <span class="s2">&quot;BINARY_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="Oracle-178"><a href="#Oracle-178"><span class="linenos">178</span></a> <span class="s2">&quot;BINARY_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="Oracle-179"><a href="#Oracle-179"><span class="linenos">179</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
+</span><span id="Oracle-180"><a href="#Oracle-180"><span class="linenos">180</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
+</span><span id="Oracle-181"><a href="#Oracle-181"><span class="linenos">181</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
+</span><span id="Oracle-182"><a href="#Oracle-182"><span class="linenos">182</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="Oracle-183"><a href="#Oracle-183"><span class="linenos">183</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
+</span><span id="Oracle-184"><a href="#Oracle-184"><span class="linenos">184</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="Oracle-185"><a href="#Oracle-185"><span class="linenos">185</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="Oracle-186"><a href="#Oracle-186"><span class="linenos">186</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="Oracle-187"><a href="#Oracle-187"><span class="linenos">187</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="Oracle-188"><a href="#Oracle-188"><span class="linenos">188</span></a> <span class="p">}</span>
</span></pre></div>
@@ -452,42 +474,44 @@
</div>
<a class="headerlink" href="#Oracle.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Parser-64"><a href="#Oracle.Parser-64"><span class="linenos">64</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Oracle.Parser-65"><a href="#Oracle.Parser-65"><span class="linenos">65</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Parser-66"><a href="#Oracle.Parser-66"><span class="linenos">66</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle.Parser-67"><a href="#Oracle.Parser-67"><span class="linenos">67</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
-</span><span id="Oracle.Parser-68"><a href="#Oracle.Parser-68"><span class="linenos">68</span></a> <span class="p">}</span>
-</span><span id="Oracle.Parser-69"><a href="#Oracle.Parser-69"><span class="linenos">69</span></a>
-</span><span id="Oracle.Parser-70"><a href="#Oracle.Parser-70"><span class="linenos">70</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Parser-71"><a href="#Oracle.Parser-71"><span class="linenos">71</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
-</span><span id="Oracle.Parser-72"><a href="#Oracle.Parser-72"><span class="linenos">72</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
-</span><span id="Oracle.Parser-73"><a href="#Oracle.Parser-73"><span class="linenos">73</span></a> <span class="p">}</span>
-</span><span id="Oracle.Parser-74"><a href="#Oracle.Parser-74"><span class="linenos">74</span></a>
-</span><span id="Oracle.Parser-75"><a href="#Oracle.Parser-75"><span class="linenos">75</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Parser-76"><a href="#Oracle.Parser-76"><span class="linenos">76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Oracle.Parser-77"><a href="#Oracle.Parser-77"><span class="linenos">77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
-</span><span id="Oracle.Parser-78"><a href="#Oracle.Parser-78"><span class="linenos">78</span></a> <span class="p">)</span>
-</span><span id="Oracle.Parser-79"><a href="#Oracle.Parser-79"><span class="linenos">79</span></a> <span class="p">}</span>
-</span><span id="Oracle.Parser-80"><a href="#Oracle.Parser-80"><span class="linenos">80</span></a>
-</span><span id="Oracle.Parser-81"><a href="#Oracle.Parser-81"><span class="linenos">81</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Oracle.Parser-82"><a href="#Oracle.Parser-82"><span class="linenos">82</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Oracle.Parser-83"><a href="#Oracle.Parser-83"><span class="linenos">83</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
-</span><span id="Oracle.Parser-84"><a href="#Oracle.Parser-84"><span class="linenos">84</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
-</span><span id="Oracle.Parser-85"><a href="#Oracle.Parser-85"><span class="linenos">85</span></a> <span class="k">return</span> <span class="n">column</span>
-</span><span id="Oracle.Parser-86"><a href="#Oracle.Parser-86"><span class="linenos">86</span></a>
-</span><span id="Oracle.Parser-87"><a href="#Oracle.Parser-87"><span class="linenos">87</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Oracle.Parser-88"><a href="#Oracle.Parser-88"><span class="linenos">88</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="Oracle.Parser-89"><a href="#Oracle.Parser-89"><span class="linenos">89</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="Oracle.Parser-90"><a href="#Oracle.Parser-90"><span class="linenos">90</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="Oracle.Parser-91"><a href="#Oracle.Parser-91"><span class="linenos">91</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Oracle.Parser-92"><a href="#Oracle.Parser-92"><span class="linenos">92</span></a>
-</span><span id="Oracle.Parser-93"><a href="#Oracle.Parser-93"><span class="linenos">93</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Oracle.Parser-94"><a href="#Oracle.Parser-94"><span class="linenos">94</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Parser-95"><a href="#Oracle.Parser-95"><span class="linenos">95</span></a>
-</span><span id="Oracle.Parser-96"><a href="#Oracle.Parser-96"><span class="linenos">96</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
-</span><span id="Oracle.Parser-97"><a href="#Oracle.Parser-97"><span class="linenos">97</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
-</span><span id="Oracle.Parser-98"><a href="#Oracle.Parser-98"><span class="linenos">98</span></a>
-</span><span id="Oracle.Parser-99"><a href="#Oracle.Parser-99"><span class="linenos">99</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Parser-66"><a href="#Oracle.Parser-66"><span class="linenos"> 66</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Oracle.Parser-67"><a href="#Oracle.Parser-67"><span class="linenos"> 67</span></a> <span class="n">WINDOW_BEFORE_PAREN_TOKENS</span> <span class="o">=</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="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">}</span>
+</span><span id="Oracle.Parser-68"><a href="#Oracle.Parser-68"><span class="linenos"> 68</span></a>
+</span><span id="Oracle.Parser-69"><a href="#Oracle.Parser-69"><span class="linenos"> 69</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Parser-70"><a href="#Oracle.Parser-70"><span class="linenos"> 70</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle.Parser-71"><a href="#Oracle.Parser-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;SQUARE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
+</span><span id="Oracle.Parser-72"><a href="#Oracle.Parser-72"><span class="linenos"> 72</span></a> <span class="p">}</span>
+</span><span id="Oracle.Parser-73"><a href="#Oracle.Parser-73"><span class="linenos"> 73</span></a>
+</span><span id="Oracle.Parser-74"><a href="#Oracle.Parser-74"><span class="linenos"> 74</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Parser-75"><a href="#Oracle.Parser-75"><span class="linenos"> 75</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="p">,</span>
+</span><span id="Oracle.Parser-76"><a href="#Oracle.Parser-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="n">_parse_xml_table</span><span class="p">,</span>
+</span><span id="Oracle.Parser-77"><a href="#Oracle.Parser-77"><span class="linenos"> 77</span></a> <span class="p">}</span>
+</span><span id="Oracle.Parser-78"><a href="#Oracle.Parser-78"><span class="linenos"> 78</span></a>
+</span><span id="Oracle.Parser-79"><a href="#Oracle.Parser-79"><span class="linenos"> 79</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Parser-80"><a href="#Oracle.Parser-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Oracle.Parser-81"><a href="#Oracle.Parser-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span>
+</span><span id="Oracle.Parser-82"><a href="#Oracle.Parser-82"><span class="linenos"> 82</span></a> <span class="p">)</span>
+</span><span id="Oracle.Parser-83"><a href="#Oracle.Parser-83"><span class="linenos"> 83</span></a> <span class="p">}</span>
+</span><span id="Oracle.Parser-84"><a href="#Oracle.Parser-84"><span class="linenos"> 84</span></a>
+</span><span id="Oracle.Parser-85"><a href="#Oracle.Parser-85"><span class="linenos"> 85</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Oracle.Parser-86"><a href="#Oracle.Parser-86"><span class="linenos"> 86</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Oracle.Parser-87"><a href="#Oracle.Parser-87"><span class="linenos"> 87</span></a> <span class="k">if</span> <span class="n">column</span><span class="p">:</span>
+</span><span id="Oracle.Parser-88"><a href="#Oracle.Parser-88"><span class="linenos"> 88</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
+</span><span id="Oracle.Parser-89"><a href="#Oracle.Parser-89"><span class="linenos"> 89</span></a> <span class="k">return</span> <span class="n">column</span>
+</span><span id="Oracle.Parser-90"><a href="#Oracle.Parser-90"><span class="linenos"> 90</span></a>
+</span><span id="Oracle.Parser-91"><a href="#Oracle.Parser-91"><span class="linenos"> 91</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Oracle.Parser-92"><a href="#Oracle.Parser-92"><span class="linenos"> 92</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
+</span><span id="Oracle.Parser-93"><a href="#Oracle.Parser-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">_curr</span>
+</span><span id="Oracle.Parser-94"><a href="#Oracle.Parser-94"><span class="linenos"> 94</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
+</span><span id="Oracle.Parser-95"><a href="#Oracle.Parser-95"><span class="linenos"> 95</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Oracle.Parser-96"><a href="#Oracle.Parser-96"><span class="linenos"> 96</span></a>
+</span><span id="Oracle.Parser-97"><a href="#Oracle.Parser-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Oracle.Parser-98"><a href="#Oracle.Parser-98"><span class="linenos"> 98</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Parser-99"><a href="#Oracle.Parser-99"><span class="linenos"> 99</span></a>
+</span><span id="Oracle.Parser-100"><a href="#Oracle.Parser-100"><span class="linenos">100</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">3</span><span class="p">]</span>
+</span><span id="Oracle.Parser-101"><a href="#Oracle.Parser-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
+</span><span id="Oracle.Parser-102"><a href="#Oracle.Parser-102"><span class="linenos">102</span></a>
+</span><span id="Oracle.Parser-103"><a href="#Oracle.Parser-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -544,69 +568,71 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Oracle.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator-101"><a href="#Oracle.Generator-101"><span class="linenos">101</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Oracle.Generator-102"><a href="#Oracle.Generator-102"><span class="linenos">102</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Oracle.Generator-103"><a href="#Oracle.Generator-103"><span class="linenos">103</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Oracle.Generator-104"><a href="#Oracle.Generator-104"><span class="linenos">104</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Oracle.Generator-105"><a href="#Oracle.Generator-105"><span class="linenos">105</span></a>
-</span><span id="Oracle.Generator-106"><a href="#Oracle.Generator-106"><span class="linenos">106</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Generator-107"><a href="#Oracle.Generator-107"><span class="linenos">107</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle.Generator-108"><a href="#Oracle.Generator-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-109"><a href="#Oracle.Generator-109"><span class="linenos">109</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-110"><a href="#Oracle.Generator-110"><span class="linenos">110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-111"><a href="#Oracle.Generator-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-112"><a href="#Oracle.Generator-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-113"><a href="#Oracle.Generator-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-114"><a href="#Oracle.Generator-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-115"><a href="#Oracle.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-116"><a href="#Oracle.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-117"><a href="#Oracle.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-118"><a href="#Oracle.Generator-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-119"><a href="#Oracle.Generator-119"><span class="linenos">119</span></a> <span class="p">}</span>
-</span><span id="Oracle.Generator-120"><a href="#Oracle.Generator-120"><span class="linenos">120</span></a>
-</span><span id="Oracle.Generator-121"><a href="#Oracle.Generator-121"><span class="linenos">121</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Generator-122"><a href="#Oracle.Generator-122"><span class="linenos">122</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle.Generator-123"><a href="#Oracle.Generator-123"><span class="linenos">123</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle.Generator-124"><a href="#Oracle.Generator-124"><span class="linenos">124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Oracle.Generator-125"><a href="#Oracle.Generator-125"><span class="linenos">125</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Generator-126"><a href="#Oracle.Generator-126"><span class="linenos">126</span></a> <span class="p">),</span>
-</span><span id="Oracle.Generator-127"><a href="#Oracle.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-128"><a href="#Oracle.Generator-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="Oracle.Generator-129"><a href="#Oracle.Generator-129"><span class="linenos">129</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-130"><a href="#Oracle.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
-</span><span id="Oracle.Generator-131"><a href="#Oracle.Generator-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
-</span><span id="Oracle.Generator-132"><a href="#Oracle.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
-</span><span id="Oracle.Generator-133"><a href="#Oracle.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-134"><a href="#Oracle.Generator-134"><span class="linenos">134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
-</span><span id="Oracle.Generator-135"><a href="#Oracle.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
-</span><span id="Oracle.Generator-136"><a href="#Oracle.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
-</span><span id="Oracle.Generator-137"><a href="#Oracle.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
-</span><span id="Oracle.Generator-138"><a href="#Oracle.Generator-138"><span class="linenos">138</span></a> <span class="p">}</span>
-</span><span id="Oracle.Generator-139"><a href="#Oracle.Generator-139"><span class="linenos">139</span></a>
-</span><span id="Oracle.Generator-140"><a href="#Oracle.Generator-140"><span class="linenos">140</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Generator-141"><a href="#Oracle.Generator-141"><span class="linenos">141</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Oracle.Generator-142"><a href="#Oracle.Generator-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Oracle.Generator-143"><a href="#Oracle.Generator-143"><span class="linenos">143</span></a> <span class="p">}</span>
-</span><span id="Oracle.Generator-144"><a href="#Oracle.Generator-144"><span class="linenos">144</span></a>
-</span><span id="Oracle.Generator-145"><a href="#Oracle.Generator-145"><span class="linenos">145</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="Oracle.Generator-146"><a href="#Oracle.Generator-146"><span class="linenos">146</span></a>
-</span><span id="Oracle.Generator-147"><a href="#Oracle.Generator-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle.Generator-148"><a href="#Oracle.Generator-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
-</span><span id="Oracle.Generator-149"><a href="#Oracle.Generator-149"><span class="linenos">149</span></a>
-</span><span id="Oracle.Generator-150"><a href="#Oracle.Generator-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle.Generator-151"><a href="#Oracle.Generator-151"><span class="linenos">151</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Oracle.Generator-152"><a href="#Oracle.Generator-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
-</span><span id="Oracle.Generator-153"><a href="#Oracle.Generator-153"><span class="linenos">153</span></a>
-</span><span id="Oracle.Generator-154"><a href="#Oracle.Generator-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle.Generator-155"><a href="#Oracle.Generator-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Generator-156"><a href="#Oracle.Generator-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Generator-157"><a href="#Oracle.Generator-157"><span class="linenos">157</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle.Generator-158"><a href="#Oracle.Generator-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Generator-159"><a href="#Oracle.Generator-159"><span class="linenos">159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle.Generator-160"><a href="#Oracle.Generator-160"><span class="linenos">160</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Oracle.Generator-161"><a href="#Oracle.Generator-161"><span class="linenos">161</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle.Generator-162"><a href="#Oracle.Generator-162"><span class="linenos">162</span></a> <span class="p">)</span>
-</span><span id="Oracle.Generator-163"><a href="#Oracle.Generator-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator-105"><a href="#Oracle.Generator-105"><span class="linenos">105</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Oracle.Generator-106"><a href="#Oracle.Generator-106"><span class="linenos">106</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Oracle.Generator-107"><a href="#Oracle.Generator-107"><span class="linenos">107</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle.Generator-108"><a href="#Oracle.Generator-108"><span class="linenos">108</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Oracle.Generator-109"><a href="#Oracle.Generator-109"><span class="linenos">109</span></a>
+</span><span id="Oracle.Generator-110"><a href="#Oracle.Generator-110"><span class="linenos">110</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Generator-111"><a href="#Oracle.Generator-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle.Generator-112"><a href="#Oracle.Generator-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-113"><a href="#Oracle.Generator-113"><span class="linenos">113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-114"><a href="#Oracle.Generator-114"><span class="linenos">114</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-115"><a href="#Oracle.Generator-115"><span class="linenos">115</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-116"><a href="#Oracle.Generator-116"><span class="linenos">116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-117"><a href="#Oracle.Generator-117"><span class="linenos">117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-118"><a href="#Oracle.Generator-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">:</span> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-119"><a href="#Oracle.Generator-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">:</span> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-120"><a href="#Oracle.Generator-120"><span class="linenos">120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span> <span class="s2">&quot;CLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-121"><a href="#Oracle.Generator-121"><span class="linenos">121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-122"><a href="#Oracle.Generator-122"><span class="linenos">122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BLOB&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-123"><a href="#Oracle.Generator-123"><span class="linenos">123</span></a> <span class="p">}</span>
+</span><span id="Oracle.Generator-124"><a href="#Oracle.Generator-124"><span class="linenos">124</span></a>
+</span><span id="Oracle.Generator-125"><a href="#Oracle.Generator-125"><span class="linenos">125</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Generator-126"><a href="#Oracle.Generator-126"><span class="linenos">126</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle.Generator-127"><a href="#Oracle.Generator-127"><span class="linenos">127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Oracle.Generator-128"><a href="#Oracle.Generator-128"><span class="linenos">128</span></a> <span class="s2">&quot;TO_DATE&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;YYYY-MM-DD&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Generator-129"><a href="#Oracle.Generator-129"><span class="linenos">129</span></a> <span class="p">),</span>
+</span><span id="Oracle.Generator-130"><a href="#Oracle.Generator-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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="Oracle.Generator-131"><a href="#Oracle.Generator-131"><span class="linenos">131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-132"><a href="#Oracle.Generator-132"><span class="linenos">132</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="Oracle.Generator-133"><a href="#Oracle.Generator-133"><span class="linenos">133</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IfNull</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;NVL&quot;</span><span class="p">),</span>
+</span><span id="Oracle.Generator-134"><a href="#Oracle.Generator-134"><span class="linenos">134</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Oracle.Generator-135"><a href="#Oracle.Generator-135"><span class="linenos">135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-136"><a href="#Oracle.Generator-136"><span class="linenos">136</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="Oracle.Generator-137"><a href="#Oracle.Generator-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SUBSTR&quot;</span><span class="p">),</span>
+</span><span id="Oracle.Generator-138"><a href="#Oracle.Generator-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="Oracle.Generator-139"><a href="#Oracle.Generator-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">),</span>
+</span><span id="Oracle.Generator-140"><a href="#Oracle.Generator-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_CHAR(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-141"><a href="#Oracle.Generator-141"><span class="linenos">141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Oracle.Generator-142"><a href="#Oracle.Generator-142"><span class="linenos">142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
+</span><span id="Oracle.Generator-143"><a href="#Oracle.Generator-143"><span class="linenos">143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(&#39;1970-01-01&#39;,&#39;YYYY-MM-DD&#39;) + (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> / 86400)&quot;</span><span class="p">,</span>
+</span><span id="Oracle.Generator-144"><a href="#Oracle.Generator-144"><span class="linenos">144</span></a> <span class="p">}</span>
+</span><span id="Oracle.Generator-145"><a href="#Oracle.Generator-145"><span class="linenos">145</span></a>
+</span><span id="Oracle.Generator-146"><a href="#Oracle.Generator-146"><span class="linenos">146</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Generator-147"><a href="#Oracle.Generator-147"><span class="linenos">147</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Oracle.Generator-148"><a href="#Oracle.Generator-148"><span class="linenos">148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Oracle.Generator-149"><a href="#Oracle.Generator-149"><span class="linenos">149</span></a> <span class="p">}</span>
+</span><span id="Oracle.Generator-150"><a href="#Oracle.Generator-150"><span class="linenos">150</span></a>
+</span><span id="Oracle.Generator-151"><a href="#Oracle.Generator-151"><span class="linenos">151</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="Oracle.Generator-152"><a href="#Oracle.Generator-152"><span class="linenos">152</span></a>
+</span><span id="Oracle.Generator-153"><a href="#Oracle.Generator-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle.Generator-154"><a href="#Oracle.Generator-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="Oracle.Generator-155"><a href="#Oracle.Generator-155"><span class="linenos">155</span></a>
+</span><span id="Oracle.Generator-156"><a href="#Oracle.Generator-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle.Generator-157"><a href="#Oracle.Generator-157"><span class="linenos">157</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Oracle.Generator-158"><a href="#Oracle.Generator-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
+</span><span id="Oracle.Generator-159"><a href="#Oracle.Generator-159"><span class="linenos">159</span></a>
+</span><span id="Oracle.Generator-160"><a href="#Oracle.Generator-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle.Generator-161"><a href="#Oracle.Generator-161"><span class="linenos">161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Generator-162"><a href="#Oracle.Generator-162"><span class="linenos">162</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Generator-163"><a href="#Oracle.Generator-163"><span class="linenos">163</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle.Generator-164"><a href="#Oracle.Generator-164"><span class="linenos">164</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Generator-165"><a href="#Oracle.Generator-165"><span class="linenos">165</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle.Generator-166"><a href="#Oracle.Generator-166"><span class="linenos">166</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Oracle.Generator-167"><a href="#Oracle.Generator-167"><span class="linenos">167</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle.Generator-168"><a href="#Oracle.Generator-168"><span class="linenos">168</span></a> <span class="p">)</span>
+</span><span id="Oracle.Generator-169"><a href="#Oracle.Generator-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -665,8 +691,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Generator.offset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.offset_sql-147"><a href="#Oracle.Generator.offset_sql-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle.Generator.offset_sql-148"><a href="#Oracle.Generator.offset_sql-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.offset_sql-153"><a href="#Oracle.Generator.offset_sql-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle.Generator.offset_sql-154"><a href="#Oracle.Generator.offset_sql-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span></pre></div>
@@ -684,9 +710,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Generator.column_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.column_sql-150"><a href="#Oracle.Generator.column_sql-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle.Generator.column_sql-151"><a href="#Oracle.Generator.column_sql-151"><span class="linenos">151</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Oracle.Generator.column_sql-152"><a href="#Oracle.Generator.column_sql-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.column_sql-156"><a href="#Oracle.Generator.column_sql-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">column_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle.Generator.column_sql-157"><a href="#Oracle.Generator.column_sql-157"><span class="linenos">157</span></a> <span class="n">column</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">column_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Oracle.Generator.column_sql-158"><a href="#Oracle.Generator.column_sql-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> (+)&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">column</span>
</span></pre></div>
@@ -704,16 +730,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Generator.xmltable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.xmltable_sql-154"><a href="#Oracle.Generator.xmltable_sql-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Oracle.Generator.xmltable_sql-155"><a href="#Oracle.Generator.xmltable_sql-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Generator.xmltable_sql-156"><a href="#Oracle.Generator.xmltable_sql-156"><span class="linenos">156</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Generator.xmltable_sql-157"><a href="#Oracle.Generator.xmltable_sql-157"><span class="linenos">157</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle.Generator.xmltable_sql-158"><a href="#Oracle.Generator.xmltable_sql-158"><span class="linenos">158</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
-</span><span id="Oracle.Generator.xmltable_sql-159"><a href="#Oracle.Generator.xmltable_sql-159"><span class="linenos">159</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle.Generator.xmltable_sql-160"><a href="#Oracle.Generator.xmltable_sql-160"><span class="linenos">160</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Oracle.Generator.xmltable_sql-161"><a href="#Oracle.Generator.xmltable_sql-161"><span class="linenos">161</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Oracle.Generator.xmltable_sql-162"><a href="#Oracle.Generator.xmltable_sql-162"><span class="linenos">162</span></a> <span class="p">)</span>
-</span><span id="Oracle.Generator.xmltable_sql-163"><a href="#Oracle.Generator.xmltable_sql-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Generator.xmltable_sql-160"><a href="#Oracle.Generator.xmltable_sql-160"><span class="linenos">160</span></a> <span class="k">def</span> <span class="nf">xmltable_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Oracle.Generator.xmltable_sql-161"><a href="#Oracle.Generator.xmltable_sql-161"><span class="linenos">161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Generator.xmltable_sql-162"><a href="#Oracle.Generator.xmltable_sql-162"><span class="linenos">162</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;passing&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Generator.xmltable_sql-163"><a href="#Oracle.Generator.xmltable_sql-163"><span class="linenos">163</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">PASSING</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">passing</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">passing</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle.Generator.xmltable_sql-164"><a href="#Oracle.Generator.xmltable_sql-164"><span class="linenos">164</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span>
+</span><span id="Oracle.Generator.xmltable_sql-165"><a href="#Oracle.Generator.xmltable_sql-165"><span class="linenos">165</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">COLUMNS</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle.Generator.xmltable_sql-166"><a href="#Oracle.Generator.xmltable_sql-166"><span class="linenos">166</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Oracle.Generator.xmltable_sql-167"><a href="#Oracle.Generator.xmltable_sql-167"><span class="linenos">167</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">()</span><span class="si">}</span><span class="s2">RETURNING SEQUENCE BY REF&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;by_ref&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Oracle.Generator.xmltable_sql-168"><a href="#Oracle.Generator.xmltable_sql-168"><span class="linenos">168</span></a> <span class="p">)</span>
+</span><span id="Oracle.Generator.xmltable_sql-169"><a href="#Oracle.Generator.xmltable_sql-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;XMLTABLE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sep</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">passing</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">by_ref</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">seg</span><span class="p">(</span><span class="s1">&#39;)&#39;</span><span class="p">,</span><span class="w"> </span><span class="n">sep</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -842,7 +868,7 @@ Default: True</li>
<dd id="Oracle.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Oracle.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Oracle.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Oracle.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Oracle.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Oracle.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Oracle.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Oracle.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -851,6 +877,7 @@ Default: True</li>
<dd id="Oracle.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Oracle.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Oracle.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Oracle.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Oracle.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Oracle.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Oracle.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
@@ -962,19 +989,24 @@ Default: True</li>
</div>
<a class="headerlink" href="#Oracle.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Tokenizer-165"><a href="#Oracle.Tokenizer-165"><span class="linenos">165</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Oracle.Tokenizer-166"><a href="#Oracle.Tokenizer-166"><span class="linenos">166</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Oracle.Tokenizer-167"><a href="#Oracle.Tokenizer-167"><span class="linenos">167</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-168"><a href="#Oracle.Tokenizer-168"><span class="linenos">168</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-169"><a href="#Oracle.Tokenizer-169"><span class="linenos">169</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-170"><a href="#Oracle.Tokenizer-170"><span class="linenos">170</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-171"><a href="#Oracle.Tokenizer-171"><span class="linenos">171</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-172"><a href="#Oracle.Tokenizer-172"><span class="linenos">172</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-173"><a href="#Oracle.Tokenizer-173"><span class="linenos">173</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-174"><a href="#Oracle.Tokenizer-174"><span class="linenos">174</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-175"><a href="#Oracle.Tokenizer-175"><span class="linenos">175</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-176"><a href="#Oracle.Tokenizer-176"><span class="linenos">176</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="Oracle.Tokenizer-177"><a href="#Oracle.Tokenizer-177"><span class="linenos">177</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Oracle.Tokenizer-171"><a href="#Oracle.Tokenizer-171"><span class="linenos">171</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Oracle.Tokenizer-172"><a href="#Oracle.Tokenizer-172"><span class="linenos">172</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="Oracle.Tokenizer-173"><a href="#Oracle.Tokenizer-173"><span class="linenos">173</span></a>
+</span><span id="Oracle.Tokenizer-174"><a href="#Oracle.Tokenizer-174"><span class="linenos">174</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Oracle.Tokenizer-175"><a href="#Oracle.Tokenizer-175"><span class="linenos">175</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-176"><a href="#Oracle.Tokenizer-176"><span class="linenos">176</span></a> <span class="s2">&quot;(+)&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-177"><a href="#Oracle.Tokenizer-177"><span class="linenos">177</span></a> <span class="s2">&quot;BINARY_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="Oracle.Tokenizer-178"><a href="#Oracle.Tokenizer-178"><span class="linenos">178</span></a> <span class="s2">&quot;BINARY_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="Oracle.Tokenizer-179"><a href="#Oracle.Tokenizer-179"><span class="linenos">179</span></a> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-180"><a href="#Oracle.Tokenizer-180"><span class="linenos">180</span></a> <span class="s2">&quot;MATCH_RECOGNIZE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-181"><a href="#Oracle.Tokenizer-181"><span class="linenos">181</span></a> <span class="s2">&quot;MINUS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-182"><a href="#Oracle.Tokenizer-182"><span class="linenos">182</span></a> <span class="s2">&quot;NVARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-183"><a href="#Oracle.Tokenizer-183"><span class="linenos">183</span></a> <span class="s2">&quot;RETURNING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-184"><a href="#Oracle.Tokenizer-184"><span class="linenos">184</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="Oracle.Tokenizer-185"><a href="#Oracle.Tokenizer-185"><span class="linenos">185</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-186"><a href="#Oracle.Tokenizer-186"><span class="linenos">186</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-187"><a href="#Oracle.Tokenizer-187"><span class="linenos">187</span></a> <span class="s2">&quot;VARCHAR2&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="Oracle.Tokenizer-188"><a href="#Oracle.Tokenizer-188"><span class="linenos">188</span></a> <span class="p">}</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/postgres.html b/docs/sqlglot/dialects/postgres.html
index 9eb542b..a322f4e 100644
--- a/docs/sqlglot/dialects/postgres.html
+++ b/docs/sqlglot/dialects/postgres.html
@@ -79,7 +79,7 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
-</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a> <span class="n">Dialect</span><span class="p">,</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
@@ -99,353 +99,352 @@
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</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-21"><a href="#L-21"><span class="linenos"> 21</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-22"><a href="#L-22"><span class="linenos"> 22</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-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="kn">from</span> <span class="nn">sqlglot.transforms</span> <span class="kn">import</span> <span class="n">preprocess</span><span class="p">,</span> <span class="n">remove_target_from_merge</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 class="n">DATE_DIFF_FACTOR</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</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-27"><a href="#L-27"><span class="linenos"> 27</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-28"><a href="#L-28"><span class="linenos"> 28</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-29"><a href="#L-29"><span class="linenos"> 29</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-30"><a href="#L-30"><span class="linenos"> 30</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-31"><a href="#L-31"><span class="linenos"> 31</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-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="p">}</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="n">DATE_DIFF_FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span> <span class="s2">&quot; * 1000000&quot;</span><span class="p">,</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</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-27"><a href="#L-27"><span class="linenos"> 27</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-28"><a href="#L-28"><span class="linenos"> 28</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-29"><a href="#L-29"><span class="linenos"> 29</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-30"><a href="#L-30"><span class="linenos"> 30</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-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><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 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><span id="L-36"><a href="#L-36"><span class="linenos"> 36</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">expression</span><span class="p">):</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</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-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-40"><a href="#L-40"><span class="linenos"> 40</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-41"><a href="#L-41"><span class="linenos"> 41</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="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;expression&quot;</span><span class="p">])</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="k">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-44"><a href="#L-44"><span class="linenos"> 44</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-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="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-47"><a href="#L-47"><span class="linenos"> 47</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-48"><a href="#L-48"><span class="linenos"> 48</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-49"><a href="#L-49"><span class="linenos"> 49</span></a>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">return</span> <span class="n">func</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</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><span id="L-35"><a href="#L-35"><span class="linenos"> 35</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">expression</span><span class="p">):</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</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-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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-39"><a href="#L-39"><span class="linenos"> 39</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-40"><a href="#L-40"><span class="linenos"> 40</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="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;expression&quot;</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">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-43"><a href="#L-43"><span class="linenos"> 43</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-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="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-46"><a href="#L-46"><span class="linenos"> 46</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-47"><a href="#L-47"><span class="linenos"> 47</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-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">return</span> <span class="n">func</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><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</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">expression</span><span class="p">):</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</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-55"><a href="#L-55"><span class="linenos"> 55</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-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="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&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="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-61"><a href="#L-61"><span class="linenos"> 61</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-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">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-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">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-66"><a href="#L-66"><span class="linenos"> 66</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">) * 48 + EXTRACT(month FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) * 4 + EXTRACT(day FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) / 7&quot;</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</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-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</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-71"><a href="#L-71"><span class="linenos"> 71</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-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">age</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">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-52"><a href="#L-52"><span class="linenos"> 52</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">expression</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">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-54"><a href="#L-54"><span class="linenos"> 54</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-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 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="n">expression</span><span class="o">.</span><span class="n">this</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</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="n">expression</span><span class="o">.</span><span class="n">expression</span><span class="si">}</span><span class="s2"> AS TIMESTAMP)&quot;</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="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-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;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-61"><a href="#L-61"><span class="linenos"> 61</span></a>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">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-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">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-65"><a href="#L-65"><span class="linenos"> 65</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">) * 48 + EXTRACT(month FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) * 4 + EXTRACT(day FROM </span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">) / 7&quot;</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</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-67"><a href="#L-67"><span class="linenos"> 67</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-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</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-71"><a href="#L-71"><span class="linenos"> 71</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-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">age</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="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-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><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</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">expression</span><span class="p">):</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-81"><a href="#L-81"><span class="linenos"> 81</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-82"><a href="#L-82"><span class="linenos"> 82</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-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="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-85"><a href="#L-85"><span class="linenos"> 85</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-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;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-78"><a href="#L-78"><span class="linenos"> 78</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">expression</span><span class="p">):</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-80"><a href="#L-80"><span class="linenos"> 80</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-81"><a href="#L-81"><span class="linenos"> 81</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-82"><a href="#L-82"><span class="linenos"> 82</span></a>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</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-84"><a href="#L-84"><span class="linenos"> 84</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-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">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-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><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">_string_agg_sql</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-91"><a href="#L-91"><span class="linenos"> 91</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-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</span></a>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</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-96"><a href="#L-96"><span class="linenos"> 96</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-97"><a href="#L-97"><span class="linenos"> 97</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-98"><a href="#L-98"><span class="linenos"> 98</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-99"><a href="#L-99"><span class="linenos"> 99</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-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">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-89"><a href="#L-89"><span class="linenos"> 89</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">expression</span><span class="p">):</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</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-91"><a href="#L-91"><span class="linenos"> 91</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-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="n">order</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</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-95"><a href="#L-95"><span class="linenos"> 95</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-96"><a href="#L-96"><span class="linenos"> 96</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-97"><a href="#L-97"><span class="linenos"> 97</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-98"><a href="#L-98"><span class="linenos"> 98</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-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">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-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><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="k">def</span> <span class="nf">_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><span id="L-105"><a href="#L-105"><span class="linenos">105</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">exp</span><span 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-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="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-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</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><span id="L-104"><a href="#L-104"><span class="linenos">104</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">exp</span><span 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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="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-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">datatype_sql</span><span class="p">(</span><span class="n">expression</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><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">_auto_increment_to_serial</span><span class="p">(</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">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-112"><a href="#L-112"><span class="linenos">112</span></a>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="n">auto</span><span class="p">:</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</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-116"><a href="#L-116"><span class="linenos">116</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-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">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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</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-123"><a href="#L-123"><span class="linenos">123</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-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">return</span> <span class="n">expression</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</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><span id="L-110"><a href="#L-110"><span class="linenos">110</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-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">if</span> <span class="n">auto</span><span class="p">:</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</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-114"><a href="#L-114"><span class="linenos">114</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-115"><a href="#L-115"><span class="linenos">115</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-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="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-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</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-122"><a href="#L-122"><span class="linenos">122</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-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">return</span> <span class="n">expression</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
-</span><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">def</span> <span class="nf">_serial_to_generated</span><span class="p">(</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="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-130"><a href="#L-130"><span class="linenos">130</span></a>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="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-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="kc">None</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="n">data_type</span><span class="p">:</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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-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">return</span> <span class="n">expression</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</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><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">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-129"><a href="#L-129"><span class="linenos">129</span></a>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">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-131"><a href="#L-131"><span class="linenos">131</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-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">SMALLSERIAL</span><span class="p">:</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</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-141"><a href="#L-141"><span class="linenos">141</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-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-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">return</span> <span class="n">expression</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><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">_generate_series</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</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-156"><a href="#L-156"><span class="linenos">156</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-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">step</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</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-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">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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-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">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-153"><a href="#L-153"><span class="linenos">153</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><span id="L-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</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-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">step</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</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-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</span></a>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-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">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-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><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">def</span> <span class="nf">_to_timestamp</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="c1"># TO_TIMESTAMP accepts either a single double argument or (text, text)</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TABLE</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-formatting.html</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</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-169"><a href="#L-169"><span class="linenos">169</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><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="c1"># TO_TIMESTAMP accepts either a single double argument or (text, text)</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</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-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TABLE</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="c1"># https://www.postgresql.org/docs/current/functions-formatting.html</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</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-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><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">class</span> <span class="nc">Postgres</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</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-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</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-184"><a href="#L-184"><span class="linenos">184</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-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</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-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</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-194"><a href="#L-194"><span class="linenos">194</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-195"><a href="#L-195"><span class="linenos">195</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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="p">}</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="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-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</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="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-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</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-218"><a href="#L-218"><span class="linenos">218</span></a>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</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-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</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-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</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-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</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-242"><a href="#L-242"><span class="linenos">242</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-243"><a href="#L-243"><span class="linenos">243</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-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="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</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-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="p">}</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</span></a>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</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-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</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">FUNCTIONS</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="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-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 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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</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-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><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</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-270"><a href="#L-270"><span class="linenos">270</span></a> <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">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</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 class="c1"># type: ignore</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</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-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="p">}</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">,</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="p">}</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-283"><a href="#L-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 class="c1"># type: ignore</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</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-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="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-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</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-292"><a href="#L-292"><span class="linenos">292</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-293"><a href="#L-293"><span class="linenos">293</span></a>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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">this</span><span class="o">=</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</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">return</span> <span class="bp">self</span><span 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-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">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-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</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 class="n">LOCKING_READS_SUPPORTED</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 class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-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">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&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">DATETIME</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 class="c1"># type: ignore</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">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-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">preprocess</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><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">_auto_increment_to_serial</span><span class="p">,</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">_serial_to_generated</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><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <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">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</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">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</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">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-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</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-330"><a href="#L-330"><span class="linenos">330</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-331"><a href="#L-331"><span class="linenos">331</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-332"><a href="#L-332"><span class="linenos">332</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-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</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-335"><a href="#L-335"><span class="linenos">335</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-336"><a href="#L-336"><span class="linenos">336</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-337"><a href="#L-337"><span class="linenos">337</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-338"><a href="#L-338"><span class="linenos">338</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-339"><a href="#L-339"><span class="linenos">339</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-340"><a href="#L-340"><span class="linenos">340</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-341"><a href="#L-341"><span class="linenos">341</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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</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-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">preprocess</span><span class="p">([</span><span class="n">remove_target_from_merge</span><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">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-346"><a href="#L-346"><span class="linenos">346</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-347"><a href="#L-347"><span class="linenos">347</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-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</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-350"><a href="#L-350"><span class="linenos">350</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-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="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 TIMESTAMP)&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">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-353"><a href="#L-353"><span class="linenos">353</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-354"><a href="#L-354"><span class="linenos">354</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-355"><a href="#L-355"><span class="linenos">355</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-356"><a href="#L-356"><span class="linenos">356</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-357"><a href="#L-357"><span class="linenos">357</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-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">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_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">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;</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-361"><a href="#L-361"><span class="linenos">361</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-362"><a href="#L-362"><span class="linenos">362</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 class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="p">}</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</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-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="p">}</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</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-180"><a href="#L-180"><span class="linenos">180</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-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="s2">&quot;AM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&quot;</span><span class="p">,</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="s2">&quot;PM&quot;</span><span class="p">:</span> <span class="s2">&quot;%p&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;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-185"><a href="#L-185"><span class="linenos">185</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-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</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-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</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-191"><a href="#L-191"><span class="linenos">191</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-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</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-194"><a href="#L-194"><span class="linenos">194</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-195"><a href="#L-195"><span class="linenos">195</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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</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-206"><a href="#L-206"><span class="linenos">206</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-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</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-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="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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</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="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-215"><a href="#L-215"><span class="linenos">215</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-216"><a href="#L-216"><span class="linenos">216</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-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="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</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-220"><a href="#L-220"><span class="linenos">220</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-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</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-223"><a href="#L-223"><span class="linenos">223</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-224"><a href="#L-224"><span class="linenos">224</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-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</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-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</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-229"><a href="#L-229"><span class="linenos">229</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-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</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-234"><a href="#L-234"><span class="linenos">234</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-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</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-237"><a href="#L-237"><span class="linenos">237</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-238"><a href="#L-238"><span class="linenos">238</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-239"><a href="#L-239"><span class="linenos">239</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-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</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-242"><a href="#L-242"><span class="linenos">242</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-243"><a href="#L-243"><span class="linenos">243</span></a> <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="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</span></a> <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="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-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">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-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">FUNCTIONS</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="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-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="s2">&quot;GENERATE_SERIES&quot;</span><span class="p">:</span> <span class="n">_generate_series</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</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-262"><a href="#L-262"><span class="linenos">262</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-263"><a href="#L-263"><span class="linenos">263</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-264"><a href="#L-264"><span class="linenos">264</span></a> <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="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</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-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-272"><a href="#L-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">BITWISE</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</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-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">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">,</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</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-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">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 class="c1"># type: ignore</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">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-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</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-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="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-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</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-291"><a href="#L-291"><span class="linenos">291</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-292"><a href="#L-292"><span class="linenos">292</span></a>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="k">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-294"><a href="#L-294"><span class="linenos">294</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">this</span><span class="o">=</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><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="k">return</span> <span class="bp">self</span><span 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-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">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-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</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">TYPE_MAPPING</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-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">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&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="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 class="c1"># type: ignore</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">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-318"><a href="#L-318"><span class="linenos">318</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><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 class="n">_auto_increment_to_serial</span><span class="p">,</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">_serial_to_generated</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 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">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</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">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</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">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-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</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-330"><a href="#L-330"><span class="linenos">330</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-331"><a href="#L-331"><span class="linenos">331</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-332"><a href="#L-332"><span class="linenos">332</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-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</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-335"><a href="#L-335"><span class="linenos">335</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-336"><a href="#L-336"><span class="linenos">336</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-337"><a href="#L-337"><span class="linenos">337</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-338"><a href="#L-338"><span class="linenos">338</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-339"><a href="#L-339"><span class="linenos">339</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-340"><a href="#L-340"><span class="linenos">340</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-341"><a href="#L-341"><span class="linenos">341</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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</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">remove_target_from_merge</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">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-345"><a href="#L-345"><span class="linenos">345</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-346"><a href="#L-346"><span class="linenos">346</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-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</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-349"><a href="#L-349"><span class="linenos">349</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-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="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 TIMESTAMP)&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">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-352"><a href="#L-352"><span class="linenos">352</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-353"><a href="#L-353"><span class="linenos">353</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-354"><a href="#L-354"><span class="linenos">354</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-355"><a href="#L-355"><span class="linenos">355</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-356"><a href="#L-356"><span class="linenos">356</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-357"><a href="#L-357"><span class="linenos">357</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-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</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;</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-360"><a href="#L-360"><span class="linenos">360</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-361"><a href="#L-361"><span class="linenos">361</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 class="p">,</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</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-367"><a href="#L-367"><span class="linenos">367</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-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="p">}</span>
</span></pre></div>
@@ -461,197 +460,197 @@
</div>
<a class="headerlink" href="#Postgres"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres-180"><a href="#Postgres-180"><span class="linenos">180</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-181"><a href="#Postgres-181"><span class="linenos">181</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-182"><a href="#Postgres-182"><span class="linenos">182</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-183"><a href="#Postgres-183"><span class="linenos">183</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-184"><a href="#Postgres-184"><span class="linenos">184</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-185"><a href="#Postgres-185"><span class="linenos">185</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-186"><a href="#Postgres-186"><span class="linenos">186</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-187"><a href="#Postgres-187"><span class="linenos">187</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-188"><a href="#Postgres-188"><span class="linenos">188</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-189"><a href="#Postgres-189"><span class="linenos">189</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-190"><a href="#Postgres-190"><span class="linenos">190</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-191"><a href="#Postgres-191"><span class="linenos">191</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-192"><a href="#Postgres-192"><span class="linenos">192</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-193"><a href="#Postgres-193"><span class="linenos">193</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-194"><a href="#Postgres-194"><span class="linenos">194</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-195"><a href="#Postgres-195"><span class="linenos">195</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-196"><a href="#Postgres-196"><span class="linenos">196</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-197"><a href="#Postgres-197"><span class="linenos">197</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-198"><a href="#Postgres-198"><span class="linenos">198</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-199"><a href="#Postgres-199"><span class="linenos">199</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-200"><a href="#Postgres-200"><span class="linenos">200</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-201"><a href="#Postgres-201"><span class="linenos">201</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-202"><a href="#Postgres-202"><span class="linenos">202</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-203"><a href="#Postgres-203"><span class="linenos">203</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-204"><a href="#Postgres-204"><span class="linenos">204</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-205"><a href="#Postgres-205"><span class="linenos">205</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-206"><a href="#Postgres-206"><span class="linenos">206</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-207"><a href="#Postgres-207"><span class="linenos">207</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-208"><a href="#Postgres-208"><span class="linenos">208</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-209"><a href="#Postgres-209"><span class="linenos">209</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-210"><a href="#Postgres-210"><span class="linenos">210</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-211"><a href="#Postgres-211"><span class="linenos">211</span></a> <span class="p">}</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="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-214"><a href="#Postgres-214"><span class="linenos">214</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</span>
-</span><span id="Postgres-215"><a href="#Postgres-215"><span class="linenos">215</span></a>
-</span><span id="Postgres-216"><a href="#Postgres-216"><span class="linenos">216</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-217"><a href="#Postgres-217"><span class="linenos">217</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-218"><a href="#Postgres-218"><span class="linenos">218</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-219"><a href="#Postgres-219"><span class="linenos">219</span></a>
-</span><span id="Postgres-220"><a href="#Postgres-220"><span class="linenos">220</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-221"><a href="#Postgres-221"><span class="linenos">221</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-222"><a href="#Postgres-222"><span class="linenos">222</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-223"><a href="#Postgres-223"><span class="linenos">223</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-224"><a href="#Postgres-224"><span class="linenos">224</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-225"><a href="#Postgres-225"><span class="linenos">225</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-226"><a href="#Postgres-226"><span class="linenos">226</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-227"><a href="#Postgres-227"><span class="linenos">227</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-228"><a href="#Postgres-228"><span class="linenos">228</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-229"><a href="#Postgres-229"><span class="linenos">229</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-230"><a href="#Postgres-230"><span class="linenos">230</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-231"><a href="#Postgres-231"><span class="linenos">231</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-232"><a href="#Postgres-232"><span class="linenos">232</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-233"><a href="#Postgres-233"><span class="linenos">233</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-234"><a href="#Postgres-234"><span class="linenos">234</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-235"><a href="#Postgres-235"><span class="linenos">235</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-236"><a href="#Postgres-236"><span class="linenos">236</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-237"><a href="#Postgres-237"><span class="linenos">237</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-238"><a href="#Postgres-238"><span class="linenos">238</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-239"><a href="#Postgres-239"><span class="linenos">239</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="Postgres-240"><a href="#Postgres-240"><span class="linenos">240</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-241"><a href="#Postgres-241"><span class="linenos">241</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-242"><a href="#Postgres-242"><span class="linenos">242</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-243"><a href="#Postgres-243"><span class="linenos">243</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-244"><a href="#Postgres-244"><span class="linenos">244</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-245"><a href="#Postgres-245"><span class="linenos">245</span></a> <span class="p">}</span>
-</span><span id="Postgres-246"><a href="#Postgres-246"><span class="linenos">246</span></a>
-</span><span id="Postgres-247"><a href="#Postgres-247"><span class="linenos">247</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-248"><a href="#Postgres-248"><span class="linenos">248</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-249"><a href="#Postgres-249"><span class="linenos">249</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="Postgres-250"><a href="#Postgres-250"><span class="linenos">250</span></a> <span class="p">}</span>
-</span><span id="Postgres-251"><a href="#Postgres-251"><span class="linenos">251</span></a>
-</span><span id="Postgres-252"><a href="#Postgres-252"><span class="linenos">252</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-253"><a href="#Postgres-253"><span class="linenos">253</span></a>
-</span><span id="Postgres-254"><a href="#Postgres-254"><span class="linenos">254</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-255"><a href="#Postgres-255"><span class="linenos">255</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-256"><a href="#Postgres-256"><span class="linenos">256</span></a>
-</span><span id="Postgres-257"><a href="#Postgres-257"><span class="linenos">257</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-258"><a href="#Postgres-258"><span class="linenos">258</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Postgres-259"><a href="#Postgres-259"><span class="linenos">259</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="Postgres-260"><a href="#Postgres-260"><span class="linenos">260</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Postgres-261"><a href="#Postgres-261"><span class="linenos">261</span></a> <span class="p">),</span>
-</span><span id="Postgres-262"><a href="#Postgres-262"><span class="linenos">262</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-263"><a href="#Postgres-263"><span class="linenos">263</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-264"><a href="#Postgres-264"><span class="linenos">264</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-265"><a href="#Postgres-265"><span class="linenos">265</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-266"><a href="#Postgres-266"><span class="linenos">266</span></a> <span class="p">}</span>
-</span><span id="Postgres-267"><a href="#Postgres-267"><span class="linenos">267</span></a>
-</span><span id="Postgres-268"><a href="#Postgres-268"><span class="linenos">268</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-269"><a href="#Postgres-269"><span class="linenos">269</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-270"><a href="#Postgres-270"><span class="linenos">270</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-271"><a href="#Postgres-271"><span class="linenos">271</span></a> <span class="p">}</span>
-</span><span id="Postgres-272"><a href="#Postgres-272"><span class="linenos">272</span></a>
-</span><span id="Postgres-273"><a href="#Postgres-273"><span class="linenos">273</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-274"><a href="#Postgres-274"><span class="linenos">274</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 class="c1"># type: ignore</span>
-</span><span id="Postgres-275"><a href="#Postgres-275"><span class="linenos">275</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-276"><a href="#Postgres-276"><span class="linenos">276</span></a> <span class="p">}</span>
-</span><span id="Postgres-277"><a href="#Postgres-277"><span class="linenos">277</span></a>
-</span><span id="Postgres-278"><a href="#Postgres-278"><span class="linenos">278</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-279"><a href="#Postgres-279"><span class="linenos">279</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">FACTOR</span><span class="p">,</span>
-</span><span id="Postgres-280"><a href="#Postgres-280"><span class="linenos">280</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-281"><a href="#Postgres-281"><span class="linenos">281</span></a> <span class="p">}</span>
-</span><span id="Postgres-282"><a href="#Postgres-282"><span class="linenos">282</span></a>
-</span><span id="Postgres-283"><a href="#Postgres-283"><span class="linenos">283</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-284"><a href="#Postgres-284"><span class="linenos">284</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 class="c1"># type: ignore</span>
-</span><span id="Postgres-285"><a href="#Postgres-285"><span class="linenos">285</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-286"><a href="#Postgres-286"><span class="linenos">286</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-287"><a href="#Postgres-287"><span class="linenos">287</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-288"><a href="#Postgres-288"><span class="linenos">288</span></a> <span class="p">}</span>
-</span><span id="Postgres-289"><a href="#Postgres-289"><span class="linenos">289</span></a>
-</span><span id="Postgres-290"><a href="#Postgres-290"><span class="linenos">290</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-291"><a href="#Postgres-291"><span class="linenos">291</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-292"><a href="#Postgres-292"><span class="linenos">292</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-293"><a href="#Postgres-293"><span class="linenos">293</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-294"><a href="#Postgres-294"><span class="linenos">294</span></a>
-</span><span id="Postgres-295"><a href="#Postgres-295"><span class="linenos">295</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-296"><a href="#Postgres-296"><span class="linenos">296</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">this</span><span class="o">=</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Postgres-297"><a href="#Postgres-297"><span class="linenos">297</span></a>
-</span><span id="Postgres-298"><a href="#Postgres-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-299"><a href="#Postgres-299"><span class="linenos">299</span></a>
-</span><span id="Postgres-300"><a href="#Postgres-300"><span class="linenos">300</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-301"><a href="#Postgres-301"><span class="linenos">301</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-302"><a href="#Postgres-302"><span class="linenos">302</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres-303"><a href="#Postgres-303"><span class="linenos">303</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-304"><a href="#Postgres-304"><span class="linenos">304</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres-305"><a href="#Postgres-305"><span class="linenos">305</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Postgres-306"><a href="#Postgres-306"><span class="linenos">306</span></a>
-</span><span id="Postgres-307"><a href="#Postgres-307"><span class="linenos">307</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-308"><a href="#Postgres-308"><span class="linenos">308</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Postgres-309"><a href="#Postgres-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">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="Postgres-310"><a href="#Postgres-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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="Postgres-311"><a href="#Postgres-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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="Postgres-312"><a href="#Postgres-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres-313"><a href="#Postgres-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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres-314"><a href="#Postgres-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">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Postgres-315"><a href="#Postgres-315"><span class="linenos">315</span></a> <span class="p">}</span>
-</span><span id="Postgres-316"><a href="#Postgres-316"><span class="linenos">316</span></a>
-</span><span id="Postgres-317"><a href="#Postgres-317"><span class="linenos">317</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-318"><a href="#Postgres-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 class="c1"># type: ignore</span>
-</span><span id="Postgres-319"><a href="#Postgres-319"><span class="linenos">319</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-320"><a href="#Postgres-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres-321"><a href="#Postgres-321"><span class="linenos">321</span></a> <span class="p">[</span>
-</span><span id="Postgres-322"><a href="#Postgres-322"><span class="linenos">322</span></a> <span class="n">_auto_increment_to_serial</span><span class="p">,</span>
-</span><span id="Postgres-323"><a href="#Postgres-323"><span class="linenos">323</span></a> <span class="n">_serial_to_generated</span><span class="p">,</span>
-</span><span id="Postgres-324"><a href="#Postgres-324"><span class="linenos">324</span></a> <span class="p">],</span>
-</span><span id="Postgres-325"><a href="#Postgres-325"><span class="linenos">325</span></a> <span class="p">),</span>
-</span><span id="Postgres-326"><a href="#Postgres-326"><span class="linenos">326</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="Postgres-327"><a href="#Postgres-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="Postgres-328"><a href="#Postgres-328"><span class="linenos">328</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-329"><a href="#Postgres-329"><span class="linenos">329</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-330"><a href="#Postgres-330"><span class="linenos">330</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-331"><a href="#Postgres-331"><span class="linenos">331</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-332"><a href="#Postgres-332"><span class="linenos">332</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-333"><a href="#Postgres-333"><span class="linenos">333</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-334"><a href="#Postgres-334"><span class="linenos">334</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-335"><a href="#Postgres-335"><span class="linenos">335</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-336"><a href="#Postgres-336"><span class="linenos">336</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-337"><a href="#Postgres-337"><span class="linenos">337</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-338"><a href="#Postgres-338"><span class="linenos">338</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-339"><a href="#Postgres-339"><span class="linenos">339</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-340"><a href="#Postgres-340"><span class="linenos">340</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-341"><a href="#Postgres-341"><span class="linenos">341</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-342"><a href="#Postgres-342"><span class="linenos">342</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-343"><a href="#Postgres-343"><span class="linenos">343</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-344"><a href="#Postgres-344"><span class="linenos">344</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-345"><a href="#Postgres-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">preprocess</span><span class="p">([</span><span class="n">remove_target_from_merge</span><span class="p">]),</span>
-</span><span id="Postgres-346"><a href="#Postgres-346"><span class="linenos">346</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-347"><a href="#Postgres-347"><span class="linenos">347</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-348"><a href="#Postgres-348"><span class="linenos">348</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-349"><a href="#Postgres-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres-350"><a href="#Postgres-350"><span class="linenos">350</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-351"><a href="#Postgres-351"><span class="linenos">351</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-352"><a href="#Postgres-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="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 TIMESTAMP)&quot;</span><span class="p">,</span>
-</span><span id="Postgres-353"><a href="#Postgres-353"><span class="linenos">353</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-354"><a href="#Postgres-354"><span class="linenos">354</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="Postgres-355"><a href="#Postgres-355"><span class="linenos">355</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-356"><a href="#Postgres-356"><span class="linenos">356</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-357"><a href="#Postgres-357"><span class="linenos">357</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-358"><a href="#Postgres-358"><span class="linenos">358</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-359"><a href="#Postgres-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="Postgres-360"><a href="#Postgres-360"><span class="linenos">360</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-361"><a href="#Postgres-361"><span class="linenos">361</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;</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-362"><a href="#Postgres-362"><span class="linenos">362</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-363"><a href="#Postgres-363"><span class="linenos">363</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 class="p">,</span>
-</span><span id="Postgres-364"><a href="#Postgres-364"><span class="linenos">364</span></a> <span class="p">}</span>
-</span><span id="Postgres-365"><a href="#Postgres-365"><span class="linenos">365</span></a>
-</span><span id="Postgres-366"><a href="#Postgres-366"><span class="linenos">366</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres-367"><a href="#Postgres-367"><span class="linenos">367</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Postgres-368"><a href="#Postgres-368"><span class="linenos">368</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-369"><a href="#Postgres-369"><span class="linenos">369</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-370"><a href="#Postgres-370"><span class="linenos">370</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres-179"><a href="#Postgres-179"><span class="linenos">179</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-180"><a href="#Postgres-180"><span class="linenos">180</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-181"><a href="#Postgres-181"><span class="linenos">181</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-182"><a href="#Postgres-182"><span class="linenos">182</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-183"><a href="#Postgres-183"><span class="linenos">183</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-184"><a href="#Postgres-184"><span class="linenos">184</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-185"><a href="#Postgres-185"><span class="linenos">185</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-186"><a href="#Postgres-186"><span class="linenos">186</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-187"><a href="#Postgres-187"><span class="linenos">187</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-188"><a href="#Postgres-188"><span class="linenos">188</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-189"><a href="#Postgres-189"><span class="linenos">189</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-190"><a href="#Postgres-190"><span class="linenos">190</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-191"><a href="#Postgres-191"><span class="linenos">191</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-192"><a href="#Postgres-192"><span class="linenos">192</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-193"><a href="#Postgres-193"><span class="linenos">193</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-194"><a href="#Postgres-194"><span class="linenos">194</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-195"><a href="#Postgres-195"><span class="linenos">195</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-196"><a href="#Postgres-196"><span class="linenos">196</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-197"><a href="#Postgres-197"><span class="linenos">197</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-198"><a href="#Postgres-198"><span class="linenos">198</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-199"><a href="#Postgres-199"><span class="linenos">199</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-200"><a href="#Postgres-200"><span class="linenos">200</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-201"><a href="#Postgres-201"><span class="linenos">201</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-202"><a href="#Postgres-202"><span class="linenos">202</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-203"><a href="#Postgres-203"><span class="linenos">203</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-204"><a href="#Postgres-204"><span class="linenos">204</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-205"><a href="#Postgres-205"><span class="linenos">205</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-206"><a href="#Postgres-206"><span class="linenos">206</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-207"><a href="#Postgres-207"><span class="linenos">207</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-208"><a href="#Postgres-208"><span class="linenos">208</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-209"><a href="#Postgres-209"><span class="linenos">209</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-210"><a href="#Postgres-210"><span class="linenos">210</span></a> <span class="p">}</span>
+</span><span id="Postgres-211"><a href="#Postgres-211"><span class="linenos">211</span></a>
+</span><span id="Postgres-212"><a href="#Postgres-212"><span class="linenos">212</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-213"><a href="#Postgres-213"><span class="linenos">213</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="Postgres-214"><a href="#Postgres-214"><span class="linenos">214</span></a>
+</span><span id="Postgres-215"><a href="#Postgres-215"><span class="linenos">215</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-216"><a href="#Postgres-216"><span class="linenos">216</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-217"><a href="#Postgres-217"><span class="linenos">217</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-218"><a href="#Postgres-218"><span class="linenos">218</span></a>
+</span><span id="Postgres-219"><a href="#Postgres-219"><span class="linenos">219</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-220"><a href="#Postgres-220"><span class="linenos">220</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-221"><a href="#Postgres-221"><span class="linenos">221</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-222"><a href="#Postgres-222"><span class="linenos">222</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-223"><a href="#Postgres-223"><span class="linenos">223</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-224"><a href="#Postgres-224"><span class="linenos">224</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-225"><a href="#Postgres-225"><span class="linenos">225</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-226"><a href="#Postgres-226"><span class="linenos">226</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-227"><a href="#Postgres-227"><span class="linenos">227</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-228"><a href="#Postgres-228"><span class="linenos">228</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-229"><a href="#Postgres-229"><span class="linenos">229</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-230"><a href="#Postgres-230"><span class="linenos">230</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-231"><a href="#Postgres-231"><span class="linenos">231</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-232"><a href="#Postgres-232"><span class="linenos">232</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-233"><a href="#Postgres-233"><span class="linenos">233</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-234"><a href="#Postgres-234"><span class="linenos">234</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-235"><a href="#Postgres-235"><span class="linenos">235</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-236"><a href="#Postgres-236"><span class="linenos">236</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-237"><a href="#Postgres-237"><span class="linenos">237</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-238"><a href="#Postgres-238"><span class="linenos">238</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="Postgres-239"><a href="#Postgres-239"><span class="linenos">239</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-240"><a href="#Postgres-240"><span class="linenos">240</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-241"><a href="#Postgres-241"><span class="linenos">241</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-242"><a href="#Postgres-242"><span class="linenos">242</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-243"><a href="#Postgres-243"><span class="linenos">243</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-244"><a href="#Postgres-244"><span class="linenos">244</span></a> <span class="p">}</span>
+</span><span id="Postgres-245"><a href="#Postgres-245"><span class="linenos">245</span></a>
+</span><span id="Postgres-246"><a href="#Postgres-246"><span class="linenos">246</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-247"><a href="#Postgres-247"><span class="linenos">247</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-248"><a href="#Postgres-248"><span class="linenos">248</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="Postgres-249"><a href="#Postgres-249"><span class="linenos">249</span></a> <span class="p">}</span>
+</span><span id="Postgres-250"><a href="#Postgres-250"><span class="linenos">250</span></a>
+</span><span id="Postgres-251"><a href="#Postgres-251"><span class="linenos">251</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-252"><a href="#Postgres-252"><span class="linenos">252</span></a>
+</span><span id="Postgres-253"><a href="#Postgres-253"><span class="linenos">253</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-254"><a href="#Postgres-254"><span class="linenos">254</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-255"><a href="#Postgres-255"><span class="linenos">255</span></a>
+</span><span id="Postgres-256"><a href="#Postgres-256"><span class="linenos">256</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-257"><a href="#Postgres-257"><span class="linenos">257</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Postgres-258"><a href="#Postgres-258"><span class="linenos">258</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
+</span><span id="Postgres-259"><a href="#Postgres-259"><span class="linenos">259</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Postgres-260"><a href="#Postgres-260"><span class="linenos">260</span></a> <span class="p">),</span>
+</span><span id="Postgres-261"><a href="#Postgres-261"><span class="linenos">261</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-262"><a href="#Postgres-262"><span class="linenos">262</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-263"><a href="#Postgres-263"><span class="linenos">263</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-264"><a href="#Postgres-264"><span class="linenos">264</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-265"><a href="#Postgres-265"><span class="linenos">265</span></a> <span class="p">}</span>
+</span><span id="Postgres-266"><a href="#Postgres-266"><span class="linenos">266</span></a>
+</span><span id="Postgres-267"><a href="#Postgres-267"><span class="linenos">267</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-268"><a href="#Postgres-268"><span class="linenos">268</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-269"><a href="#Postgres-269"><span class="linenos">269</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-270"><a href="#Postgres-270"><span class="linenos">270</span></a> <span class="p">}</span>
+</span><span id="Postgres-271"><a href="#Postgres-271"><span class="linenos">271</span></a>
+</span><span id="Postgres-272"><a href="#Postgres-272"><span class="linenos">272</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-273"><a href="#Postgres-273"><span class="linenos">273</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 class="c1"># type: ignore</span>
+</span><span id="Postgres-274"><a href="#Postgres-274"><span class="linenos">274</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-275"><a href="#Postgres-275"><span class="linenos">275</span></a> <span class="p">}</span>
+</span><span id="Postgres-276"><a href="#Postgres-276"><span class="linenos">276</span></a>
+</span><span id="Postgres-277"><a href="#Postgres-277"><span class="linenos">277</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-278"><a href="#Postgres-278"><span class="linenos">278</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">,</span>
+</span><span id="Postgres-279"><a href="#Postgres-279"><span class="linenos">279</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-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">RANGE_PARSERS</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">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 class="c1"># type: ignore</span>
+</span><span id="Postgres-284"><a href="#Postgres-284"><span class="linenos">284</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-285"><a href="#Postgres-285"><span class="linenos">285</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-286"><a href="#Postgres-286"><span class="linenos">286</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-287"><a href="#Postgres-287"><span class="linenos">287</span></a> <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">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-290"><a href="#Postgres-290"><span class="linenos">290</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-291"><a href="#Postgres-291"><span class="linenos">291</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-292"><a href="#Postgres-292"><span class="linenos">292</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-293"><a href="#Postgres-293"><span class="linenos">293</span></a>
+</span><span id="Postgres-294"><a href="#Postgres-294"><span class="linenos">294</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-295"><a href="#Postgres-295"><span class="linenos">295</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">this</span><span class="o">=</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><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="k">return</span> <span class="bp">self</span><span 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-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">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-300"><a href="#Postgres-300"><span class="linenos">300</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-301"><a href="#Postgres-301"><span class="linenos">301</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres-302"><a href="#Postgres-302"><span class="linenos">302</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-303"><a href="#Postgres-303"><span class="linenos">303</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres-304"><a href="#Postgres-304"><span class="linenos">304</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</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">TYPE_MAPPING</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Postgres-308"><a href="#Postgres-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">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
+</span><span id="Postgres-309"><a href="#Postgres-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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="Postgres-310"><a href="#Postgres-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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="Postgres-311"><a href="#Postgres-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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres-312"><a href="#Postgres-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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres-313"><a href="#Postgres-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="Postgres-314"><a href="#Postgres-314"><span class="linenos">314</span></a> <span class="p">}</span>
+</span><span id="Postgres-315"><a href="#Postgres-315"><span class="linenos">315</span></a>
+</span><span id="Postgres-316"><a href="#Postgres-316"><span class="linenos">316</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-317"><a href="#Postgres-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 class="c1"># type: ignore</span>
+</span><span id="Postgres-318"><a href="#Postgres-318"><span class="linenos">318</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-319"><a href="#Postgres-319"><span class="linenos">319</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><span id="Postgres-320"><a href="#Postgres-320"><span class="linenos">320</span></a> <span class="p">[</span>
+</span><span id="Postgres-321"><a href="#Postgres-321"><span class="linenos">321</span></a> <span class="n">_auto_increment_to_serial</span><span class="p">,</span>
+</span><span id="Postgres-322"><a href="#Postgres-322"><span class="linenos">322</span></a> <span class="n">_serial_to_generated</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 class="p">),</span>
+</span><span id="Postgres-325"><a href="#Postgres-325"><span class="linenos">325</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="Postgres-326"><a href="#Postgres-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="Postgres-327"><a href="#Postgres-327"><span class="linenos">327</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-328"><a href="#Postgres-328"><span class="linenos">328</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-329"><a href="#Postgres-329"><span class="linenos">329</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-330"><a href="#Postgres-330"><span class="linenos">330</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-331"><a href="#Postgres-331"><span class="linenos">331</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-332"><a href="#Postgres-332"><span class="linenos">332</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-333"><a href="#Postgres-333"><span class="linenos">333</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-334"><a href="#Postgres-334"><span class="linenos">334</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-335"><a href="#Postgres-335"><span class="linenos">335</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-336"><a href="#Postgres-336"><span class="linenos">336</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-337"><a href="#Postgres-337"><span class="linenos">337</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-338"><a href="#Postgres-338"><span class="linenos">338</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-339"><a href="#Postgres-339"><span class="linenos">339</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-340"><a href="#Postgres-340"><span class="linenos">340</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-341"><a href="#Postgres-341"><span class="linenos">341</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-342"><a href="#Postgres-342"><span class="linenos">342</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-343"><a href="#Postgres-343"><span class="linenos">343</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-344"><a href="#Postgres-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</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">remove_target_from_merge</span><span class="p">]),</span>
+</span><span id="Postgres-345"><a href="#Postgres-345"><span class="linenos">345</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-346"><a href="#Postgres-346"><span class="linenos">346</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-347"><a href="#Postgres-347"><span class="linenos">347</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-348"><a href="#Postgres-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres-349"><a href="#Postgres-349"><span class="linenos">349</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-350"><a href="#Postgres-350"><span class="linenos">350</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-351"><a href="#Postgres-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="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 TIMESTAMP)&quot;</span><span class="p">,</span>
+</span><span id="Postgres-352"><a href="#Postgres-352"><span class="linenos">352</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-353"><a href="#Postgres-353"><span class="linenos">353</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="Postgres-354"><a href="#Postgres-354"><span class="linenos">354</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-355"><a href="#Postgres-355"><span class="linenos">355</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-356"><a href="#Postgres-356"><span class="linenos">356</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-357"><a href="#Postgres-357"><span class="linenos">357</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-358"><a href="#Postgres-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="Postgres-359"><a href="#Postgres-359"><span class="linenos">359</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-360"><a href="#Postgres-360"><span class="linenos">360</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;</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-361"><a href="#Postgres-361"><span class="linenos">361</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-362"><a href="#Postgres-362"><span class="linenos">362</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 class="p">,</span>
+</span><span id="Postgres-363"><a href="#Postgres-363"><span class="linenos">363</span></a> <span class="p">}</span>
+</span><span id="Postgres-364"><a href="#Postgres-364"><span class="linenos">364</span></a>
+</span><span id="Postgres-365"><a href="#Postgres-365"><span class="linenos">365</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres-366"><a href="#Postgres-366"><span class="linenos">366</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Postgres-367"><a href="#Postgres-367"><span class="linenos">367</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-368"><a href="#Postgres-368"><span class="linenos">368</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-369"><a href="#Postgres-369"><span class="linenos">369</span></a> <span class="p">}</span>
</span></pre></div>
@@ -686,46 +685,46 @@
</div>
<a class="headerlink" href="#Postgres.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Tokenizer-213"><a href="#Postgres.Tokenizer-213"><span class="linenos">213</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-214"><a href="#Postgres.Tokenizer-214"><span class="linenos">214</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</span>
-</span><span id="Postgres.Tokenizer-215"><a href="#Postgres.Tokenizer-215"><span class="linenos">215</span></a>
-</span><span id="Postgres.Tokenizer-216"><a href="#Postgres.Tokenizer-216"><span class="linenos">216</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-217"><a href="#Postgres.Tokenizer-217"><span class="linenos">217</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-218"><a href="#Postgres.Tokenizer-218"><span class="linenos">218</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-219"><a href="#Postgres.Tokenizer-219"><span class="linenos">219</span></a>
-</span><span id="Postgres.Tokenizer-220"><a href="#Postgres.Tokenizer-220"><span class="linenos">220</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Tokenizer-221"><a href="#Postgres.Tokenizer-221"><span class="linenos">221</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-222"><a href="#Postgres.Tokenizer-222"><span class="linenos">222</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-223"><a href="#Postgres.Tokenizer-223"><span class="linenos">223</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-224"><a href="#Postgres.Tokenizer-224"><span class="linenos">224</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-225"><a href="#Postgres.Tokenizer-225"><span class="linenos">225</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-226"><a href="#Postgres.Tokenizer-226"><span class="linenos">226</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-227"><a href="#Postgres.Tokenizer-227"><span class="linenos">227</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-228"><a href="#Postgres.Tokenizer-228"><span class="linenos">228</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-229"><a href="#Postgres.Tokenizer-229"><span class="linenos">229</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-230"><a href="#Postgres.Tokenizer-230"><span class="linenos">230</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-231"><a href="#Postgres.Tokenizer-231"><span class="linenos">231</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-232"><a href="#Postgres.Tokenizer-232"><span class="linenos">232</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-233"><a href="#Postgres.Tokenizer-233"><span class="linenos">233</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-234"><a href="#Postgres.Tokenizer-234"><span class="linenos">234</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-235"><a href="#Postgres.Tokenizer-235"><span class="linenos">235</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-236"><a href="#Postgres.Tokenizer-236"><span class="linenos">236</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-237"><a href="#Postgres.Tokenizer-237"><span class="linenos">237</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-238"><a href="#Postgres.Tokenizer-238"><span class="linenos">238</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-239"><a href="#Postgres.Tokenizer-239"><span class="linenos">239</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="Postgres.Tokenizer-240"><a href="#Postgres.Tokenizer-240"><span class="linenos">240</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-241"><a href="#Postgres.Tokenizer-241"><span class="linenos">241</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-242"><a href="#Postgres.Tokenizer-242"><span class="linenos">242</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-243"><a href="#Postgres.Tokenizer-243"><span class="linenos">243</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-244"><a href="#Postgres.Tokenizer-244"><span class="linenos">244</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-245"><a href="#Postgres.Tokenizer-245"><span class="linenos">245</span></a> <span class="p">}</span>
-</span><span id="Postgres.Tokenizer-246"><a href="#Postgres.Tokenizer-246"><span class="linenos">246</span></a>
-</span><span id="Postgres.Tokenizer-247"><a href="#Postgres.Tokenizer-247"><span class="linenos">247</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Tokenizer-248"><a href="#Postgres.Tokenizer-248"><span class="linenos">248</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-249"><a href="#Postgres.Tokenizer-249"><span class="linenos">249</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="Postgres.Tokenizer-250"><a href="#Postgres.Tokenizer-250"><span class="linenos">250</span></a> <span class="p">}</span>
-</span><span id="Postgres.Tokenizer-251"><a href="#Postgres.Tokenizer-251"><span class="linenos">251</span></a>
-</span><span id="Postgres.Tokenizer-252"><a href="#Postgres.Tokenizer-252"><span class="linenos">252</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-212"><a href="#Postgres.Tokenizer-212"><span class="linenos">212</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-213"><a href="#Postgres.Tokenizer-213"><span class="linenos">213</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;$$&quot;</span><span class="p">]</span>
+</span><span id="Postgres.Tokenizer-214"><a href="#Postgres.Tokenizer-214"><span class="linenos">214</span></a>
+</span><span id="Postgres.Tokenizer-215"><a href="#Postgres.Tokenizer-215"><span class="linenos">215</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-216"><a href="#Postgres.Tokenizer-216"><span class="linenos">216</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-217"><a href="#Postgres.Tokenizer-217"><span class="linenos">217</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-218"><a href="#Postgres.Tokenizer-218"><span class="linenos">218</span></a>
+</span><span id="Postgres.Tokenizer-219"><a href="#Postgres.Tokenizer-219"><span class="linenos">219</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Tokenizer-220"><a href="#Postgres.Tokenizer-220"><span class="linenos">220</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-221"><a href="#Postgres.Tokenizer-221"><span class="linenos">221</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-222"><a href="#Postgres.Tokenizer-222"><span class="linenos">222</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-223"><a href="#Postgres.Tokenizer-223"><span class="linenos">223</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-224"><a href="#Postgres.Tokenizer-224"><span class="linenos">224</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-225"><a href="#Postgres.Tokenizer-225"><span class="linenos">225</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-226"><a href="#Postgres.Tokenizer-226"><span class="linenos">226</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-227"><a href="#Postgres.Tokenizer-227"><span class="linenos">227</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-228"><a href="#Postgres.Tokenizer-228"><span class="linenos">228</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-229"><a href="#Postgres.Tokenizer-229"><span class="linenos">229</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-230"><a href="#Postgres.Tokenizer-230"><span class="linenos">230</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-231"><a href="#Postgres.Tokenizer-231"><span class="linenos">231</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-232"><a href="#Postgres.Tokenizer-232"><span class="linenos">232</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-233"><a href="#Postgres.Tokenizer-233"><span class="linenos">233</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-234"><a href="#Postgres.Tokenizer-234"><span class="linenos">234</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-235"><a href="#Postgres.Tokenizer-235"><span class="linenos">235</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-236"><a href="#Postgres.Tokenizer-236"><span class="linenos">236</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-237"><a href="#Postgres.Tokenizer-237"><span class="linenos">237</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-238"><a href="#Postgres.Tokenizer-238"><span class="linenos">238</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="Postgres.Tokenizer-239"><a href="#Postgres.Tokenizer-239"><span class="linenos">239</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-240"><a href="#Postgres.Tokenizer-240"><span class="linenos">240</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-241"><a href="#Postgres.Tokenizer-241"><span class="linenos">241</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-242"><a href="#Postgres.Tokenizer-242"><span class="linenos">242</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-243"><a href="#Postgres.Tokenizer-243"><span class="linenos">243</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-244"><a href="#Postgres.Tokenizer-244"><span class="linenos">244</span></a> <span class="p">}</span>
+</span><span id="Postgres.Tokenizer-245"><a href="#Postgres.Tokenizer-245"><span class="linenos">245</span></a>
+</span><span id="Postgres.Tokenizer-246"><a href="#Postgres.Tokenizer-246"><span class="linenos">246</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Tokenizer-247"><a href="#Postgres.Tokenizer-247"><span class="linenos">247</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-248"><a href="#Postgres.Tokenizer-248"><span class="linenos">248</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="Postgres.Tokenizer-249"><a href="#Postgres.Tokenizer-249"><span class="linenos">249</span></a> <span class="p">}</span>
+</span><span id="Postgres.Tokenizer-250"><a href="#Postgres.Tokenizer-250"><span class="linenos">250</span></a>
+</span><span id="Postgres.Tokenizer-251"><a href="#Postgres.Tokenizer-251"><span class="linenos">251</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>
@@ -753,51 +752,51 @@
</div>
<a class="headerlink" href="#Postgres.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Parser-254"><a href="#Postgres.Parser-254"><span class="linenos">254</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-255"><a href="#Postgres.Parser-255"><span class="linenos">255</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Parser-256"><a href="#Postgres.Parser-256"><span class="linenos">256</span></a>
-</span><span id="Postgres.Parser-257"><a href="#Postgres.Parser-257"><span class="linenos">257</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-258"><a href="#Postgres.Parser-258"><span class="linenos">258</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Postgres.Parser-259"><a href="#Postgres.Parser-259"><span class="linenos">259</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="Postgres.Parser-260"><a href="#Postgres.Parser-260"><span class="linenos">260</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Postgres.Parser-261"><a href="#Postgres.Parser-261"><span class="linenos">261</span></a> <span class="p">),</span>
-</span><span id="Postgres.Parser-262"><a href="#Postgres.Parser-262"><span class="linenos">262</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-263"><a href="#Postgres.Parser-263"><span class="linenos">263</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-264"><a href="#Postgres.Parser-264"><span class="linenos">264</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-265"><a href="#Postgres.Parser-265"><span class="linenos">265</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-266"><a href="#Postgres.Parser-266"><span class="linenos">266</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-267"><a href="#Postgres.Parser-267"><span class="linenos">267</span></a>
-</span><span id="Postgres.Parser-268"><a href="#Postgres.Parser-268"><span class="linenos">268</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-269"><a href="#Postgres.Parser-269"><span class="linenos">269</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-270"><a href="#Postgres.Parser-270"><span class="linenos">270</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-271"><a href="#Postgres.Parser-271"><span class="linenos">271</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-272"><a href="#Postgres.Parser-272"><span class="linenos">272</span></a>
-</span><span id="Postgres.Parser-273"><a href="#Postgres.Parser-273"><span class="linenos">273</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-274"><a href="#Postgres.Parser-274"><span class="linenos">274</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 class="c1"># type: ignore</span>
-</span><span id="Postgres.Parser-275"><a href="#Postgres.Parser-275"><span class="linenos">275</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-276"><a href="#Postgres.Parser-276"><span class="linenos">276</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-277"><a href="#Postgres.Parser-277"><span class="linenos">277</span></a>
-</span><span id="Postgres.Parser-278"><a href="#Postgres.Parser-278"><span class="linenos">278</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-279"><a href="#Postgres.Parser-279"><span class="linenos">279</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">FACTOR</span><span class="p">,</span>
-</span><span id="Postgres.Parser-280"><a href="#Postgres.Parser-280"><span class="linenos">280</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-281"><a href="#Postgres.Parser-281"><span class="linenos">281</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-282"><a href="#Postgres.Parser-282"><span class="linenos">282</span></a>
-</span><span id="Postgres.Parser-283"><a href="#Postgres.Parser-283"><span class="linenos">283</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Parser-284"><a href="#Postgres.Parser-284"><span class="linenos">284</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 class="c1"># type: ignore</span>
-</span><span id="Postgres.Parser-285"><a href="#Postgres.Parser-285"><span class="linenos">285</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-286"><a href="#Postgres.Parser-286"><span class="linenos">286</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-287"><a href="#Postgres.Parser-287"><span class="linenos">287</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-288"><a href="#Postgres.Parser-288"><span class="linenos">288</span></a> <span class="p">}</span>
-</span><span id="Postgres.Parser-289"><a href="#Postgres.Parser-289"><span class="linenos">289</span></a>
-</span><span id="Postgres.Parser-290"><a href="#Postgres.Parser-290"><span class="linenos">290</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-291"><a href="#Postgres.Parser-291"><span class="linenos">291</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-292"><a href="#Postgres.Parser-292"><span class="linenos">292</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-293"><a href="#Postgres.Parser-293"><span class="linenos">293</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-294"><a href="#Postgres.Parser-294"><span class="linenos">294</span></a>
-</span><span id="Postgres.Parser-295"><a href="#Postgres.Parser-295"><span class="linenos">295</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-296"><a href="#Postgres.Parser-296"><span class="linenos">296</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">this</span><span class="o">=</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Postgres.Parser-297"><a href="#Postgres.Parser-297"><span class="linenos">297</span></a>
-</span><span id="Postgres.Parser-298"><a href="#Postgres.Parser-298"><span class="linenos">298</span></a> <span class="k">return</span> <span class="bp">self</span><span 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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Parser-253"><a href="#Postgres.Parser-253"><span class="linenos">253</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-254"><a href="#Postgres.Parser-254"><span class="linenos">254</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Parser-255"><a href="#Postgres.Parser-255"><span class="linenos">255</span></a>
+</span><span id="Postgres.Parser-256"><a href="#Postgres.Parser-256"><span class="linenos">256</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-257"><a href="#Postgres.Parser-257"><span class="linenos">257</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Postgres.Parser-258"><a href="#Postgres.Parser-258"><span class="linenos">258</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
+</span><span id="Postgres.Parser-259"><a href="#Postgres.Parser-259"><span class="linenos">259</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Postgres.Parser-260"><a href="#Postgres.Parser-260"><span class="linenos">260</span></a> <span class="p">),</span>
+</span><span id="Postgres.Parser-261"><a href="#Postgres.Parser-261"><span class="linenos">261</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-262"><a href="#Postgres.Parser-262"><span class="linenos">262</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-263"><a href="#Postgres.Parser-263"><span class="linenos">263</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-264"><a href="#Postgres.Parser-264"><span class="linenos">264</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-265"><a href="#Postgres.Parser-265"><span class="linenos">265</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-266"><a href="#Postgres.Parser-266"><span class="linenos">266</span></a>
+</span><span id="Postgres.Parser-267"><a href="#Postgres.Parser-267"><span class="linenos">267</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-268"><a href="#Postgres.Parser-268"><span class="linenos">268</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-269"><a href="#Postgres.Parser-269"><span class="linenos">269</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-270"><a href="#Postgres.Parser-270"><span class="linenos">270</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-271"><a href="#Postgres.Parser-271"><span class="linenos">271</span></a>
+</span><span id="Postgres.Parser-272"><a href="#Postgres.Parser-272"><span class="linenos">272</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-273"><a href="#Postgres.Parser-273"><span class="linenos">273</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 class="c1"># type: ignore</span>
+</span><span id="Postgres.Parser-274"><a href="#Postgres.Parser-274"><span class="linenos">274</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-275"><a href="#Postgres.Parser-275"><span class="linenos">275</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-276"><a href="#Postgres.Parser-276"><span class="linenos">276</span></a>
+</span><span id="Postgres.Parser-277"><a href="#Postgres.Parser-277"><span class="linenos">277</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Parser-278"><a href="#Postgres.Parser-278"><span class="linenos">278</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">,</span>
+</span><span id="Postgres.Parser-279"><a href="#Postgres.Parser-279"><span class="linenos">279</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-280"><a href="#Postgres.Parser-280"><span class="linenos">280</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-281"><a href="#Postgres.Parser-281"><span class="linenos">281</span></a>
+</span><span id="Postgres.Parser-282"><a href="#Postgres.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="Postgres.Parser-283"><a href="#Postgres.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 class="c1"># type: ignore</span>
+</span><span id="Postgres.Parser-284"><a href="#Postgres.Parser-284"><span class="linenos">284</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-285"><a href="#Postgres.Parser-285"><span class="linenos">285</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-286"><a href="#Postgres.Parser-286"><span class="linenos">286</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-287"><a href="#Postgres.Parser-287"><span class="linenos">287</span></a> <span class="p">}</span>
+</span><span id="Postgres.Parser-288"><a href="#Postgres.Parser-288"><span class="linenos">288</span></a>
+</span><span id="Postgres.Parser-289"><a href="#Postgres.Parser-289"><span class="linenos">289</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-290"><a href="#Postgres.Parser-290"><span class="linenos">290</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-291"><a href="#Postgres.Parser-291"><span class="linenos">291</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-292"><a href="#Postgres.Parser-292"><span class="linenos">292</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-293"><a href="#Postgres.Parser-293"><span class="linenos">293</span></a>
+</span><span id="Postgres.Parser-294"><a href="#Postgres.Parser-294"><span class="linenos">294</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-295"><a href="#Postgres.Parser-295"><span class="linenos">295</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">this</span><span class="o">=</span><span class="n">part</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Postgres.Parser-296"><a href="#Postgres.Parser-296"><span class="linenos">296</span></a>
+</span><span id="Postgres.Parser-297"><a href="#Postgres.Parser-297"><span class="linenos">297</span></a> <span class="k">return</span> <span class="bp">self</span><span 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>
@@ -854,77 +853,77 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Postgres.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator-300"><a href="#Postgres.Generator-300"><span class="linenos">300</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-301"><a href="#Postgres.Generator-301"><span class="linenos">301</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-302"><a href="#Postgres.Generator-302"><span class="linenos">302</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Postgres.Generator-303"><a href="#Postgres.Generator-303"><span class="linenos">303</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-304"><a href="#Postgres.Generator-304"><span class="linenos">304</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Postgres.Generator-305"><a href="#Postgres.Generator-305"><span class="linenos">305</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
-</span><span id="Postgres.Generator-306"><a href="#Postgres.Generator-306"><span class="linenos">306</span></a>
-</span><span id="Postgres.Generator-307"><a href="#Postgres.Generator-307"><span class="linenos">307</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-308"><a href="#Postgres.Generator-308"><span class="linenos">308</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Postgres.Generator-309"><a href="#Postgres.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">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-310"><a href="#Postgres.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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-311"><a href="#Postgres.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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-312"><a href="#Postgres.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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-313"><a href="#Postgres.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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-314"><a href="#Postgres.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">DATETIME</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-315"><a href="#Postgres.Generator-315"><span class="linenos">315</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-316"><a href="#Postgres.Generator-316"><span class="linenos">316</span></a>
-</span><span id="Postgres.Generator-317"><a href="#Postgres.Generator-317"><span class="linenos">317</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-318"><a href="#Postgres.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 class="c1"># type: ignore</span>
-</span><span id="Postgres.Generator-319"><a href="#Postgres.Generator-319"><span class="linenos">319</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-320"><a href="#Postgres.Generator-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">:</span> <span class="n">preprocess</span><span class="p">(</span>
-</span><span id="Postgres.Generator-321"><a href="#Postgres.Generator-321"><span class="linenos">321</span></a> <span class="p">[</span>
-</span><span id="Postgres.Generator-322"><a href="#Postgres.Generator-322"><span class="linenos">322</span></a> <span class="n">_auto_increment_to_serial</span><span class="p">,</span>
-</span><span id="Postgres.Generator-323"><a href="#Postgres.Generator-323"><span class="linenos">323</span></a> <span class="n">_serial_to_generated</span><span class="p">,</span>
-</span><span id="Postgres.Generator-324"><a href="#Postgres.Generator-324"><span class="linenos">324</span></a> <span class="p">],</span>
-</span><span id="Postgres.Generator-325"><a href="#Postgres.Generator-325"><span class="linenos">325</span></a> <span class="p">),</span>
-</span><span id="Postgres.Generator-326"><a href="#Postgres.Generator-326"><span class="linenos">326</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="Postgres.Generator-327"><a href="#Postgres.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="Postgres.Generator-328"><a href="#Postgres.Generator-328"><span class="linenos">328</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-329"><a href="#Postgres.Generator-329"><span class="linenos">329</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-330"><a href="#Postgres.Generator-330"><span class="linenos">330</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-331"><a href="#Postgres.Generator-331"><span class="linenos">331</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-332"><a href="#Postgres.Generator-332"><span class="linenos">332</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-333"><a href="#Postgres.Generator-333"><span class="linenos">333</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-334"><a href="#Postgres.Generator-334"><span class="linenos">334</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-335"><a href="#Postgres.Generator-335"><span class="linenos">335</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-336"><a href="#Postgres.Generator-336"><span class="linenos">336</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-337"><a href="#Postgres.Generator-337"><span class="linenos">337</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-338"><a href="#Postgres.Generator-338"><span class="linenos">338</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-339"><a href="#Postgres.Generator-339"><span class="linenos">339</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-340"><a href="#Postgres.Generator-340"><span class="linenos">340</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-341"><a href="#Postgres.Generator-341"><span class="linenos">341</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-342"><a href="#Postgres.Generator-342"><span class="linenos">342</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-343"><a href="#Postgres.Generator-343"><span class="linenos">343</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-344"><a href="#Postgres.Generator-344"><span class="linenos">344</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-345"><a href="#Postgres.Generator-345"><span class="linenos">345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span> <span class="n">preprocess</span><span class="p">([</span><span class="n">remove_target_from_merge</span><span class="p">]),</span>
-</span><span id="Postgres.Generator-346"><a href="#Postgres.Generator-346"><span class="linenos">346</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-347"><a href="#Postgres.Generator-347"><span class="linenos">347</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-348"><a href="#Postgres.Generator-348"><span class="linenos">348</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-349"><a href="#Postgres.Generator-349"><span class="linenos">349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-350"><a href="#Postgres.Generator-350"><span class="linenos">350</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-351"><a href="#Postgres.Generator-351"><span class="linenos">351</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-352"><a href="#Postgres.Generator-352"><span class="linenos">352</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="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 TIMESTAMP)&quot;</span><span class="p">,</span>
-</span><span id="Postgres.Generator-353"><a href="#Postgres.Generator-353"><span class="linenos">353</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-354"><a href="#Postgres.Generator-354"><span class="linenos">354</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="Postgres.Generator-355"><a href="#Postgres.Generator-355"><span class="linenos">355</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-356"><a href="#Postgres.Generator-356"><span class="linenos">356</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-357"><a href="#Postgres.Generator-357"><span class="linenos">357</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-358"><a href="#Postgres.Generator-358"><span class="linenos">358</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-359"><a href="#Postgres.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="Postgres.Generator-360"><a href="#Postgres.Generator-360"><span class="linenos">360</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-361"><a href="#Postgres.Generator-361"><span class="linenos">361</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;</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-362"><a href="#Postgres.Generator-362"><span class="linenos">362</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-363"><a href="#Postgres.Generator-363"><span class="linenos">363</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 class="p">,</span>
-</span><span id="Postgres.Generator-364"><a href="#Postgres.Generator-364"><span class="linenos">364</span></a> <span class="p">}</span>
-</span><span id="Postgres.Generator-365"><a href="#Postgres.Generator-365"><span class="linenos">365</span></a>
-</span><span id="Postgres.Generator-366"><a href="#Postgres.Generator-366"><span class="linenos">366</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Postgres.Generator-367"><a href="#Postgres.Generator-367"><span class="linenos">367</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Postgres.Generator-368"><a href="#Postgres.Generator-368"><span class="linenos">368</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-369"><a href="#Postgres.Generator-369"><span class="linenos">369</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-370"><a href="#Postgres.Generator-370"><span class="linenos">370</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Postgres.Generator-299"><a href="#Postgres.Generator-299"><span class="linenos">299</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-300"><a href="#Postgres.Generator-300"><span class="linenos">300</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-301"><a href="#Postgres.Generator-301"><span class="linenos">301</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Postgres.Generator-302"><a href="#Postgres.Generator-302"><span class="linenos">302</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-303"><a href="#Postgres.Generator-303"><span class="linenos">303</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Postgres.Generator-304"><a href="#Postgres.Generator-304"><span class="linenos">304</span></a> <span class="n">PARAMETER_TOKEN</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
+</span><span id="Postgres.Generator-305"><a href="#Postgres.Generator-305"><span class="linenos">305</span></a>
+</span><span id="Postgres.Generator-306"><a href="#Postgres.Generator-306"><span class="linenos">306</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-307"><a href="#Postgres.Generator-307"><span class="linenos">307</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Postgres.Generator-308"><a href="#Postgres.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">TINYINT</span><span class="p">:</span> <span class="s2">&quot;SMALLINT&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-309"><a href="#Postgres.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">FLOAT</span><span class="p">:</span> <span class="s2">&quot;REAL&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-310"><a href="#Postgres.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">DOUBLE</span><span class="p">:</span> <span class="s2">&quot;DOUBLE PRECISION&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-311"><a href="#Postgres.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">BINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-312"><a href="#Postgres.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">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;BYTEA&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-313"><a href="#Postgres.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="Postgres.Generator-314"><a href="#Postgres.Generator-314"><span class="linenos">314</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-315"><a href="#Postgres.Generator-315"><span class="linenos">315</span></a>
+</span><span id="Postgres.Generator-316"><a href="#Postgres.Generator-316"><span class="linenos">316</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-317"><a href="#Postgres.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 class="c1"># type: ignore</span>
+</span><span id="Postgres.Generator-318"><a href="#Postgres.Generator-318"><span class="linenos">318</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-319"><a href="#Postgres.Generator-319"><span class="linenos">319</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><span id="Postgres.Generator-320"><a href="#Postgres.Generator-320"><span class="linenos">320</span></a> <span class="p">[</span>
+</span><span id="Postgres.Generator-321"><a href="#Postgres.Generator-321"><span class="linenos">321</span></a> <span class="n">_auto_increment_to_serial</span><span class="p">,</span>
+</span><span id="Postgres.Generator-322"><a href="#Postgres.Generator-322"><span class="linenos">322</span></a> <span class="n">_serial_to_generated</span><span class="p">,</span>
+</span><span id="Postgres.Generator-323"><a href="#Postgres.Generator-323"><span class="linenos">323</span></a> <span class="p">],</span>
+</span><span id="Postgres.Generator-324"><a href="#Postgres.Generator-324"><span class="linenos">324</span></a> <span class="p">),</span>
+</span><span id="Postgres.Generator-325"><a href="#Postgres.Generator-325"><span class="linenos">325</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="Postgres.Generator-326"><a href="#Postgres.Generator-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="Postgres.Generator-327"><a href="#Postgres.Generator-327"><span class="linenos">327</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-328"><a href="#Postgres.Generator-328"><span class="linenos">328</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-329"><a href="#Postgres.Generator-329"><span class="linenos">329</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-330"><a href="#Postgres.Generator-330"><span class="linenos">330</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-331"><a href="#Postgres.Generator-331"><span class="linenos">331</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-332"><a href="#Postgres.Generator-332"><span class="linenos">332</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-333"><a href="#Postgres.Generator-333"><span class="linenos">333</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-334"><a href="#Postgres.Generator-334"><span class="linenos">334</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-335"><a href="#Postgres.Generator-335"><span class="linenos">335</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-336"><a href="#Postgres.Generator-336"><span class="linenos">336</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-337"><a href="#Postgres.Generator-337"><span class="linenos">337</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-338"><a href="#Postgres.Generator-338"><span class="linenos">338</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-339"><a href="#Postgres.Generator-339"><span class="linenos">339</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-340"><a href="#Postgres.Generator-340"><span class="linenos">340</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-341"><a href="#Postgres.Generator-341"><span class="linenos">341</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-342"><a href="#Postgres.Generator-342"><span class="linenos">342</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-343"><a href="#Postgres.Generator-343"><span class="linenos">343</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-344"><a href="#Postgres.Generator-344"><span class="linenos">344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</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">remove_target_from_merge</span><span class="p">]),</span>
+</span><span id="Postgres.Generator-345"><a href="#Postgres.Generator-345"><span class="linenos">345</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-346"><a href="#Postgres.Generator-346"><span class="linenos">346</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-347"><a href="#Postgres.Generator-347"><span class="linenos">347</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-348"><a href="#Postgres.Generator-348"><span class="linenos">348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-349"><a href="#Postgres.Generator-349"><span class="linenos">349</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-350"><a href="#Postgres.Generator-350"><span class="linenos">350</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-351"><a href="#Postgres.Generator-351"><span class="linenos">351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="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 TIMESTAMP)&quot;</span><span class="p">,</span>
+</span><span id="Postgres.Generator-352"><a href="#Postgres.Generator-352"><span class="linenos">352</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-353"><a href="#Postgres.Generator-353"><span class="linenos">353</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="Postgres.Generator-354"><a href="#Postgres.Generator-354"><span class="linenos">354</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-355"><a href="#Postgres.Generator-355"><span class="linenos">355</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-356"><a href="#Postgres.Generator-356"><span class="linenos">356</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-357"><a href="#Postgres.Generator-357"><span class="linenos">357</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-358"><a href="#Postgres.Generator-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="Postgres.Generator-359"><a href="#Postgres.Generator-359"><span class="linenos">359</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-360"><a href="#Postgres.Generator-360"><span class="linenos">360</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;</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-361"><a href="#Postgres.Generator-361"><span class="linenos">361</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-362"><a href="#Postgres.Generator-362"><span class="linenos">362</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 class="p">,</span>
+</span><span id="Postgres.Generator-363"><a href="#Postgres.Generator-363"><span class="linenos">363</span></a> <span class="p">}</span>
+</span><span id="Postgres.Generator-364"><a href="#Postgres.Generator-364"><span class="linenos">364</span></a>
+</span><span id="Postgres.Generator-365"><a href="#Postgres.Generator-365"><span class="linenos">365</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Postgres.Generator-366"><a href="#Postgres.Generator-366"><span class="linenos">366</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Postgres.Generator-367"><a href="#Postgres.Generator-367"><span class="linenos">367</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-368"><a href="#Postgres.Generator-368"><span class="linenos">368</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-369"><a href="#Postgres.Generator-369"><span class="linenos">369</span></a> <span class="p">}</span>
</span></pre></div>
@@ -1096,7 +1095,7 @@ Default: True</li>
<dd id="Postgres.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Postgres.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Postgres.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Postgres.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Postgres.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Postgres.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Postgres.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Postgres.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1105,6 +1104,7 @@ Default: True</li>
<dd id="Postgres.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Postgres.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Postgres.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Postgres.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Postgres.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Postgres.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Postgres.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/presto.html b/docs/sqlglot/dialects/presto.html
index d78e456..a09aab9 100644
--- a/docs/sqlglot/dialects/presto.html
+++ b/docs/sqlglot/dialects/presto.html
@@ -215,7 +215,7 @@
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a><span class="k">def</span> <span class="nf">_sequence_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</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">GenerateSeries</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</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 class="mi">1</span><span class="p">)</span> <span class="c1"># Postgres defaults to 1 for generate_series</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</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-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="n">target_type</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>
@@ -232,198 +232,207 @@
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</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">this</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
</span><span id="L-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">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-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><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="k">def</span> <span class="nf">_ensure_utf8</span><span class="p">(</span><span class="n">charset</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="kc">None</span><span class="p">:</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">if</span> <span class="n">charset</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="o">!=</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">:</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported charset </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">sql</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;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-151"><a href="#L-151"><span class="linenos">151</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">Table</span><span class="p">):</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;UNNEST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">sql</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><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">def</span> <span class="nf">_approx_percentile</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</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">4</span><span class="p">:</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">(</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">weight</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-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">quantile</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-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">accuracy</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">3</span><span class="p">),</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="p">)</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</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">3</span><span class="p">:</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">(</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</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-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">quantile</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-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">accuracy</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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="p">)</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">ApproxQuantile</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><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a><span class="k">def</span> <span class="nf">_from_unixtime</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</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">3</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="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">(</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</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-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">hours</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-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">minutes</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-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 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">2</span><span class="p">:</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">(</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</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-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">zone</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-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="p">)</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</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-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><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a><span class="k">class</span> <span class="nc">Presto</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">time_format</span> <span class="c1"># type: ignore</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">time_mapping</span> <span class="c1"># type: ignore</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</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">STRUCT</span><span class="p">,</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="p">}</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="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-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="s2">&quot;CARDINALITY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</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><span id="L-211"><a href="#L-211"><span class="linenos">211</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-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="p">),</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</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-157"><a href="#L-157"><span class="linenos">157</span></a><span class="k">def</span> <span class="nf">_ensure_utf8</span><span class="p">(</span><span class="n">charset</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="kc">None</span><span class="p">:</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">charset</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="o">!=</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">:</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">raise</span> <span class="n">UnsupportedError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported charset </span><span class="si">{</span><span class="n">charset</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="k">def</span> <span class="nf">_approx_percentile</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</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">4</span><span class="p">:</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="p">(</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">weight</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-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">quantile</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 class="n">accuracy</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">3</span><span class="p">),</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="p">)</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</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">3</span><span class="p">:</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">ApproxQuantile</span><span class="p">(</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">quantile</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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">accuracy</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-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="p">)</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</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-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><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a><span class="k">def</span> <span class="nf">_from_unixtime</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</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">3</span><span class="p">:</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">(</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">hours</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-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">minutes</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-185"><a href="#L-185"><span class="linenos">185</span></a> <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="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">(</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">zone</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-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="p">)</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</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-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><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a><span class="k">class</span> <span class="nc">Presto</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">1</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_last&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="n">MySQL</span><span class="o">.</span><span class="n">time_format</span> <span class="c1"># type: ignore</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">time_mapping</span> <span class="c1"># type: ignore</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="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-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</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">STRUCT</span><span class="p">,</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="p">}</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</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-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">_approx_percentile</span><span class="p">,</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="s2">&quot;CARDINALITY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</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-215"><a href="#L-215"><span class="linenos">215</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><span id="L-216"><a href="#L-216"><span class="linenos">216</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-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="p">),</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="s2">&quot;DATE_FORMAT&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;presto&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;DATE_PARSE&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;presto&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;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">_from_unixtime</span><span class="p">,</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</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-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</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-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">instance</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-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="p">),</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">_approx_percentile</span><span class="p">,</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="s2">&quot;FROM_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;TO_UTF8&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">Encode</span><span class="p">(</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="p">),</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="s2">&quot;FROM_UTF8&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">Decode</span><span class="p">(</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">replace</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">charset</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="s2">&quot;utf-8&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;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-220"><a href="#L-220"><span class="linenos">220</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><span id="L-221"><a href="#L-221"><span class="linenos">221</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-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="p">),</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="s2">&quot;DATE_FORMAT&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;presto&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;DATE_PARSE&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;presto&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;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="s2">&quot;FROM_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">_from_unixtime</span><span class="p">,</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="s2">&quot;FROM_UTF8&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">Decode</span><span class="p">(</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">replace</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">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="p">),</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</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-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">:</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><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</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-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">instance</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-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="p">),</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="p">}</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</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;TRIM&quot;</span><span class="p">)</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">class</span> <span class="nc">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-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</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-248"><a href="#L-248"><span class="linenos">248</span></a>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">PROPERTIES_LOCATION</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="p">}</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">TYPE_MAPPING</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">exp</span><span 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-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">exp</span><span 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-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">exp</span><span 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-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">exp</span><span 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-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">exp</span><span 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-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">exp</span><span 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-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="p">}</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</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-269"><a href="#L-269"><span class="linenos">269</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-270"><a href="#L-270"><span class="linenos">270</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-271"><a href="#L-271"><span class="linenos">271</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-272"><a href="#L-272"><span class="linenos">272</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-273"><a href="#L-273"><span class="linenos">273</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 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-274"><a href="#L-274"><span class="linenos">274</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 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-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</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 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-277"><a href="#L-277"><span class="linenos">277</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 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-278"><a href="#L-278"><span class="linenos">278</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="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-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="s2">&quot;DATE_ADD&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-283"><a href="#L-283"><span class="linenos">283</span></a> <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">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-285"><a href="#L-285"><span class="linenos">285</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-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 class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">date_format</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="n">_decode_sql</span><span class="p">,</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="n">_encode_sql</span><span class="p">,</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">_sequence_sql</span><span class="p">,</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</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-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</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-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</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-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</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-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</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 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-309"><a href="#L-309"><span class="linenos">309</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-310"><a href="#L-310"><span class="linenos">310</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-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-313"><a href="#L-313"><span class="linenos">313</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-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;TABLE_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-315"><a href="#L-315"><span class="linenos">315</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-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</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-319"><a href="#L-319"><span class="linenos">319</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;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-320"><a href="#L-320"><span class="linenos">320</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;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-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</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-324"><a href="#L-324"><span class="linenos">324</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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</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(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-329"><a href="#L-329"><span class="linenos">329</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-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="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-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</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">lower</span><span class="p">()</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-335"><a href="#L-335"><span class="linenos">335</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-336"><a href="#L-336"><span class="linenos">336</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-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">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-339"><a href="#L-339"><span class="linenos">339</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-340"><a href="#L-340"><span class="linenos">340</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-341"><a href="#L-341"><span class="linenos">341</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-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="s2">&quot;TO_UTF8&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">Encode</span><span class="p">(</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <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 class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</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;TRIM&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="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-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</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-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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</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-257"><a href="#L-257"><span class="linenos">257</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-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="p">}</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">TYPE_MAPPING</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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">exp</span><span 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-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">exp</span><span 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-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="n">exp</span><span 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-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="n">exp</span><span 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-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">exp</span><span 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-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="n">exp</span><span 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-268"><a href="#L-268"><span class="linenos">268</span></a> <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">TRANSFORMS</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</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-273"><a href="#L-273"><span class="linenos">273</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-274"><a href="#L-274"><span class="linenos">274</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-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</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 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-278"><a href="#L-278"><span class="linenos">278</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 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-279"><a href="#L-279"><span class="linenos">279</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-280"><a href="#L-280"><span class="linenos">280</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 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-281"><a href="#L-281"><span class="linenos">281</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 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-282"><a href="#L-282"><span class="linenos">282</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="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-283"><a href="#L-283"><span class="linenos">283</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-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="p">:</span> <span class="n">_datatype_sql</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">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-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="s2">&quot;DATE_ADD&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-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 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-289"><a href="#L-289"><span class="linenos">289</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-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="p">),</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">date_format</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="n">_decode_sql</span><span class="p">,</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="n">_encode_sql</span><span class="p">,</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">_sequence_sql</span><span class="p">,</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</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-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</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-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</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-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</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-307"><a href="#L-307"><span class="linenos">307</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-308"><a href="#L-308"><span class="linenos">308</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-309"><a href="#L-309"><span class="linenos">309</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-310"><a href="#L-310"><span class="linenos">310</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-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="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</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-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</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="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-318"><a href="#L-318"><span class="linenos">318</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-319"><a href="#L-319"><span class="linenos">319</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-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;TABLE_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-324"><a href="#L-324"><span class="linenos">324</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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</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-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</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;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-329"><a href="#L-329"><span class="linenos">329</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;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-330"><a href="#L-330"><span class="linenos">330</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-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</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-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</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-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</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(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-338"><a href="#L-338"><span class="linenos">338</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-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><span id="L-341"><a href="#L-341"><span class="linenos">341</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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</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">lower</span><span class="p">()</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-344"><a href="#L-344"><span class="linenos">344</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-345"><a href="#L-345"><span class="linenos">345</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-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="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-348"><a href="#L-348"><span class="linenos">348</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-349"><a href="#L-349"><span class="linenos">349</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-350"><a href="#L-350"><span class="linenos">350</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>
@@ -439,158 +448,163 @@
</div>
<a class="headerlink" href="#Presto"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto-191"><a href="#Presto-191"><span class="linenos">191</span></a><span class="k">class</span> <span class="nc">Presto</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
-</span><span id="Presto-192"><a href="#Presto-192"><span class="linenos">192</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Presto-193"><a href="#Presto-193"><span class="linenos">193</span></a> <span class="n">null_ordering</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="Presto-194"><a href="#Presto-194"><span class="linenos">194</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">time_format</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto-195"><a href="#Presto-195"><span class="linenos">195</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">time_mapping</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto-196"><a href="#Presto-196"><span class="linenos">196</span></a>
-</span><span id="Presto-197"><a href="#Presto-197"><span class="linenos">197</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="Presto-198"><a href="#Presto-198"><span class="linenos">198</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-199"><a href="#Presto-199"><span class="linenos">199</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="Presto-200"><a href="#Presto-200"><span class="linenos">200</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Presto-201"><a href="#Presto-201"><span class="linenos">201</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">STRUCT</span><span class="p">,</span>
-</span><span id="Presto-202"><a href="#Presto-202"><span class="linenos">202</span></a> <span class="p">}</span>
-</span><span id="Presto-203"><a href="#Presto-203"><span class="linenos">203</span></a>
-</span><span id="Presto-204"><a href="#Presto-204"><span class="linenos">204</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="Presto-205"><a href="#Presto-205"><span class="linenos">205</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-206"><a href="#Presto-206"><span class="linenos">206</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto-207"><a href="#Presto-207"><span class="linenos">207</span></a> <span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto-208"><a href="#Presto-208"><span class="linenos">208</span></a> <span class="s2">&quot;CARDINALITY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto-209"><a href="#Presto-209"><span class="linenos">209</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto-210"><a href="#Presto-210"><span class="linenos">210</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="Presto-211"><a href="#Presto-211"><span class="linenos">211</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><span id="Presto-212"><a href="#Presto-212"><span class="linenos">212</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="Presto-213"><a href="#Presto-213"><span class="linenos">213</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Presto-214"><a href="#Presto-214"><span class="linenos">214</span></a> <span class="p">),</span>
-</span><span id="Presto-215"><a href="#Presto-215"><span class="linenos">215</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto-195"><a href="#Presto-195"><span class="linenos">195</span></a><span class="k">class</span> <span class="nc">Presto</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
+</span><span id="Presto-196"><a href="#Presto-196"><span class="linenos">196</span></a> <span class="n">index_offset</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Presto-197"><a href="#Presto-197"><span class="linenos">197</span></a> <span class="n">null_ordering</span> <span class="o">=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="Presto-198"><a href="#Presto-198"><span class="linenos">198</span></a> <span class="n">time_format</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">time_format</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto-199"><a href="#Presto-199"><span class="linenos">199</span></a> <span class="n">time_mapping</span> <span class="o">=</span> <span class="n">MySQL</span><span class="o">.</span><span class="n">time_mapping</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto-200"><a href="#Presto-200"><span class="linenos">200</span></a>
+</span><span id="Presto-201"><a href="#Presto-201"><span class="linenos">201</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="Presto-202"><a href="#Presto-202"><span class="linenos">202</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-203"><a href="#Presto-203"><span class="linenos">203</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="Presto-204"><a href="#Presto-204"><span class="linenos">204</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="Presto-205"><a href="#Presto-205"><span class="linenos">205</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">STRUCT</span><span class="p">,</span>
+</span><span id="Presto-206"><a href="#Presto-206"><span class="linenos">206</span></a> <span class="p">}</span>
+</span><span id="Presto-207"><a href="#Presto-207"><span class="linenos">207</span></a>
+</span><span id="Presto-208"><a href="#Presto-208"><span class="linenos">208</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="Presto-209"><a href="#Presto-209"><span class="linenos">209</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-210"><a href="#Presto-210"><span class="linenos">210</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto-211"><a href="#Presto-211"><span class="linenos">211</span></a> <span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-212"><a href="#Presto-212"><span class="linenos">212</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">_approx_percentile</span><span class="p">,</span>
+</span><span id="Presto-213"><a href="#Presto-213"><span class="linenos">213</span></a> <span class="s2">&quot;CARDINALITY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-214"><a href="#Presto-214"><span class="linenos">214</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-215"><a href="#Presto-215"><span class="linenos">215</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="Presto-216"><a href="#Presto-216"><span class="linenos">216</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><span id="Presto-217"><a href="#Presto-217"><span class="linenos">217</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="Presto-218"><a href="#Presto-218"><span class="linenos">218</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Presto-219"><a href="#Presto-219"><span class="linenos">219</span></a> <span class="p">),</span>
-</span><span id="Presto-220"><a href="#Presto-220"><span class="linenos">220</span></a> <span class="s2">&quot;DATE_FORMAT&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;presto&quot;</span><span class="p">),</span>
-</span><span id="Presto-221"><a href="#Presto-221"><span class="linenos">221</span></a> <span class="s2">&quot;DATE_PARSE&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;presto&quot;</span><span class="p">),</span>
-</span><span id="Presto-222"><a href="#Presto-222"><span class="linenos">222</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
-</span><span id="Presto-223"><a href="#Presto-223"><span class="linenos">223</span></a> <span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">_from_unixtime</span><span class="p">,</span>
-</span><span id="Presto-224"><a href="#Presto-224"><span class="linenos">224</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="Presto-225"><a href="#Presto-225"><span class="linenos">225</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="Presto-226"><a href="#Presto-226"><span class="linenos">226</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="Presto-227"><a href="#Presto-227"><span class="linenos">227</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Presto-228"><a href="#Presto-228"><span class="linenos">228</span></a> <span class="n">instance</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="Presto-229"><a href="#Presto-229"><span class="linenos">229</span></a> <span class="p">),</span>
-</span><span id="Presto-230"><a href="#Presto-230"><span class="linenos">230</span></a> <span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto-231"><a href="#Presto-231"><span class="linenos">231</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">_approx_percentile</span><span class="p">,</span>
-</span><span id="Presto-232"><a href="#Presto-232"><span class="linenos">232</span></a> <span class="s2">&quot;FROM_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto-233"><a href="#Presto-233"><span class="linenos">233</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto-234"><a href="#Presto-234"><span class="linenos">234</span></a> <span class="s2">&quot;TO_UTF8&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">Encode</span><span class="p">(</span>
-</span><span id="Presto-235"><a href="#Presto-235"><span class="linenos">235</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
-</span><span id="Presto-236"><a href="#Presto-236"><span class="linenos">236</span></a> <span class="p">),</span>
-</span><span id="Presto-237"><a href="#Presto-237"><span class="linenos">237</span></a> <span class="s2">&quot;FROM_UTF8&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">Decode</span><span class="p">(</span>
-</span><span id="Presto-238"><a href="#Presto-238"><span class="linenos">238</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">replace</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">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="Presto-220"><a href="#Presto-220"><span class="linenos">220</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="Presto-221"><a href="#Presto-221"><span class="linenos">221</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><span id="Presto-222"><a href="#Presto-222"><span class="linenos">222</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="Presto-223"><a href="#Presto-223"><span class="linenos">223</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Presto-224"><a href="#Presto-224"><span class="linenos">224</span></a> <span class="p">),</span>
+</span><span id="Presto-225"><a href="#Presto-225"><span class="linenos">225</span></a> <span class="s2">&quot;DATE_FORMAT&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;presto&quot;</span><span class="p">),</span>
+</span><span id="Presto-226"><a href="#Presto-226"><span class="linenos">226</span></a> <span class="s2">&quot;DATE_PARSE&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;presto&quot;</span><span class="p">),</span>
+</span><span id="Presto-227"><a href="#Presto-227"><span class="linenos">227</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
+</span><span id="Presto-228"><a href="#Presto-228"><span class="linenos">228</span></a> <span class="s2">&quot;FROM_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-229"><a href="#Presto-229"><span class="linenos">229</span></a> <span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">_from_unixtime</span><span class="p">,</span>
+</span><span id="Presto-230"><a href="#Presto-230"><span class="linenos">230</span></a> <span class="s2">&quot;FROM_UTF8&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">Decode</span><span class="p">(</span>
+</span><span id="Presto-231"><a href="#Presto-231"><span class="linenos">231</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">replace</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">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="Presto-232"><a href="#Presto-232"><span class="linenos">232</span></a> <span class="p">),</span>
+</span><span id="Presto-233"><a href="#Presto-233"><span class="linenos">233</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="Presto-234"><a href="#Presto-234"><span class="linenos">234</span></a> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">:</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><span id="Presto-235"><a href="#Presto-235"><span class="linenos">235</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="Presto-236"><a href="#Presto-236"><span class="linenos">236</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="Presto-237"><a href="#Presto-237"><span class="linenos">237</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Presto-238"><a href="#Presto-238"><span class="linenos">238</span></a> <span class="n">instance</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="Presto-239"><a href="#Presto-239"><span class="linenos">239</span></a> <span class="p">),</span>
-</span><span id="Presto-240"><a href="#Presto-240"><span class="linenos">240</span></a> <span class="p">}</span>
-</span><span id="Presto-241"><a href="#Presto-241"><span class="linenos">241</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Presto-242"><a href="#Presto-242"><span class="linenos">242</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;TRIM&quot;</span><span class="p">)</span>
-</span><span id="Presto-243"><a href="#Presto-243"><span class="linenos">243</span></a>
-</span><span id="Presto-244"><a href="#Presto-244"><span class="linenos">244</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="Presto-245"><a href="#Presto-245"><span class="linenos">245</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-246"><a href="#Presto-246"><span class="linenos">246</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-247"><a href="#Presto-247"><span class="linenos">247</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto-248"><a href="#Presto-248"><span class="linenos">248</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="Presto-249"><a href="#Presto-249"><span class="linenos">249</span></a>
-</span><span id="Presto-250"><a href="#Presto-250"><span class="linenos">250</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-251"><a href="#Presto-251"><span class="linenos">251</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto-252"><a href="#Presto-252"><span class="linenos">252</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-253"><a href="#Presto-253"><span class="linenos">253</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-254"><a href="#Presto-254"><span class="linenos">254</span></a> <span class="p">}</span>
-</span><span id="Presto-255"><a href="#Presto-255"><span class="linenos">255</span></a>
-</span><span id="Presto-256"><a href="#Presto-256"><span class="linenos">256</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-257"><a href="#Presto-257"><span class="linenos">257</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto-258"><a href="#Presto-258"><span class="linenos">258</span></a> <span class="n">exp</span><span 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-259"><a href="#Presto-259"><span class="linenos">259</span></a> <span class="n">exp</span><span 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-260"><a href="#Presto-260"><span class="linenos">260</span></a> <span class="n">exp</span><span 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-261"><a href="#Presto-261"><span class="linenos">261</span></a> <span class="n">exp</span><span 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-262"><a href="#Presto-262"><span class="linenos">262</span></a> <span class="n">exp</span><span 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-263"><a href="#Presto-263"><span class="linenos">263</span></a> <span class="n">exp</span><span 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-264"><a href="#Presto-264"><span class="linenos">264</span></a> <span class="p">}</span>
-</span><span id="Presto-265"><a href="#Presto-265"><span class="linenos">265</span></a>
-</span><span id="Presto-266"><a href="#Presto-266"><span class="linenos">266</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto-267"><a href="#Presto-267"><span class="linenos">267</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto-268"><a href="#Presto-268"><span class="linenos">268</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto-269"><a href="#Presto-269"><span class="linenos">269</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-270"><a href="#Presto-270"><span class="linenos">270</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-271"><a href="#Presto-271"><span class="linenos">271</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-272"><a href="#Presto-272"><span class="linenos">272</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-273"><a href="#Presto-273"><span class="linenos">273</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-274"><a href="#Presto-274"><span class="linenos">274</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 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-275"><a href="#Presto-275"><span class="linenos">275</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 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-276"><a href="#Presto-276"><span class="linenos">276</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-277"><a href="#Presto-277"><span class="linenos">277</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 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-278"><a href="#Presto-278"><span class="linenos">278</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 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-279"><a href="#Presto-279"><span class="linenos">279</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="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-280"><a href="#Presto-280"><span class="linenos">280</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-281"><a href="#Presto-281"><span class="linenos">281</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="Presto-282"><a href="#Presto-282"><span class="linenos">282</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-283"><a href="#Presto-283"><span class="linenos">283</span></a> <span class="s2">&quot;DATE_ADD&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-284"><a href="#Presto-284"><span class="linenos">284</span></a> <span class="p">),</span>
-</span><span id="Presto-285"><a href="#Presto-285"><span class="linenos">285</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-286"><a href="#Presto-286"><span class="linenos">286</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-287"><a href="#Presto-287"><span class="linenos">287</span></a> <span class="p">),</span>
-</span><span id="Presto-288"><a href="#Presto-288"><span class="linenos">288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">date_format</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Presto-289"><a href="#Presto-289"><span class="linenos">289</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-290"><a href="#Presto-290"><span class="linenos">290</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="n">_decode_sql</span><span class="p">,</span>
-</span><span id="Presto-291"><a href="#Presto-291"><span class="linenos">291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-292"><a href="#Presto-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="n">_encode_sql</span><span class="p">,</span>
-</span><span id="Presto-293"><a href="#Presto-293"><span class="linenos">293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">_sequence_sql</span><span class="p">,</span>
-</span><span id="Presto-294"><a href="#Presto-294"><span class="linenos">294</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-295"><a href="#Presto-295"><span class="linenos">295</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-296"><a href="#Presto-296"><span class="linenos">296</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-297"><a href="#Presto-297"><span class="linenos">297</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-298"><a href="#Presto-298"><span class="linenos">298</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-299"><a href="#Presto-299"><span class="linenos">299</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-300"><a href="#Presto-300"><span class="linenos">300</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-301"><a href="#Presto-301"><span class="linenos">301</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-302"><a href="#Presto-302"><span class="linenos">302</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-303"><a href="#Presto-303"><span class="linenos">303</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-304"><a href="#Presto-304"><span class="linenos">304</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-305"><a href="#Presto-305"><span class="linenos">305</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-306"><a href="#Presto-306"><span class="linenos">306</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-307"><a href="#Presto-307"><span class="linenos">307</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">]</span>
-</span><span id="Presto-308"><a href="#Presto-308"><span class="linenos">308</span></a> <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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-311"><a href="#Presto-311"><span class="linenos">311</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-312"><a href="#Presto-312"><span class="linenos">312</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-313"><a href="#Presto-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-314"><a href="#Presto-314"><span class="linenos">314</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-315"><a href="#Presto-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;TABLE_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-316"><a href="#Presto-316"><span class="linenos">316</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-317"><a href="#Presto-317"><span class="linenos">317</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-318"><a href="#Presto-318"><span class="linenos">318</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-319"><a href="#Presto-319"><span class="linenos">319</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-320"><a href="#Presto-320"><span class="linenos">320</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;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-321"><a href="#Presto-321"><span class="linenos">321</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;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-322"><a href="#Presto-322"><span class="linenos">322</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-323"><a href="#Presto-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="Presto-324"><a href="#Presto-324"><span class="linenos">324</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-325"><a href="#Presto-325"><span class="linenos">325</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-326"><a href="#Presto-326"><span class="linenos">326</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-327"><a href="#Presto-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-328"><a href="#Presto-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="Presto-329"><a href="#Presto-329"><span class="linenos">329</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(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-330"><a href="#Presto-330"><span class="linenos">330</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-331"><a href="#Presto-331"><span class="linenos">331</span></a> <span class="p">}</span>
-</span><span id="Presto-332"><a href="#Presto-332"><span class="linenos">332</span></a>
-</span><span id="Presto-333"><a href="#Presto-333"><span class="linenos">333</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-334"><a href="#Presto-334"><span class="linenos">334</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-335"><a href="#Presto-335"><span class="linenos">335</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">lower</span><span class="p">()</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-336"><a href="#Presto-336"><span class="linenos">336</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-337"><a href="#Presto-337"><span class="linenos">337</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-338"><a href="#Presto-338"><span class="linenos">338</span></a>
-</span><span id="Presto-339"><a href="#Presto-339"><span class="linenos">339</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-340"><a href="#Presto-340"><span class="linenos">340</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-341"><a href="#Presto-341"><span class="linenos">341</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-342"><a href="#Presto-342"><span class="linenos">342</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-240"><a href="#Presto-240"><span class="linenos">240</span></a> <span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-241"><a href="#Presto-241"><span class="linenos">241</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto-242"><a href="#Presto-242"><span class="linenos">242</span></a> <span class="s2">&quot;TO_UTF8&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">Encode</span><span class="p">(</span>
+</span><span id="Presto-243"><a href="#Presto-243"><span class="linenos">243</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="Presto-244"><a href="#Presto-244"><span class="linenos">244</span></a> <span class="p">),</span>
+</span><span id="Presto-245"><a href="#Presto-245"><span class="linenos">245</span></a> <span class="p">}</span>
+</span><span id="Presto-246"><a href="#Presto-246"><span class="linenos">246</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Presto-247"><a href="#Presto-247"><span class="linenos">247</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;TRIM&quot;</span><span class="p">)</span>
+</span><span id="Presto-248"><a href="#Presto-248"><span class="linenos">248</span></a>
+</span><span id="Presto-249"><a href="#Presto-249"><span class="linenos">249</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="Presto-250"><a href="#Presto-250"><span class="linenos">250</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto-251"><a href="#Presto-251"><span class="linenos">251</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto-252"><a href="#Presto-252"><span class="linenos">252</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto-253"><a href="#Presto-253"><span class="linenos">253</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="Presto-254"><a href="#Presto-254"><span class="linenos">254</span></a>
+</span><span id="Presto-255"><a href="#Presto-255"><span class="linenos">255</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-256"><a href="#Presto-256"><span class="linenos">256</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto-257"><a href="#Presto-257"><span class="linenos">257</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-258"><a href="#Presto-258"><span class="linenos">258</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-259"><a href="#Presto-259"><span class="linenos">259</span></a> <span class="p">}</span>
+</span><span id="Presto-260"><a href="#Presto-260"><span class="linenos">260</span></a>
+</span><span id="Presto-261"><a href="#Presto-261"><span class="linenos">261</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-262"><a href="#Presto-262"><span class="linenos">262</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto-263"><a href="#Presto-263"><span class="linenos">263</span></a> <span class="n">exp</span><span 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-264"><a href="#Presto-264"><span class="linenos">264</span></a> <span class="n">exp</span><span 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-265"><a href="#Presto-265"><span class="linenos">265</span></a> <span class="n">exp</span><span 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-266"><a href="#Presto-266"><span class="linenos">266</span></a> <span class="n">exp</span><span 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-267"><a href="#Presto-267"><span class="linenos">267</span></a> <span class="n">exp</span><span 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-268"><a href="#Presto-268"><span class="linenos">268</span></a> <span class="n">exp</span><span 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-269"><a href="#Presto-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="Presto-270"><a href="#Presto-270"><span class="linenos">270</span></a>
+</span><span id="Presto-271"><a href="#Presto-271"><span class="linenos">271</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto-272"><a href="#Presto-272"><span class="linenos">272</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto-273"><a href="#Presto-273"><span class="linenos">273</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-274"><a href="#Presto-274"><span class="linenos">274</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-275"><a href="#Presto-275"><span class="linenos">275</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-276"><a href="#Presto-276"><span class="linenos">276</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-277"><a href="#Presto-277"><span class="linenos">277</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-278"><a href="#Presto-278"><span class="linenos">278</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 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-279"><a href="#Presto-279"><span class="linenos">279</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 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-280"><a href="#Presto-280"><span class="linenos">280</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-281"><a href="#Presto-281"><span class="linenos">281</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 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-282"><a href="#Presto-282"><span class="linenos">282</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 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-283"><a href="#Presto-283"><span class="linenos">283</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="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-284"><a href="#Presto-284"><span class="linenos">284</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-285"><a href="#Presto-285"><span class="linenos">285</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="Presto-286"><a href="#Presto-286"><span class="linenos">286</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-287"><a href="#Presto-287"><span class="linenos">287</span></a> <span class="s2">&quot;DATE_ADD&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-288"><a href="#Presto-288"><span class="linenos">288</span></a> <span class="p">),</span>
+</span><span id="Presto-289"><a href="#Presto-289"><span class="linenos">289</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-290"><a href="#Presto-290"><span class="linenos">290</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-291"><a href="#Presto-291"><span class="linenos">291</span></a> <span class="p">),</span>
+</span><span id="Presto-292"><a href="#Presto-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">date_format</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Presto-293"><a href="#Presto-293"><span class="linenos">293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-294"><a href="#Presto-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="n">_decode_sql</span><span class="p">,</span>
+</span><span id="Presto-295"><a href="#Presto-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-296"><a href="#Presto-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="n">_encode_sql</span><span class="p">,</span>
+</span><span id="Presto-297"><a href="#Presto-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">_sequence_sql</span><span class="p">,</span>
+</span><span id="Presto-298"><a href="#Presto-298"><span class="linenos">298</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-299"><a href="#Presto-299"><span class="linenos">299</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-300"><a href="#Presto-300"><span class="linenos">300</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-301"><a href="#Presto-301"><span class="linenos">301</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-302"><a href="#Presto-302"><span class="linenos">302</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-303"><a href="#Presto-303"><span class="linenos">303</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-304"><a href="#Presto-304"><span class="linenos">304</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-305"><a href="#Presto-305"><span class="linenos">305</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-306"><a href="#Presto-306"><span class="linenos">306</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-307"><a href="#Presto-307"><span class="linenos">307</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-308"><a href="#Presto-308"><span class="linenos">308</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-309"><a href="#Presto-309"><span class="linenos">309</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-310"><a href="#Presto-310"><span class="linenos">310</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-311"><a href="#Presto-311"><span class="linenos">311</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-312"><a href="#Presto-312"><span class="linenos">312</span></a> <span class="p">[</span>
+</span><span id="Presto-313"><a href="#Presto-313"><span class="linenos">313</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-314"><a href="#Presto-314"><span class="linenos">314</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-315"><a href="#Presto-315"><span class="linenos">315</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">,</span>
+</span><span id="Presto-316"><a href="#Presto-316"><span class="linenos">316</span></a> <span class="p">]</span>
+</span><span id="Presto-317"><a href="#Presto-317"><span class="linenos">317</span></a> <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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-320"><a href="#Presto-320"><span class="linenos">320</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-321"><a href="#Presto-321"><span class="linenos">321</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-322"><a href="#Presto-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-323"><a href="#Presto-323"><span class="linenos">323</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-324"><a href="#Presto-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;TABLE_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-325"><a href="#Presto-325"><span class="linenos">325</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-326"><a href="#Presto-326"><span class="linenos">326</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-327"><a href="#Presto-327"><span class="linenos">327</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-328"><a href="#Presto-328"><span class="linenos">328</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-329"><a href="#Presto-329"><span class="linenos">329</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;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-330"><a href="#Presto-330"><span class="linenos">330</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;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-331"><a href="#Presto-331"><span class="linenos">331</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-332"><a href="#Presto-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="Presto-333"><a href="#Presto-333"><span class="linenos">333</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-334"><a href="#Presto-334"><span class="linenos">334</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-335"><a href="#Presto-335"><span class="linenos">335</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-336"><a href="#Presto-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-337"><a href="#Presto-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="Presto-338"><a href="#Presto-338"><span class="linenos">338</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(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-339"><a href="#Presto-339"><span class="linenos">339</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-340"><a href="#Presto-340"><span class="linenos">340</span></a> <span class="p">}</span>
+</span><span id="Presto-341"><a href="#Presto-341"><span class="linenos">341</span></a>
+</span><span id="Presto-342"><a href="#Presto-342"><span class="linenos">342</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-343"><a href="#Presto-343"><span class="linenos">343</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-344"><a href="#Presto-344"><span class="linenos">344</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">lower</span><span class="p">()</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-345"><a href="#Presto-345"><span class="linenos">345</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-346"><a href="#Presto-346"><span class="linenos">346</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-347"><a href="#Presto-347"><span class="linenos">347</span></a>
+</span><span id="Presto-348"><a href="#Presto-348"><span class="linenos">348</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-349"><a href="#Presto-349"><span class="linenos">349</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-350"><a href="#Presto-350"><span class="linenos">350</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-351"><a href="#Presto-351"><span class="linenos">351</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>
@@ -625,12 +639,12 @@
</div>
<a class="headerlink" href="#Presto.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Tokenizer-197"><a href="#Presto.Tokenizer-197"><span class="linenos">197</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="Presto.Tokenizer-198"><a href="#Presto.Tokenizer-198"><span class="linenos">198</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Tokenizer-199"><a href="#Presto.Tokenizer-199"><span class="linenos">199</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="Presto.Tokenizer-200"><a href="#Presto.Tokenizer-200"><span class="linenos">200</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
-</span><span id="Presto.Tokenizer-201"><a href="#Presto.Tokenizer-201"><span class="linenos">201</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">STRUCT</span><span class="p">,</span>
-</span><span id="Presto.Tokenizer-202"><a href="#Presto.Tokenizer-202"><span class="linenos">202</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Tokenizer-201"><a href="#Presto.Tokenizer-201"><span class="linenos">201</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="Presto.Tokenizer-202"><a href="#Presto.Tokenizer-202"><span class="linenos">202</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Tokenizer-203"><a href="#Presto.Tokenizer-203"><span class="linenos">203</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="Presto.Tokenizer-204"><a href="#Presto.Tokenizer-204"><span class="linenos">204</span></a> <span class="s2">&quot;START&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
+</span><span id="Presto.Tokenizer-205"><a href="#Presto.Tokenizer-205"><span class="linenos">205</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">STRUCT</span><span class="p">,</span>
+</span><span id="Presto.Tokenizer-206"><a href="#Presto.Tokenizer-206"><span class="linenos">206</span></a> <span class="p">}</span>
</span></pre></div>
@@ -658,45 +672,46 @@
</div>
<a class="headerlink" href="#Presto.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Parser-204"><a href="#Presto.Parser-204"><span class="linenos">204</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="Presto.Parser-205"><a href="#Presto.Parser-205"><span class="linenos">205</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Parser-206"><a href="#Presto.Parser-206"><span class="linenos">206</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto.Parser-207"><a href="#Presto.Parser-207"><span class="linenos">207</span></a> <span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto.Parser-208"><a href="#Presto.Parser-208"><span class="linenos">208</span></a> <span class="s2">&quot;CARDINALITY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto.Parser-209"><a href="#Presto.Parser-209"><span class="linenos">209</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto.Parser-210"><a href="#Presto.Parser-210"><span class="linenos">210</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="Presto.Parser-211"><a href="#Presto.Parser-211"><span class="linenos">211</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><span id="Presto.Parser-212"><a href="#Presto.Parser-212"><span class="linenos">212</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="Presto.Parser-213"><a href="#Presto.Parser-213"><span class="linenos">213</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Presto.Parser-214"><a href="#Presto.Parser-214"><span class="linenos">214</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-215"><a href="#Presto.Parser-215"><span class="linenos">215</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Parser-208"><a href="#Presto.Parser-208"><span class="linenos">208</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="Presto.Parser-209"><a href="#Presto.Parser-209"><span class="linenos">209</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Parser-210"><a href="#Presto.Parser-210"><span class="linenos">210</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto.Parser-211"><a href="#Presto.Parser-211"><span class="linenos">211</span></a> <span class="s2">&quot;APPROX_DISTINCT&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto.Parser-212"><a href="#Presto.Parser-212"><span class="linenos">212</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">_approx_percentile</span><span class="p">,</span>
+</span><span id="Presto.Parser-213"><a href="#Presto.Parser-213"><span class="linenos">213</span></a> <span class="s2">&quot;CARDINALITY&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySize</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto.Parser-214"><a href="#Presto.Parser-214"><span class="linenos">214</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayContains</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto.Parser-215"><a href="#Presto.Parser-215"><span class="linenos">215</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="Presto.Parser-216"><a href="#Presto.Parser-216"><span class="linenos">216</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><span id="Presto.Parser-217"><a href="#Presto.Parser-217"><span class="linenos">217</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="Presto.Parser-218"><a href="#Presto.Parser-218"><span class="linenos">218</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Presto.Parser-219"><a href="#Presto.Parser-219"><span class="linenos">219</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-220"><a href="#Presto.Parser-220"><span class="linenos">220</span></a> <span class="s2">&quot;DATE_FORMAT&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;presto&quot;</span><span class="p">),</span>
-</span><span id="Presto.Parser-221"><a href="#Presto.Parser-221"><span class="linenos">221</span></a> <span class="s2">&quot;DATE_PARSE&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;presto&quot;</span><span class="p">),</span>
-</span><span id="Presto.Parser-222"><a href="#Presto.Parser-222"><span class="linenos">222</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
-</span><span id="Presto.Parser-223"><a href="#Presto.Parser-223"><span class="linenos">223</span></a> <span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">_from_unixtime</span><span class="p">,</span>
-</span><span id="Presto.Parser-224"><a href="#Presto.Parser-224"><span class="linenos">224</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="Presto.Parser-225"><a href="#Presto.Parser-225"><span class="linenos">225</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
-</span><span id="Presto.Parser-226"><a href="#Presto.Parser-226"><span class="linenos">226</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="Presto.Parser-227"><a href="#Presto.Parser-227"><span class="linenos">227</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Presto.Parser-228"><a href="#Presto.Parser-228"><span class="linenos">228</span></a> <span class="n">instance</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="Presto.Parser-229"><a href="#Presto.Parser-229"><span class="linenos">229</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-230"><a href="#Presto.Parser-230"><span class="linenos">230</span></a> <span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto.Parser-231"><a href="#Presto.Parser-231"><span class="linenos">231</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">_approx_percentile</span><span class="p">,</span>
-</span><span id="Presto.Parser-232"><a href="#Presto.Parser-232"><span class="linenos">232</span></a> <span class="s2">&quot;FROM_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto.Parser-233"><a href="#Presto.Parser-233"><span class="linenos">233</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Presto.Parser-234"><a href="#Presto.Parser-234"><span class="linenos">234</span></a> <span class="s2">&quot;TO_UTF8&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">Encode</span><span class="p">(</span>
-</span><span id="Presto.Parser-235"><a href="#Presto.Parser-235"><span class="linenos">235</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
-</span><span id="Presto.Parser-236"><a href="#Presto.Parser-236"><span class="linenos">236</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-237"><a href="#Presto.Parser-237"><span class="linenos">237</span></a> <span class="s2">&quot;FROM_UTF8&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">Decode</span><span class="p">(</span>
-</span><span id="Presto.Parser-238"><a href="#Presto.Parser-238"><span class="linenos">238</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">replace</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">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="Presto.Parser-220"><a href="#Presto.Parser-220"><span class="linenos">220</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="Presto.Parser-221"><a href="#Presto.Parser-221"><span class="linenos">221</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><span id="Presto.Parser-222"><a href="#Presto.Parser-222"><span class="linenos">222</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="Presto.Parser-223"><a href="#Presto.Parser-223"><span class="linenos">223</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Presto.Parser-224"><a href="#Presto.Parser-224"><span class="linenos">224</span></a> <span class="p">),</span>
+</span><span id="Presto.Parser-225"><a href="#Presto.Parser-225"><span class="linenos">225</span></a> <span class="s2">&quot;DATE_FORMAT&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;presto&quot;</span><span class="p">),</span>
+</span><span id="Presto.Parser-226"><a href="#Presto.Parser-226"><span class="linenos">226</span></a> <span class="s2">&quot;DATE_PARSE&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">StrToTime</span><span class="p">,</span> <span class="s2">&quot;presto&quot;</span><span class="p">),</span>
+</span><span id="Presto.Parser-227"><a href="#Presto.Parser-227"><span class="linenos">227</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="n">date_trunc_to_time</span><span class="p">,</span>
+</span><span id="Presto.Parser-228"><a href="#Presto.Parser-228"><span class="linenos">228</span></a> <span class="s2">&quot;FROM_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unhex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto.Parser-229"><a href="#Presto.Parser-229"><span class="linenos">229</span></a> <span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">_from_unixtime</span><span class="p">,</span>
+</span><span id="Presto.Parser-230"><a href="#Presto.Parser-230"><span class="linenos">230</span></a> <span class="s2">&quot;FROM_UTF8&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">Decode</span><span class="p">(</span>
+</span><span id="Presto.Parser-231"><a href="#Presto.Parser-231"><span class="linenos">231</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">replace</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">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="Presto.Parser-232"><a href="#Presto.Parser-232"><span class="linenos">232</span></a> <span class="p">),</span>
+</span><span id="Presto.Parser-233"><a href="#Presto.Parser-233"><span class="linenos">233</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="Presto.Parser-234"><a href="#Presto.Parser-234"><span class="linenos">234</span></a> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">:</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><span id="Presto.Parser-235"><a href="#Presto.Parser-235"><span class="linenos">235</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">(</span>
+</span><span id="Presto.Parser-236"><a href="#Presto.Parser-236"><span class="linenos">236</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="Presto.Parser-237"><a href="#Presto.Parser-237"><span class="linenos">237</span></a> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Presto.Parser-238"><a href="#Presto.Parser-238"><span class="linenos">238</span></a> <span class="n">instance</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="Presto.Parser-239"><a href="#Presto.Parser-239"><span class="linenos">239</span></a> <span class="p">),</span>
-</span><span id="Presto.Parser-240"><a href="#Presto.Parser-240"><span class="linenos">240</span></a> <span class="p">}</span>
-</span><span id="Presto.Parser-241"><a href="#Presto.Parser-241"><span class="linenos">241</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Presto.Parser-242"><a href="#Presto.Parser-242"><span class="linenos">242</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;TRIM&quot;</span><span class="p">)</span>
+</span><span id="Presto.Parser-240"><a href="#Presto.Parser-240"><span class="linenos">240</span></a> <span class="s2">&quot;TO_UNIXTIME&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto.Parser-241"><a href="#Presto.Parser-241"><span class="linenos">241</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Presto.Parser-242"><a href="#Presto.Parser-242"><span class="linenos">242</span></a> <span class="s2">&quot;TO_UTF8&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">Encode</span><span class="p">(</span>
+</span><span id="Presto.Parser-243"><a href="#Presto.Parser-243"><span class="linenos">243</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</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="s2">&quot;utf-8&quot;</span><span class="p">)</span>
+</span><span id="Presto.Parser-244"><a href="#Presto.Parser-244"><span class="linenos">244</span></a> <span class="p">),</span>
+</span><span id="Presto.Parser-245"><a href="#Presto.Parser-245"><span class="linenos">245</span></a> <span class="p">}</span>
+</span><span id="Presto.Parser-246"><a href="#Presto.Parser-246"><span class="linenos">246</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Presto.Parser-247"><a href="#Presto.Parser-247"><span class="linenos">247</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;TRIM&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -753,105 +768,109 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Presto.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Presto.Generator-244"><a href="#Presto.Generator-244"><span class="linenos">244</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="Presto.Generator-245"><a href="#Presto.Generator-245"><span class="linenos">245</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-246"><a href="#Presto.Generator-246"><span class="linenos">246</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-247"><a href="#Presto.Generator-247"><span class="linenos">247</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Presto.Generator-248"><a href="#Presto.Generator-248"><span class="linenos">248</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="Presto.Generator-249"><a href="#Presto.Generator-249"><span class="linenos">249</span></a>
-</span><span id="Presto.Generator-250"><a href="#Presto.Generator-250"><span class="linenos">250</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-251"><a href="#Presto.Generator-251"><span class="linenos">251</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto.Generator-252"><a href="#Presto.Generator-252"><span class="linenos">252</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-253"><a href="#Presto.Generator-253"><span class="linenos">253</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-254"><a href="#Presto.Generator-254"><span class="linenos">254</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-255"><a href="#Presto.Generator-255"><span class="linenos">255</span></a>
-</span><span id="Presto.Generator-256"><a href="#Presto.Generator-256"><span class="linenos">256</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-257"><a href="#Presto.Generator-257"><span class="linenos">257</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto.Generator-258"><a href="#Presto.Generator-258"><span class="linenos">258</span></a> <span class="n">exp</span><span 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-259"><a href="#Presto.Generator-259"><span class="linenos">259</span></a> <span class="n">exp</span><span 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-260"><a href="#Presto.Generator-260"><span class="linenos">260</span></a> <span class="n">exp</span><span 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-261"><a href="#Presto.Generator-261"><span class="linenos">261</span></a> <span class="n">exp</span><span 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-262"><a href="#Presto.Generator-262"><span class="linenos">262</span></a> <span class="n">exp</span><span 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-263"><a href="#Presto.Generator-263"><span class="linenos">263</span></a> <span class="n">exp</span><span 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-264"><a href="#Presto.Generator-264"><span class="linenos">264</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-265"><a href="#Presto.Generator-265"><span class="linenos">265</span></a>
-</span><span id="Presto.Generator-266"><a href="#Presto.Generator-266"><span class="linenos">266</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Presto.Generator-267"><a href="#Presto.Generator-267"><span class="linenos">267</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto.Generator-268"><a href="#Presto.Generator-268"><span class="linenos">268</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">UNALIAS_GROUP</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Presto.Generator-269"><a href="#Presto.Generator-269"><span class="linenos">269</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-270"><a href="#Presto.Generator-270"><span class="linenos">270</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-271"><a href="#Presto.Generator-271"><span class="linenos">271</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-272"><a href="#Presto.Generator-272"><span class="linenos">272</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-273"><a href="#Presto.Generator-273"><span class="linenos">273</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-274"><a href="#Presto.Generator-274"><span class="linenos">274</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 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-275"><a href="#Presto.Generator-275"><span class="linenos">275</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 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-276"><a href="#Presto.Generator-276"><span class="linenos">276</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-277"><a href="#Presto.Generator-277"><span class="linenos">277</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 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-278"><a href="#Presto.Generator-278"><span class="linenos">278</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 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-279"><a href="#Presto.Generator-279"><span class="linenos">279</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="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-280"><a href="#Presto.Generator-280"><span class="linenos">280</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-281"><a href="#Presto.Generator-281"><span class="linenos">281</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="Presto.Generator-282"><a href="#Presto.Generator-282"><span class="linenos">282</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-283"><a href="#Presto.Generator-283"><span class="linenos">283</span></a> <span class="s2">&quot;DATE_ADD&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-284"><a href="#Presto.Generator-284"><span class="linenos">284</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-285"><a href="#Presto.Generator-285"><span class="linenos">285</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-286"><a href="#Presto.Generator-286"><span class="linenos">286</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-287"><a href="#Presto.Generator-287"><span class="linenos">287</span></a> <span class="p">),</span>
-</span><span id="Presto.Generator-288"><a href="#Presto.Generator-288"><span class="linenos">288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">date_format</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
-</span><span id="Presto.Generator-289"><a href="#Presto.Generator-289"><span class="linenos">289</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-290"><a href="#Presto.Generator-290"><span class="linenos">290</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="n">_decode_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-291"><a href="#Presto.Generator-291"><span class="linenos">291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-292"><a href="#Presto.Generator-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="n">_encode_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-293"><a href="#Presto.Generator-293"><span class="linenos">293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">_sequence_sql</span><span class="p">,</span>
-</span><span id="Presto.Generator-294"><a href="#Presto.Generator-294"><span class="linenos">294</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-295"><a href="#Presto.Generator-295"><span class="linenos">295</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-296"><a href="#Presto.Generator-296"><span class="linenos">296</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-297"><a href="#Presto.Generator-297"><span class="linenos">297</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-298"><a href="#Presto.Generator-298"><span class="linenos">298</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-299"><a href="#Presto.Generator-299"><span class="linenos">299</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-300"><a href="#Presto.Generator-300"><span class="linenos">300</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-301"><a href="#Presto.Generator-301"><span class="linenos">301</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-302"><a href="#Presto.Generator-302"><span class="linenos">302</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-303"><a href="#Presto.Generator-303"><span class="linenos">303</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-304"><a href="#Presto.Generator-304"><span class="linenos">304</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-305"><a href="#Presto.Generator-305"><span class="linenos">305</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-306"><a href="#Presto.Generator-306"><span class="linenos">306</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-307"><a href="#Presto.Generator-307"><span class="linenos">307</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_qualify</span><span class="p">,</span> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">]</span>
-</span><span id="Presto.Generator-308"><a href="#Presto.Generator-308"><span class="linenos">308</span></a> <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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-311"><a href="#Presto.Generator-311"><span class="linenos">311</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-312"><a href="#Presto.Generator-312"><span class="linenos">312</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-313"><a href="#Presto.Generator-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-314"><a href="#Presto.Generator-314"><span class="linenos">314</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-315"><a href="#Presto.Generator-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;TABLE_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-316"><a href="#Presto.Generator-316"><span class="linenos">316</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-317"><a href="#Presto.Generator-317"><span class="linenos">317</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-318"><a href="#Presto.Generator-318"><span class="linenos">318</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-319"><a href="#Presto.Generator-319"><span class="linenos">319</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-320"><a href="#Presto.Generator-320"><span class="linenos">320</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;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-321"><a href="#Presto.Generator-321"><span class="linenos">321</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;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-322"><a href="#Presto.Generator-322"><span class="linenos">322</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-323"><a href="#Presto.Generator-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
-</span><span id="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">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</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">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-326"><a href="#Presto.Generator-326"><span class="linenos">326</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-327"><a href="#Presto.Generator-327"><span class="linenos">327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-328"><a href="#Presto.Generator-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="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">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(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-330"><a href="#Presto.Generator-330"><span class="linenos">330</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-331"><a href="#Presto.Generator-331"><span class="linenos">331</span></a> <span class="p">}</span>
-</span><span id="Presto.Generator-332"><a href="#Presto.Generator-332"><span class="linenos">332</span></a>
-</span><span id="Presto.Generator-333"><a href="#Presto.Generator-333"><span class="linenos">333</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-334"><a href="#Presto.Generator-334"><span class="linenos">334</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-335"><a href="#Presto.Generator-335"><span class="linenos">335</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">lower</span><span class="p">()</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-336"><a href="#Presto.Generator-336"><span class="linenos">336</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-337"><a href="#Presto.Generator-337"><span class="linenos">337</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-338"><a href="#Presto.Generator-338"><span class="linenos">338</span></a>
-</span><span id="Presto.Generator-339"><a href="#Presto.Generator-339"><span class="linenos">339</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-340"><a href="#Presto.Generator-340"><span class="linenos">340</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-341"><a href="#Presto.Generator-341"><span class="linenos">341</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-342"><a href="#Presto.Generator-342"><span class="linenos">342</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-249"><a href="#Presto.Generator-249"><span class="linenos">249</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="Presto.Generator-250"><a href="#Presto.Generator-250"><span class="linenos">250</span></a> <span class="n">INTERVAL_ALLOWS_PLURAL_FORM</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto.Generator-251"><a href="#Presto.Generator-251"><span class="linenos">251</span></a> <span class="n">JOIN_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto.Generator-252"><a href="#Presto.Generator-252"><span class="linenos">252</span></a> <span class="n">TABLE_HINTS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Presto.Generator-253"><a href="#Presto.Generator-253"><span class="linenos">253</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="Presto.Generator-254"><a href="#Presto.Generator-254"><span class="linenos">254</span></a>
+</span><span id="Presto.Generator-255"><a href="#Presto.Generator-255"><span class="linenos">255</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-256"><a href="#Presto.Generator-256"><span class="linenos">256</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto.Generator-257"><a href="#Presto.Generator-257"><span class="linenos">257</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-258"><a href="#Presto.Generator-258"><span class="linenos">258</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-259"><a href="#Presto.Generator-259"><span class="linenos">259</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-260"><a href="#Presto.Generator-260"><span class="linenos">260</span></a>
+</span><span id="Presto.Generator-261"><a href="#Presto.Generator-261"><span class="linenos">261</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-262"><a href="#Presto.Generator-262"><span class="linenos">262</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto.Generator-263"><a href="#Presto.Generator-263"><span class="linenos">263</span></a> <span class="n">exp</span><span 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-264"><a href="#Presto.Generator-264"><span class="linenos">264</span></a> <span class="n">exp</span><span 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-265"><a href="#Presto.Generator-265"><span class="linenos">265</span></a> <span class="n">exp</span><span 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-266"><a href="#Presto.Generator-266"><span class="linenos">266</span></a> <span class="n">exp</span><span 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-267"><a href="#Presto.Generator-267"><span class="linenos">267</span></a> <span class="n">exp</span><span 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-268"><a href="#Presto.Generator-268"><span class="linenos">268</span></a> <span class="n">exp</span><span 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-269"><a href="#Presto.Generator-269"><span class="linenos">269</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-270"><a href="#Presto.Generator-270"><span class="linenos">270</span></a>
+</span><span id="Presto.Generator-271"><a href="#Presto.Generator-271"><span class="linenos">271</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Presto.Generator-272"><a href="#Presto.Generator-272"><span class="linenos">272</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Presto.Generator-273"><a href="#Presto.Generator-273"><span class="linenos">273</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-274"><a href="#Presto.Generator-274"><span class="linenos">274</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-275"><a href="#Presto.Generator-275"><span class="linenos">275</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-276"><a href="#Presto.Generator-276"><span class="linenos">276</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-277"><a href="#Presto.Generator-277"><span class="linenos">277</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-278"><a href="#Presto.Generator-278"><span class="linenos">278</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 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-279"><a href="#Presto.Generator-279"><span class="linenos">279</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 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-280"><a href="#Presto.Generator-280"><span class="linenos">280</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-281"><a href="#Presto.Generator-281"><span class="linenos">281</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 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-282"><a href="#Presto.Generator-282"><span class="linenos">282</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 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-283"><a href="#Presto.Generator-283"><span class="linenos">283</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="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-284"><a href="#Presto.Generator-284"><span class="linenos">284</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-285"><a href="#Presto.Generator-285"><span class="linenos">285</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="Presto.Generator-286"><a href="#Presto.Generator-286"><span class="linenos">286</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-287"><a href="#Presto.Generator-287"><span class="linenos">287</span></a> <span class="s2">&quot;DATE_ADD&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-288"><a href="#Presto.Generator-288"><span class="linenos">288</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-289"><a href="#Presto.Generator-289"><span class="linenos">289</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-290"><a href="#Presto.Generator-290"><span class="linenos">290</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-291"><a href="#Presto.Generator-291"><span class="linenos">291</span></a> <span class="p">),</span>
+</span><span id="Presto.Generator-292"><a href="#Presto.Generator-292"><span class="linenos">292</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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">date_format</span><span class="si">}</span><span class="s2">) AS DATE)&quot;</span><span class="p">,</span>
+</span><span id="Presto.Generator-293"><a href="#Presto.Generator-293"><span class="linenos">293</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(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-294"><a href="#Presto.Generator-294"><span class="linenos">294</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">:</span> <span class="n">_decode_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-295"><a href="#Presto.Generator-295"><span class="linenos">295</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DiToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-296"><a href="#Presto.Generator-296"><span class="linenos">296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Encode</span><span class="p">:</span> <span class="n">_encode_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-297"><a href="#Presto.Generator-297"><span class="linenos">297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateSeries</span><span class="p">:</span> <span class="n">_sequence_sql</span><span class="p">,</span>
+</span><span id="Presto.Generator-298"><a href="#Presto.Generator-298"><span class="linenos">298</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-299"><a href="#Presto.Generator-299"><span class="linenos">299</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-300"><a href="#Presto.Generator-300"><span class="linenos">300</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-301"><a href="#Presto.Generator-301"><span class="linenos">301</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-302"><a href="#Presto.Generator-302"><span class="linenos">302</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-303"><a href="#Presto.Generator-303"><span class="linenos">303</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-304"><a href="#Presto.Generator-304"><span class="linenos">304</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-305"><a href="#Presto.Generator-305"><span class="linenos">305</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-306"><a href="#Presto.Generator-306"><span class="linenos">306</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-307"><a href="#Presto.Generator-307"><span class="linenos">307</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-308"><a href="#Presto.Generator-308"><span class="linenos">308</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-309"><a href="#Presto.Generator-309"><span class="linenos">309</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-310"><a href="#Presto.Generator-310"><span class="linenos">310</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-311"><a href="#Presto.Generator-311"><span class="linenos">311</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-312"><a href="#Presto.Generator-312"><span class="linenos">312</span></a> <span class="p">[</span>
+</span><span id="Presto.Generator-313"><a href="#Presto.Generator-313"><span class="linenos">313</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-314"><a href="#Presto.Generator-314"><span class="linenos">314</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-315"><a href="#Presto.Generator-315"><span class="linenos">315</span></a> <span class="n">transforms</span><span class="o">.</span><span class="n">explode_to_unnest</span><span class="p">,</span>
+</span><span id="Presto.Generator-316"><a href="#Presto.Generator-316"><span class="linenos">316</span></a> <span class="p">]</span>
+</span><span id="Presto.Generator-317"><a href="#Presto.Generator-317"><span class="linenos">317</span></a> <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">SortArray</span><span class="p">:</span> <span class="n">_no_sort_array</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">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-320"><a href="#Presto.Generator-320"><span class="linenos">320</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-321"><a href="#Presto.Generator-321"><span class="linenos">321</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-322"><a href="#Presto.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-323"><a href="#Presto.Generator-323"><span class="linenos">323</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-324"><a href="#Presto.Generator-324"><span class="linenos">324</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">:</span> <span 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;TABLE_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-325"><a href="#Presto.Generator-325"><span class="linenos">325</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-326"><a href="#Presto.Generator-326"><span class="linenos">326</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-327"><a href="#Presto.Generator-327"><span class="linenos">327</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-328"><a href="#Presto.Generator-328"><span class="linenos">328</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-329"><a href="#Presto.Generator-329"><span class="linenos">329</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;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-330"><a href="#Presto.Generator-330"><span class="linenos">330</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;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-331"><a href="#Presto.Generator-331"><span class="linenos">331</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-332"><a href="#Presto.Generator-332"><span class="linenos">332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDiToDi</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;CAST(SUBSTR(REPLACE(CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS VARCHAR), &#39;-&#39;, &#39;&#39;), 1, 8) AS INT)&quot;</span><span class="p">,</span>
+</span><span id="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">TsOrDsAdd</span><span class="p">:</span> <span class="n">_ts_or_ds_add_sql</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">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-335"><a href="#Presto.Generator-335"><span class="linenos">335</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-336"><a href="#Presto.Generator-336"><span class="linenos">336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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-337"><a href="#Presto.Generator-337"><span class="linenos">337</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="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">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(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-339"><a href="#Presto.Generator-339"><span class="linenos">339</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-340"><a href="#Presto.Generator-340"><span class="linenos">340</span></a> <span class="p">}</span>
+</span><span id="Presto.Generator-341"><a href="#Presto.Generator-341"><span class="linenos">341</span></a>
+</span><span id="Presto.Generator-342"><a href="#Presto.Generator-342"><span class="linenos">342</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-343"><a href="#Presto.Generator-343"><span class="linenos">343</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-344"><a href="#Presto.Generator-344"><span class="linenos">344</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">lower</span><span class="p">()</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-345"><a href="#Presto.Generator-345"><span class="linenos">345</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-346"><a href="#Presto.Generator-346"><span class="linenos">346</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-347"><a href="#Presto.Generator-347"><span class="linenos">347</span></a>
+</span><span id="Presto.Generator-348"><a href="#Presto.Generator-348"><span class="linenos">348</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-349"><a href="#Presto.Generator-349"><span class="linenos">349</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-350"><a href="#Presto.Generator-350"><span class="linenos">350</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-351"><a href="#Presto.Generator-351"><span class="linenos">351</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>
@@ -910,11 +929,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-333"><a href="#Presto.Generator.interval_sql-333"><span class="linenos">333</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-334"><a href="#Presto.Generator.interval_sql-334"><span class="linenos">334</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-335"><a href="#Presto.Generator.interval_sql-335"><span class="linenos">335</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">lower</span><span class="p">()</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-336"><a href="#Presto.Generator.interval_sql-336"><span class="linenos">336</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-337"><a href="#Presto.Generator.interval_sql-337"><span class="linenos">337</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-342"><a href="#Presto.Generator.interval_sql-342"><span class="linenos">342</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-343"><a href="#Presto.Generator.interval_sql-343"><span class="linenos">343</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-344"><a href="#Presto.Generator.interval_sql-344"><span class="linenos">344</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">lower</span><span class="p">()</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-345"><a href="#Presto.Generator.interval_sql-345"><span class="linenos">345</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-346"><a href="#Presto.Generator.interval_sql-346"><span class="linenos">346</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>
@@ -932,10 +951,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-339"><a href="#Presto.Generator.transaction_sql-339"><span class="linenos">339</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-340"><a href="#Presto.Generator.transaction_sql-340"><span class="linenos">340</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-341"><a href="#Presto.Generator.transaction_sql-341"><span class="linenos">341</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-342"><a href="#Presto.Generator.transaction_sql-342"><span class="linenos">342</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-348"><a href="#Presto.Generator.transaction_sql-348"><span class="linenos">348</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-349"><a href="#Presto.Generator.transaction_sql-349"><span class="linenos">349</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-350"><a href="#Presto.Generator.transaction_sql-350"><span class="linenos">350</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-351"><a href="#Presto.Generator.transaction_sql-351"><span class="linenos">351</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>
@@ -1066,7 +1085,7 @@ Default: True</li>
<dd id="Presto.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Presto.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Presto.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Presto.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Presto.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Presto.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Presto.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Presto.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1075,6 +1094,7 @@ Default: True</li>
<dd id="Presto.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Presto.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Presto.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Presto.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Presto.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Presto.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Presto.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/redshift.html b/docs/sqlglot/dialects/redshift.html
index 825d63c..ee4f196 100644
--- a/docs/sqlglot/dialects/redshift.html
+++ b/docs/sqlglot/dialects/redshift.html
@@ -181,18 +181,18 @@
</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</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 class="c1"># type: ignore</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_DISTINCT_ON</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</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;SYSDATE&quot;</span><span class="p">,</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;DATEADD&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="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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</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-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATEDIFF&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="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-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="p">),</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</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-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</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;SYSDATE&quot;</span><span class="p">,</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</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-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;DATEADD&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="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-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 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-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;DATEDIFF&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="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-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="p">),</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</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-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</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_distinct_on</span><span class="p">]),</span>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</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 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-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="p">}</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
@@ -347,18 +347,18 @@
</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-93"><a href="#Redshift-93"><span class="linenos"> 93</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 class="c1"># type: ignore</span>
-</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_DISTINCT_ON</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</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;SYSDATE&quot;</span><span class="p">,</span>
-</span><span id="Redshift-96"><a href="#Redshift-96"><span class="linenos"> 96</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="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</span></a> <span class="s2">&quot;DATEADD&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="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="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
-</span><span id="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</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="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a> <span class="s2">&quot;DATEDIFF&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="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="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</span></a> <span class="p">),</span>
-</span><span id="Redshift-102"><a href="#Redshift-102"><span class="linenos">102</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-103"><a href="#Redshift-103"><span class="linenos">103</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-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
-</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</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;SYSDATE&quot;</span><span class="p">,</span>
+</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</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="Redshift-96"><a href="#Redshift-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;DATEADD&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="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="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
+</span><span id="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</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="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATEDIFF&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="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="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a> <span class="p">),</span>
+</span><span id="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</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-102"><a href="#Redshift-102"><span class="linenos">102</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-103"><a href="#Redshift-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="Redshift-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</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_distinct_on</span><span class="p">]),</span>
</span><span id="Redshift-106"><a href="#Redshift-106"><span class="linenos">106</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 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-107"><a href="#Redshift-107"><span class="linenos">107</span></a> <span class="p">}</span>
</span><span id="Redshift-108"><a href="#Redshift-108"><span class="linenos">108</span></a>
@@ -605,18 +605,18 @@ Default: "nulls_are_small"</li>
</span><span id="Redshift.Generator-91"><a href="#Redshift.Generator-91"><span class="linenos"> 91</span></a>
</span><span id="Redshift.Generator-92"><a href="#Redshift.Generator-92"><span class="linenos"> 92</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Generator-93"><a href="#Redshift.Generator-93"><span class="linenos"> 93</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 class="c1"># type: ignore</span>
-</span><span id="Redshift.Generator-94"><a href="#Redshift.Generator-94"><span class="linenos"> 94</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_DISTINCT_ON</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Redshift.Generator-95"><a href="#Redshift.Generator-95"><span class="linenos"> 95</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;SYSDATE&quot;</span><span class="p">,</span>
-</span><span id="Redshift.Generator-96"><a href="#Redshift.Generator-96"><span class="linenos"> 96</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="Redshift.Generator-97"><a href="#Redshift.Generator-97"><span class="linenos"> 97</span></a> <span class="s2">&quot;DATEADD&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="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="Redshift.Generator-98"><a href="#Redshift.Generator-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
-</span><span id="Redshift.Generator-99"><a href="#Redshift.Generator-99"><span class="linenos"> 99</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="Redshift.Generator-100"><a href="#Redshift.Generator-100"><span class="linenos">100</span></a> <span class="s2">&quot;DATEDIFF&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="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="Redshift.Generator-101"><a href="#Redshift.Generator-101"><span class="linenos">101</span></a> <span class="p">),</span>
-</span><span id="Redshift.Generator-102"><a href="#Redshift.Generator-102"><span class="linenos">102</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-103"><a href="#Redshift.Generator-103"><span class="linenos">103</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-104"><a href="#Redshift.Generator-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
-</span><span id="Redshift.Generator-105"><a href="#Redshift.Generator-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-94"><a href="#Redshift.Generator-94"><span class="linenos"> 94</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;SYSDATE&quot;</span><span class="p">,</span>
+</span><span id="Redshift.Generator-95"><a href="#Redshift.Generator-95"><span class="linenos"> 95</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="Redshift.Generator-96"><a href="#Redshift.Generator-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;DATEADD&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="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="Redshift.Generator-97"><a href="#Redshift.Generator-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
+</span><span id="Redshift.Generator-98"><a href="#Redshift.Generator-98"><span class="linenos"> 98</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="Redshift.Generator-99"><a href="#Redshift.Generator-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATEDIFF&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="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="Redshift.Generator-100"><a href="#Redshift.Generator-100"><span class="linenos">100</span></a> <span class="p">),</span>
+</span><span id="Redshift.Generator-101"><a href="#Redshift.Generator-101"><span class="linenos">101</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-102"><a href="#Redshift.Generator-102"><span class="linenos">102</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-103"><a href="#Redshift.Generator-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-104"><a href="#Redshift.Generator-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
+</span><span id="Redshift.Generator-105"><a href="#Redshift.Generator-105"><span class="linenos">105</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_distinct_on</span><span class="p">]),</span>
</span><span id="Redshift.Generator-106"><a href="#Redshift.Generator-106"><span class="linenos">106</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 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-107"><a href="#Redshift.Generator-107"><span class="linenos">107</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-108"><a href="#Redshift.Generator-108"><span class="linenos">108</span></a>
@@ -979,7 +979,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Redshift.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Redshift.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Redshift.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Redshift.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Redshift.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Redshift.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Redshift.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -988,6 +988,7 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Redshift.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Redshift.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Redshift.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Redshift.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Redshift.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Redshift.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/snowflake.html b/docs/sqlglot/dialects/snowflake.html
index 28bfb8c..3946925 100644
--- a/docs/sqlglot/dialects/snowflake.html
+++ b/docs/sqlglot/dialects/snowflake.html
@@ -102,7 +102,7 @@
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a>
-</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">Dialect</span><span class="p">,</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">date_trunc_to_time</span><span class="p">,</span>
@@ -405,112 +405,113 @@
</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">Max</span><span class="p">:</span> <span class="n">max_or_greatest</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">Min</span><span class="p">:</span> <span class="n">min_or_least</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">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-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StarMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;OBJECT_CONSTRUCT&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">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="s2">&quot;POSITION&quot;</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;substr&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;position&quot;</span><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="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</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-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span 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;EXTRACT(epoch_second FROM </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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-315"><a href="#L-315"><span class="linenos">315</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="s2">&quot;TO_CHAR&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">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="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><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="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-319"><a href="#L-319"><span class="linenos">319</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-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;TRIM&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><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">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;snowflake&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">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</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">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">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 class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <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">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</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><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <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-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;RENAME&quot;</span><span class="p">,</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="p">}</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</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">UNSUPPORTED</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">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-340"><a href="#L-340"><span class="linenos">340</span></a> <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">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-343"><a href="#L-343"><span class="linenos">343</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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-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="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-348"><a href="#L-348"><span class="linenos">348</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</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">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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-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">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-353"><a href="#L-353"><span class="linenos">353</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</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="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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-360"><a href="#L-360"><span class="linenos">360</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-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="k">else</span> <span class="n">node</span><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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</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">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">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-375"><a href="#L-375"><span class="linenos">375</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a><span class="sd"> generating the SQL.</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="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a><span class="sd"> properly quote but should be true in most cases.</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">flatten</span><span class="p">(</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="p">(</span><span class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">for</span> <span class="n">v</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">Values</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="p">)</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="k">if</span> <span class="n">values_identifiers</span><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">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">else</span> <span class="n">node</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</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">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-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</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><span id="L-404"><a href="#L-404"><span class="linenos">404</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">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</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">generatedasidentitycolumnconstraint_sql</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">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</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="nb">str</span><span class="p">:</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</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-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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-411"><a href="#L-411"><span class="linenos">411</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-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</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">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_distinct_on</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">StarMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;OBJECT_CONSTRUCT&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">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="s2">&quot;POSITION&quot;</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;substr&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;position&quot;</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="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</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-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span 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;EXTRACT(epoch_second FROM </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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-316"><a href="#L-316"><span class="linenos">316</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="s2">&quot;TO_CHAR&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">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="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><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="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-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;TRIM&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><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">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;snowflake&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">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</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">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">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 class="s2">&quot;OBJECT_CONSTRUCT&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">TYPE_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="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&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">STAR_MAPPING</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;except&quot;</span><span class="p">:</span> <span class="s2">&quot;EXCLUDE&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;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;RENAME&quot;</span><span class="p">,</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="p">}</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">PROPERTIES_LOCATION</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">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</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">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">UNSUPPORTED</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">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-341"><a href="#L-341"><span class="linenos">341</span></a> <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="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-344"><a href="#L-344"><span class="linenos">344</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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-347"><a href="#L-347"><span class="linenos">347</span></a>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="k">def</span> <span class="nf">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-349"><a href="#L-349"><span class="linenos">349</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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-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="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-354"><a href="#L-354"><span class="linenos">354</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</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="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</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-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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-361"><a href="#L-361"><span class="linenos">361</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-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="p">)</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><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="k">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</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="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-376"><a href="#L-376"><span class="linenos">376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a><span class="sd"> generating the SQL.</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="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a><span class="sd"> properly quote but should be true in most cases.</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">flatten</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 class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="k">for</span> <span class="n">v</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">Values</span><span class="p">)</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <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="k">if</span> <span class="n">values_identifiers</span><span class="p">:</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</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-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="k">else</span> <span class="n">node</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</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><span id="L-400"><a href="#L-400"><span class="linenos">400</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-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</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><span id="L-405"><a href="#L-405"><span class="linenos">405</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">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</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">generatedasidentitycolumnconstraint_sql</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 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-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</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-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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-412"><a href="#L-412"><span class="linenos">412</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-413"><a href="#L-413"><span class="linenos">413</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</span>
</span></pre></div>
@@ -688,112 +689,113 @@
</span><span id="Snowflake-306"><a href="#Snowflake-306"><span class="linenos">306</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="Snowflake-307"><a href="#Snowflake-307"><span class="linenos">307</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="Snowflake-308"><a href="#Snowflake-308"><span class="linenos">308</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="Snowflake-309"><a href="#Snowflake-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StarMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-310"><a href="#Snowflake-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake-311"><a href="#Snowflake-311"><span class="linenos">311</span></a> <span class="s2">&quot;POSITION&quot;</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;substr&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;position&quot;</span><span class="p">)</span>
-</span><span id="Snowflake-312"><a href="#Snowflake-312"><span class="linenos">312</span></a> <span class="p">),</span>
-</span><span id="Snowflake-313"><a href="#Snowflake-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-314"><a href="#Snowflake-314"><span class="linenos">314</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="Snowflake-315"><a href="#Snowflake-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span 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;EXTRACT(epoch_second FROM </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Snowflake-316"><a href="#Snowflake-316"><span class="linenos">316</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake-317"><a href="#Snowflake-317"><span class="linenos">317</span></a> <span class="s2">&quot;TO_CHAR&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">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="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><span id="Snowflake-318"><a href="#Snowflake-318"><span class="linenos">318</span></a> <span class="p">),</span>
-</span><span id="Snowflake-319"><a href="#Snowflake-319"><span class="linenos">319</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="Snowflake-320"><a href="#Snowflake-320"><span class="linenos">320</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="Snowflake-321"><a href="#Snowflake-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;TRIM&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><span id="Snowflake-322"><a href="#Snowflake-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;snowflake&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-323"><a href="#Snowflake-323"><span class="linenos">323</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="Snowflake-324"><a href="#Snowflake-324"><span class="linenos">324</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">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 class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
-</span><span id="Snowflake-325"><a href="#Snowflake-325"><span class="linenos">325</span></a> <span class="p">}</span>
-</span><span id="Snowflake-326"><a href="#Snowflake-326"><span class="linenos">326</span></a>
-</span><span id="Snowflake-327"><a href="#Snowflake-327"><span class="linenos">327</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-328"><a href="#Snowflake-328"><span class="linenos">328</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Snowflake-329"><a href="#Snowflake-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-330"><a href="#Snowflake-330"><span class="linenos">330</span></a> <span class="p">}</span>
-</span><span id="Snowflake-331"><a href="#Snowflake-331"><span class="linenos">331</span></a>
-</span><span id="Snowflake-332"><a href="#Snowflake-332"><span class="linenos">332</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-333"><a href="#Snowflake-333"><span class="linenos">333</span></a> <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="Snowflake-334"><a href="#Snowflake-334"><span class="linenos">334</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;RENAME&quot;</span><span class="p">,</span>
-</span><span id="Snowflake-335"><a href="#Snowflake-335"><span class="linenos">335</span></a> <span class="p">}</span>
-</span><span id="Snowflake-336"><a href="#Snowflake-336"><span class="linenos">336</span></a>
-</span><span id="Snowflake-337"><a href="#Snowflake-337"><span class="linenos">337</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake-338"><a href="#Snowflake-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">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Snowflake-339"><a href="#Snowflake-339"><span class="linenos">339</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Snowflake-340"><a href="#Snowflake-340"><span class="linenos">340</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="Snowflake-341"><a href="#Snowflake-341"><span class="linenos">341</span></a> <span class="p">}</span>
-</span><span id="Snowflake-342"><a href="#Snowflake-342"><span class="linenos">342</span></a>
-</span><span id="Snowflake-343"><a href="#Snowflake-343"><span class="linenos">343</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="Snowflake-344"><a href="#Snowflake-344"><span class="linenos">344</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="Snowflake-345"><a href="#Snowflake-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="Snowflake-346"><a href="#Snowflake-346"><span class="linenos">346</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake-347"><a href="#Snowflake-347"><span class="linenos">347</span></a>
-</span><span id="Snowflake-348"><a href="#Snowflake-348"><span class="linenos">348</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="Snowflake-349"><a href="#Snowflake-349"><span class="linenos">349</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="Snowflake-350"><a href="#Snowflake-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="Snowflake-351"><a href="#Snowflake-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake-352"><a href="#Snowflake-352"><span class="linenos">352</span></a>
-</span><span id="Snowflake-353"><a href="#Snowflake-353"><span class="linenos">353</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="Snowflake-354"><a href="#Snowflake-354"><span class="linenos">354</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</span>
-</span><span id="Snowflake-355"><a href="#Snowflake-355"><span class="linenos">355</span></a>
-</span><span id="Snowflake-356"><a href="#Snowflake-356"><span class="linenos">356</span></a><span class="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
-</span><span id="Snowflake-357"><a href="#Snowflake-357"><span class="linenos">357</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
-</span><span id="Snowflake-358"><a href="#Snowflake-358"><span class="linenos">358</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Snowflake-359"><a href="#Snowflake-359"><span class="linenos">359</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="Snowflake-360"><a href="#Snowflake-360"><span class="linenos">360</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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="Snowflake-361"><a href="#Snowflake-361"><span class="linenos">361</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="Snowflake-362"><a href="#Snowflake-362"><span class="linenos">362</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="Snowflake-363"><a href="#Snowflake-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Snowflake-364"><a href="#Snowflake-364"><span class="linenos">364</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
-</span><span id="Snowflake-365"><a href="#Snowflake-365"><span class="linenos">365</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
-</span><span id="Snowflake-366"><a href="#Snowflake-366"><span class="linenos">366</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Snowflake-367"><a href="#Snowflake-367"><span class="linenos">367</span></a> <span class="p">)</span>
-</span><span id="Snowflake-368"><a href="#Snowflake-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Snowflake-369"><a href="#Snowflake-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Snowflake-370"><a href="#Snowflake-370"><span class="linenos">370</span></a>
-</span><span id="Snowflake-371"><a href="#Snowflake-371"><span class="linenos">371</span></a> <span class="k">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Snowflake-372"><a href="#Snowflake-372"><span class="linenos">372</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
-</span><span id="Snowflake-373"><a href="#Snowflake-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</span>
-</span><span id="Snowflake-374"><a href="#Snowflake-374"><span class="linenos">374</span></a>
-</span><span id="Snowflake-375"><a href="#Snowflake-375"><span class="linenos">375</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="Snowflake-376"><a href="#Snowflake-376"><span class="linenos">376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
-</span><span id="Snowflake-377"><a href="#Snowflake-377"><span class="linenos">377</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
-</span><span id="Snowflake-378"><a href="#Snowflake-378"><span class="linenos">378</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
-</span><span id="Snowflake-379"><a href="#Snowflake-379"><span class="linenos">379</span></a><span class="sd"> generating the SQL.</span>
-</span><span id="Snowflake-380"><a href="#Snowflake-380"><span class="linenos">380</span></a>
-</span><span id="Snowflake-381"><a href="#Snowflake-381"><span class="linenos">381</span></a><span class="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
-</span><span id="Snowflake-382"><a href="#Snowflake-382"><span class="linenos">382</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
-</span><span id="Snowflake-383"><a href="#Snowflake-383"><span class="linenos">383</span></a><span class="sd"> properly quote but should be true in most cases.</span>
-</span><span id="Snowflake-384"><a href="#Snowflake-384"><span class="linenos">384</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Snowflake-385"><a href="#Snowflake-385"><span class="linenos">385</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
-</span><span id="Snowflake-386"><a href="#Snowflake-386"><span class="linenos">386</span></a> <span class="n">flatten</span><span class="p">(</span>
-</span><span id="Snowflake-387"><a href="#Snowflake-387"><span class="linenos">387</span></a> <span class="p">(</span><span class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
-</span><span id="Snowflake-388"><a href="#Snowflake-388"><span class="linenos">388</span></a> <span class="k">for</span> <span class="n">v</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">Values</span><span class="p">)</span>
-</span><span id="Snowflake-389"><a href="#Snowflake-389"><span class="linenos">389</span></a> <span class="p">)</span>
-</span><span id="Snowflake-390"><a href="#Snowflake-390"><span class="linenos">390</span></a> <span class="p">)</span>
-</span><span id="Snowflake-391"><a href="#Snowflake-391"><span class="linenos">391</span></a> <span class="k">if</span> <span class="n">values_identifiers</span><span class="p">:</span>
-</span><span id="Snowflake-392"><a href="#Snowflake-392"><span class="linenos">392</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="Snowflake-393"><a href="#Snowflake-393"><span class="linenos">393</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="Snowflake-394"><a href="#Snowflake-394"><span class="linenos">394</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
-</span><span id="Snowflake-395"><a href="#Snowflake-395"><span class="linenos">395</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Snowflake-396"><a href="#Snowflake-396"><span class="linenos">396</span></a> <span class="p">)</span>
-</span><span id="Snowflake-397"><a href="#Snowflake-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Snowflake-398"><a href="#Snowflake-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Snowflake-399"><a href="#Snowflake-399"><span class="linenos">399</span></a>
-</span><span id="Snowflake-400"><a href="#Snowflake-400"><span class="linenos">400</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="Snowflake-401"><a href="#Snowflake-401"><span class="linenos">401</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="Snowflake-402"><a href="#Snowflake-402"><span class="linenos">402</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="Snowflake-403"><a href="#Snowflake-403"><span class="linenos">403</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Snowflake-404"><a href="#Snowflake-404"><span class="linenos">404</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><span id="Snowflake-405"><a href="#Snowflake-405"><span class="linenos">405</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">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Snowflake-406"><a href="#Snowflake-406"><span class="linenos">406</span></a>
-</span><span id="Snowflake-407"><a href="#Snowflake-407"><span class="linenos">407</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Snowflake-408"><a href="#Snowflake-408"><span class="linenos">408</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="Snowflake-409"><a href="#Snowflake-409"><span class="linenos">409</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Snowflake-410"><a href="#Snowflake-410"><span class="linenos">410</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="Snowflake-411"><a href="#Snowflake-411"><span class="linenos">411</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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="Snowflake-412"><a href="#Snowflake-412"><span class="linenos">412</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="Snowflake-413"><a href="#Snowflake-413"><span class="linenos">413</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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="Snowflake-414"><a href="#Snowflake-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</span>
+</span><span id="Snowflake-309"><a href="#Snowflake-309"><span class="linenos">309</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Snowflake-310"><a href="#Snowflake-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StarMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-311"><a href="#Snowflake-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Snowflake-312"><a href="#Snowflake-312"><span class="linenos">312</span></a> <span class="s2">&quot;POSITION&quot;</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;substr&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;position&quot;</span><span class="p">)</span>
+</span><span id="Snowflake-313"><a href="#Snowflake-313"><span class="linenos">313</span></a> <span class="p">),</span>
+</span><span id="Snowflake-314"><a href="#Snowflake-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-315"><a href="#Snowflake-315"><span class="linenos">315</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="Snowflake-316"><a href="#Snowflake-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span 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;EXTRACT(epoch_second FROM </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Snowflake-317"><a href="#Snowflake-317"><span class="linenos">317</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Snowflake-318"><a href="#Snowflake-318"><span class="linenos">318</span></a> <span class="s2">&quot;TO_CHAR&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">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="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><span id="Snowflake-319"><a href="#Snowflake-319"><span class="linenos">319</span></a> <span class="p">),</span>
+</span><span id="Snowflake-320"><a href="#Snowflake-320"><span class="linenos">320</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="Snowflake-321"><a href="#Snowflake-321"><span class="linenos">321</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="Snowflake-322"><a href="#Snowflake-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;TRIM&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><span id="Snowflake-323"><a href="#Snowflake-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;snowflake&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-324"><a href="#Snowflake-324"><span class="linenos">324</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="Snowflake-325"><a href="#Snowflake-325"><span class="linenos">325</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">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 class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake-326"><a href="#Snowflake-326"><span class="linenos">326</span></a> <span class="p">}</span>
+</span><span id="Snowflake-327"><a href="#Snowflake-327"><span class="linenos">327</span></a>
+</span><span id="Snowflake-328"><a href="#Snowflake-328"><span class="linenos">328</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-329"><a href="#Snowflake-329"><span class="linenos">329</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Snowflake-330"><a href="#Snowflake-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-331"><a href="#Snowflake-331"><span class="linenos">331</span></a> <span class="p">}</span>
+</span><span id="Snowflake-332"><a href="#Snowflake-332"><span class="linenos">332</span></a>
+</span><span id="Snowflake-333"><a href="#Snowflake-333"><span class="linenos">333</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-334"><a href="#Snowflake-334"><span class="linenos">334</span></a> <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="Snowflake-335"><a href="#Snowflake-335"><span class="linenos">335</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;RENAME&quot;</span><span class="p">,</span>
+</span><span id="Snowflake-336"><a href="#Snowflake-336"><span class="linenos">336</span></a> <span class="p">}</span>
+</span><span id="Snowflake-337"><a href="#Snowflake-337"><span class="linenos">337</span></a>
+</span><span id="Snowflake-338"><a href="#Snowflake-338"><span class="linenos">338</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake-339"><a href="#Snowflake-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">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Snowflake-340"><a href="#Snowflake-340"><span class="linenos">340</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Snowflake-341"><a href="#Snowflake-341"><span class="linenos">341</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="Snowflake-342"><a href="#Snowflake-342"><span class="linenos">342</span></a> <span class="p">}</span>
+</span><span id="Snowflake-343"><a href="#Snowflake-343"><span class="linenos">343</span></a>
+</span><span id="Snowflake-344"><a href="#Snowflake-344"><span class="linenos">344</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="Snowflake-345"><a href="#Snowflake-345"><span class="linenos">345</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="Snowflake-346"><a href="#Snowflake-346"><span class="linenos">346</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="Snowflake-347"><a href="#Snowflake-347"><span class="linenos">347</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake-348"><a href="#Snowflake-348"><span class="linenos">348</span></a>
+</span><span id="Snowflake-349"><a href="#Snowflake-349"><span class="linenos">349</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="Snowflake-350"><a href="#Snowflake-350"><span class="linenos">350</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="Snowflake-351"><a href="#Snowflake-351"><span class="linenos">351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="Snowflake-352"><a href="#Snowflake-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake-353"><a href="#Snowflake-353"><span class="linenos">353</span></a>
+</span><span id="Snowflake-354"><a href="#Snowflake-354"><span class="linenos">354</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="Snowflake-355"><a href="#Snowflake-355"><span class="linenos">355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</span>
+</span><span id="Snowflake-356"><a href="#Snowflake-356"><span class="linenos">356</span></a>
+</span><span id="Snowflake-357"><a href="#Snowflake-357"><span class="linenos">357</span></a><span class="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
+</span><span id="Snowflake-358"><a href="#Snowflake-358"><span class="linenos">358</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
+</span><span id="Snowflake-359"><a href="#Snowflake-359"><span class="linenos">359</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Snowflake-360"><a href="#Snowflake-360"><span class="linenos">360</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="Snowflake-361"><a href="#Snowflake-361"><span class="linenos">361</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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="Snowflake-362"><a href="#Snowflake-362"><span class="linenos">362</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="Snowflake-363"><a href="#Snowflake-363"><span class="linenos">363</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+</span><span id="Snowflake-364"><a href="#Snowflake-364"><span class="linenos">364</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Snowflake-365"><a href="#Snowflake-365"><span class="linenos">365</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
+</span><span id="Snowflake-366"><a href="#Snowflake-366"><span class="linenos">366</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
+</span><span id="Snowflake-367"><a href="#Snowflake-367"><span class="linenos">367</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Snowflake-368"><a href="#Snowflake-368"><span class="linenos">368</span></a> <span class="p">)</span>
+</span><span id="Snowflake-369"><a href="#Snowflake-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Snowflake-370"><a href="#Snowflake-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Snowflake-371"><a href="#Snowflake-371"><span class="linenos">371</span></a>
+</span><span id="Snowflake-372"><a href="#Snowflake-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Snowflake-373"><a href="#Snowflake-373"><span class="linenos">373</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
+</span><span id="Snowflake-374"><a href="#Snowflake-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</span>
+</span><span id="Snowflake-375"><a href="#Snowflake-375"><span class="linenos">375</span></a>
+</span><span id="Snowflake-376"><a href="#Snowflake-376"><span class="linenos">376</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="Snowflake-377"><a href="#Snowflake-377"><span class="linenos">377</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
+</span><span id="Snowflake-378"><a href="#Snowflake-378"><span class="linenos">378</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
+</span><span id="Snowflake-379"><a href="#Snowflake-379"><span class="linenos">379</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
+</span><span id="Snowflake-380"><a href="#Snowflake-380"><span class="linenos">380</span></a><span class="sd"> generating the SQL.</span>
+</span><span id="Snowflake-381"><a href="#Snowflake-381"><span class="linenos">381</span></a>
+</span><span id="Snowflake-382"><a href="#Snowflake-382"><span class="linenos">382</span></a><span class="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
+</span><span id="Snowflake-383"><a href="#Snowflake-383"><span class="linenos">383</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
+</span><span id="Snowflake-384"><a href="#Snowflake-384"><span class="linenos">384</span></a><span class="sd"> properly quote but should be true in most cases.</span>
+</span><span id="Snowflake-385"><a href="#Snowflake-385"><span class="linenos">385</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Snowflake-386"><a href="#Snowflake-386"><span class="linenos">386</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
+</span><span id="Snowflake-387"><a href="#Snowflake-387"><span class="linenos">387</span></a> <span class="n">flatten</span><span class="p">(</span>
+</span><span id="Snowflake-388"><a href="#Snowflake-388"><span class="linenos">388</span></a> <span class="p">(</span><span class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
+</span><span id="Snowflake-389"><a href="#Snowflake-389"><span class="linenos">389</span></a> <span class="k">for</span> <span class="n">v</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">Values</span><span class="p">)</span>
+</span><span id="Snowflake-390"><a href="#Snowflake-390"><span class="linenos">390</span></a> <span class="p">)</span>
+</span><span id="Snowflake-391"><a href="#Snowflake-391"><span class="linenos">391</span></a> <span class="p">)</span>
+</span><span id="Snowflake-392"><a href="#Snowflake-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="n">values_identifiers</span><span class="p">:</span>
+</span><span id="Snowflake-393"><a href="#Snowflake-393"><span class="linenos">393</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="Snowflake-394"><a href="#Snowflake-394"><span class="linenos">394</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+</span><span id="Snowflake-395"><a href="#Snowflake-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
+</span><span id="Snowflake-396"><a href="#Snowflake-396"><span class="linenos">396</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Snowflake-397"><a href="#Snowflake-397"><span class="linenos">397</span></a> <span class="p">)</span>
+</span><span id="Snowflake-398"><a href="#Snowflake-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Snowflake-399"><a href="#Snowflake-399"><span class="linenos">399</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Snowflake-400"><a href="#Snowflake-400"><span class="linenos">400</span></a>
+</span><span id="Snowflake-401"><a href="#Snowflake-401"><span class="linenos">401</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="Snowflake-402"><a href="#Snowflake-402"><span class="linenos">402</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="Snowflake-403"><a href="#Snowflake-403"><span class="linenos">403</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="Snowflake-404"><a href="#Snowflake-404"><span class="linenos">404</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Snowflake-405"><a href="#Snowflake-405"><span class="linenos">405</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><span id="Snowflake-406"><a href="#Snowflake-406"><span class="linenos">406</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">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Snowflake-407"><a href="#Snowflake-407"><span class="linenos">407</span></a>
+</span><span id="Snowflake-408"><a href="#Snowflake-408"><span class="linenos">408</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Snowflake-409"><a href="#Snowflake-409"><span class="linenos">409</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="Snowflake-410"><a href="#Snowflake-410"><span class="linenos">410</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Snowflake-411"><a href="#Snowflake-411"><span class="linenos">411</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="Snowflake-412"><a href="#Snowflake-412"><span class="linenos">412</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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="Snowflake-413"><a href="#Snowflake-413"><span class="linenos">413</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="Snowflake-414"><a href="#Snowflake-414"><span class="linenos">414</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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="Snowflake-415"><a href="#Snowflake-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</span>
</span></pre></div>
@@ -1038,112 +1040,113 @@ Default: "nulls_are_small"</li>
</span><span id="Snowflake.Generator-306"><a href="#Snowflake.Generator-306"><span class="linenos">306</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="Snowflake.Generator-307"><a href="#Snowflake.Generator-307"><span class="linenos">307</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="Snowflake.Generator-308"><a href="#Snowflake.Generator-308"><span class="linenos">308</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="Snowflake.Generator-309"><a href="#Snowflake.Generator-309"><span class="linenos">309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StarMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-310"><a href="#Snowflake.Generator-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-311"><a href="#Snowflake.Generator-311"><span class="linenos">311</span></a> <span class="s2">&quot;POSITION&quot;</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;substr&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;position&quot;</span><span class="p">)</span>
-</span><span id="Snowflake.Generator-312"><a href="#Snowflake.Generator-312"><span class="linenos">312</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Generator-313"><a href="#Snowflake.Generator-313"><span class="linenos">313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-314"><a href="#Snowflake.Generator-314"><span class="linenos">314</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="Snowflake.Generator-315"><a href="#Snowflake.Generator-315"><span class="linenos">315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span 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;EXTRACT(epoch_second FROM </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Snowflake.Generator-316"><a href="#Snowflake.Generator-316"><span class="linenos">316</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-317"><a href="#Snowflake.Generator-317"><span class="linenos">317</span></a> <span class="s2">&quot;TO_CHAR&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">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="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><span id="Snowflake.Generator-318"><a href="#Snowflake.Generator-318"><span class="linenos">318</span></a> <span class="p">),</span>
-</span><span id="Snowflake.Generator-319"><a href="#Snowflake.Generator-319"><span class="linenos">319</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="Snowflake.Generator-320"><a href="#Snowflake.Generator-320"><span class="linenos">320</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="Snowflake.Generator-321"><a href="#Snowflake.Generator-321"><span class="linenos">321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;TRIM&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><span id="Snowflake.Generator-322"><a href="#Snowflake.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;snowflake&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-323"><a href="#Snowflake.Generator-323"><span class="linenos">323</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="Snowflake.Generator-324"><a href="#Snowflake.Generator-324"><span class="linenos">324</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">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 class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
-</span><span id="Snowflake.Generator-325"><a href="#Snowflake.Generator-325"><span class="linenos">325</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Generator-326"><a href="#Snowflake.Generator-326"><span class="linenos">326</span></a>
-</span><span id="Snowflake.Generator-327"><a href="#Snowflake.Generator-327"><span class="linenos">327</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Generator-328"><a href="#Snowflake.Generator-328"><span class="linenos">328</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Snowflake.Generator-329"><a href="#Snowflake.Generator-329"><span class="linenos">329</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-330"><a href="#Snowflake.Generator-330"><span class="linenos">330</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Generator-331"><a href="#Snowflake.Generator-331"><span class="linenos">331</span></a>
-</span><span id="Snowflake.Generator-332"><a href="#Snowflake.Generator-332"><span class="linenos">332</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Generator-333"><a href="#Snowflake.Generator-333"><span class="linenos">333</span></a> <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="Snowflake.Generator-334"><a href="#Snowflake.Generator-334"><span class="linenos">334</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;RENAME&quot;</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-335"><a href="#Snowflake.Generator-335"><span class="linenos">335</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Generator-336"><a href="#Snowflake.Generator-336"><span class="linenos">336</span></a>
-</span><span id="Snowflake.Generator-337"><a href="#Snowflake.Generator-337"><span class="linenos">337</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Snowflake.Generator-338"><a href="#Snowflake.Generator-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">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Snowflake.Generator-339"><a href="#Snowflake.Generator-339"><span class="linenos">339</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-340"><a href="#Snowflake.Generator-340"><span class="linenos">340</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="Snowflake.Generator-341"><a href="#Snowflake.Generator-341"><span class="linenos">341</span></a> <span class="p">}</span>
-</span><span id="Snowflake.Generator-342"><a href="#Snowflake.Generator-342"><span class="linenos">342</span></a>
-</span><span id="Snowflake.Generator-343"><a href="#Snowflake.Generator-343"><span class="linenos">343</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="Snowflake.Generator-344"><a href="#Snowflake.Generator-344"><span class="linenos">344</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="Snowflake.Generator-345"><a href="#Snowflake.Generator-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="Snowflake.Generator-346"><a href="#Snowflake.Generator-346"><span class="linenos">346</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake.Generator-347"><a href="#Snowflake.Generator-347"><span class="linenos">347</span></a>
-</span><span id="Snowflake.Generator-348"><a href="#Snowflake.Generator-348"><span class="linenos">348</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="Snowflake.Generator-349"><a href="#Snowflake.Generator-349"><span class="linenos">349</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="Snowflake.Generator-350"><a href="#Snowflake.Generator-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="Snowflake.Generator-351"><a href="#Snowflake.Generator-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake.Generator-352"><a href="#Snowflake.Generator-352"><span class="linenos">352</span></a>
-</span><span id="Snowflake.Generator-353"><a href="#Snowflake.Generator-353"><span class="linenos">353</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="Snowflake.Generator-354"><a href="#Snowflake.Generator-354"><span class="linenos">354</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</span>
-</span><span id="Snowflake.Generator-355"><a href="#Snowflake.Generator-355"><span class="linenos">355</span></a>
-</span><span id="Snowflake.Generator-356"><a href="#Snowflake.Generator-356"><span class="linenos">356</span></a><span class="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
-</span><span id="Snowflake.Generator-357"><a href="#Snowflake.Generator-357"><span class="linenos">357</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
-</span><span id="Snowflake.Generator-358"><a href="#Snowflake.Generator-358"><span class="linenos">358</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Snowflake.Generator-359"><a href="#Snowflake.Generator-359"><span class="linenos">359</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="Snowflake.Generator-360"><a href="#Snowflake.Generator-360"><span class="linenos">360</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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="Snowflake.Generator-361"><a href="#Snowflake.Generator-361"><span class="linenos">361</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="Snowflake.Generator-362"><a href="#Snowflake.Generator-362"><span class="linenos">362</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="Snowflake.Generator-363"><a href="#Snowflake.Generator-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Snowflake.Generator-364"><a href="#Snowflake.Generator-364"><span class="linenos">364</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
-</span><span id="Snowflake.Generator-365"><a href="#Snowflake.Generator-365"><span class="linenos">365</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
-</span><span id="Snowflake.Generator-366"><a href="#Snowflake.Generator-366"><span class="linenos">366</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-367"><a href="#Snowflake.Generator-367"><span class="linenos">367</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator-368"><a href="#Snowflake.Generator-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Snowflake.Generator-369"><a href="#Snowflake.Generator-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Snowflake.Generator-370"><a href="#Snowflake.Generator-370"><span class="linenos">370</span></a>
-</span><span id="Snowflake.Generator-371"><a href="#Snowflake.Generator-371"><span class="linenos">371</span></a> <span class="k">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Snowflake.Generator-372"><a href="#Snowflake.Generator-372"><span class="linenos">372</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
-</span><span id="Snowflake.Generator-373"><a href="#Snowflake.Generator-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</span>
-</span><span id="Snowflake.Generator-374"><a href="#Snowflake.Generator-374"><span class="linenos">374</span></a>
-</span><span id="Snowflake.Generator-375"><a href="#Snowflake.Generator-375"><span class="linenos">375</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="Snowflake.Generator-376"><a href="#Snowflake.Generator-376"><span class="linenos">376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
-</span><span id="Snowflake.Generator-377"><a href="#Snowflake.Generator-377"><span class="linenos">377</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
-</span><span id="Snowflake.Generator-378"><a href="#Snowflake.Generator-378"><span class="linenos">378</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
-</span><span id="Snowflake.Generator-379"><a href="#Snowflake.Generator-379"><span class="linenos">379</span></a><span class="sd"> generating the SQL.</span>
-</span><span id="Snowflake.Generator-380"><a href="#Snowflake.Generator-380"><span class="linenos">380</span></a>
-</span><span id="Snowflake.Generator-381"><a href="#Snowflake.Generator-381"><span class="linenos">381</span></a><span class="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
-</span><span id="Snowflake.Generator-382"><a href="#Snowflake.Generator-382"><span class="linenos">382</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
-</span><span id="Snowflake.Generator-383"><a href="#Snowflake.Generator-383"><span class="linenos">383</span></a><span class="sd"> properly quote but should be true in most cases.</span>
-</span><span id="Snowflake.Generator-384"><a href="#Snowflake.Generator-384"><span class="linenos">384</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Snowflake.Generator-385"><a href="#Snowflake.Generator-385"><span class="linenos">385</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-386"><a href="#Snowflake.Generator-386"><span class="linenos">386</span></a> <span class="n">flatten</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-387"><a href="#Snowflake.Generator-387"><span class="linenos">387</span></a> <span class="p">(</span><span class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
-</span><span id="Snowflake.Generator-388"><a href="#Snowflake.Generator-388"><span class="linenos">388</span></a> <span class="k">for</span> <span class="n">v</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">Values</span><span class="p">)</span>
-</span><span id="Snowflake.Generator-389"><a href="#Snowflake.Generator-389"><span class="linenos">389</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator-390"><a href="#Snowflake.Generator-390"><span class="linenos">390</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator-391"><a href="#Snowflake.Generator-391"><span class="linenos">391</span></a> <span class="k">if</span> <span class="n">values_identifiers</span><span class="p">:</span>
-</span><span id="Snowflake.Generator-392"><a href="#Snowflake.Generator-392"><span class="linenos">392</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="Snowflake.Generator-393"><a href="#Snowflake.Generator-393"><span class="linenos">393</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="Snowflake.Generator-394"><a href="#Snowflake.Generator-394"><span class="linenos">394</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
-</span><span id="Snowflake.Generator-395"><a href="#Snowflake.Generator-395"><span class="linenos">395</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Snowflake.Generator-396"><a href="#Snowflake.Generator-396"><span class="linenos">396</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator-397"><a href="#Snowflake.Generator-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Snowflake.Generator-398"><a href="#Snowflake.Generator-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Snowflake.Generator-399"><a href="#Snowflake.Generator-399"><span class="linenos">399</span></a>
-</span><span id="Snowflake.Generator-400"><a href="#Snowflake.Generator-400"><span class="linenos">400</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="Snowflake.Generator-401"><a href="#Snowflake.Generator-401"><span class="linenos">401</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="Snowflake.Generator-402"><a href="#Snowflake.Generator-402"><span class="linenos">402</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="Snowflake.Generator-403"><a href="#Snowflake.Generator-403"><span class="linenos">403</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Snowflake.Generator-404"><a href="#Snowflake.Generator-404"><span class="linenos">404</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><span id="Snowflake.Generator-405"><a href="#Snowflake.Generator-405"><span class="linenos">405</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">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Snowflake.Generator-406"><a href="#Snowflake.Generator-406"><span class="linenos">406</span></a>
-</span><span id="Snowflake.Generator-407"><a href="#Snowflake.Generator-407"><span class="linenos">407</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Snowflake.Generator-408"><a href="#Snowflake.Generator-408"><span class="linenos">408</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="Snowflake.Generator-409"><a href="#Snowflake.Generator-409"><span class="linenos">409</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Snowflake.Generator-410"><a href="#Snowflake.Generator-410"><span class="linenos">410</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="Snowflake.Generator-411"><a href="#Snowflake.Generator-411"><span class="linenos">411</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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="Snowflake.Generator-412"><a href="#Snowflake.Generator-412"><span class="linenos">412</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="Snowflake.Generator-413"><a href="#Snowflake.Generator-413"><span class="linenos">413</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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="Snowflake.Generator-414"><a href="#Snowflake.Generator-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</span>
+</span><span id="Snowflake.Generator-309"><a href="#Snowflake.Generator-309"><span class="linenos">309</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Snowflake.Generator-310"><a href="#Snowflake.Generator-310"><span class="linenos">310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StarMap</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-311"><a href="#Snowflake.Generator-311"><span class="linenos">311</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Snowflake.Generator-312"><a href="#Snowflake.Generator-312"><span class="linenos">312</span></a> <span class="s2">&quot;POSITION&quot;</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;substr&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;position&quot;</span><span class="p">)</span>
+</span><span id="Snowflake.Generator-313"><a href="#Snowflake.Generator-313"><span class="linenos">313</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Generator-314"><a href="#Snowflake.Generator-314"><span class="linenos">314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-315"><a href="#Snowflake.Generator-315"><span class="linenos">315</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="Snowflake.Generator-316"><a href="#Snowflake.Generator-316"><span class="linenos">316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToUnix</span><span class="p">:</span> <span 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;EXTRACT(epoch_second FROM </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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="Snowflake.Generator-317"><a href="#Snowflake.Generator-317"><span class="linenos">317</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="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Snowflake.Generator-318"><a href="#Snowflake.Generator-318"><span class="linenos">318</span></a> <span class="s2">&quot;TO_CHAR&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">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="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><span id="Snowflake.Generator-319"><a href="#Snowflake.Generator-319"><span class="linenos">319</span></a> <span class="p">),</span>
+</span><span id="Snowflake.Generator-320"><a href="#Snowflake.Generator-320"><span class="linenos">320</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="Snowflake.Generator-321"><a href="#Snowflake.Generator-321"><span class="linenos">321</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="Snowflake.Generator-322"><a href="#Snowflake.Generator-322"><span class="linenos">322</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span 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;TRIM&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><span id="Snowflake.Generator-323"><a href="#Snowflake.Generator-323"><span class="linenos">323</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">:</span> <span class="n">ts_or_ds_to_date_sql</span><span class="p">(</span><span class="s2">&quot;snowflake&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-324"><a href="#Snowflake.Generator-324"><span class="linenos">324</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="Snowflake.Generator-325"><a href="#Snowflake.Generator-325"><span class="linenos">325</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">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 class="s2">&quot;OBJECT_CONSTRUCT&quot;</span><span class="p">),</span>
+</span><span id="Snowflake.Generator-326"><a href="#Snowflake.Generator-326"><span class="linenos">326</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Generator-327"><a href="#Snowflake.Generator-327"><span class="linenos">327</span></a>
+</span><span id="Snowflake.Generator-328"><a href="#Snowflake.Generator-328"><span class="linenos">328</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Generator-329"><a href="#Snowflake.Generator-329"><span class="linenos">329</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Snowflake.Generator-330"><a href="#Snowflake.Generator-330"><span class="linenos">330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">:</span> <span class="s2">&quot;TIMESTAMPNTZ&quot;</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-331"><a href="#Snowflake.Generator-331"><span class="linenos">331</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Generator-332"><a href="#Snowflake.Generator-332"><span class="linenos">332</span></a>
+</span><span id="Snowflake.Generator-333"><a href="#Snowflake.Generator-333"><span class="linenos">333</span></a> <span class="n">STAR_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Generator-334"><a href="#Snowflake.Generator-334"><span class="linenos">334</span></a> <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="Snowflake.Generator-335"><a href="#Snowflake.Generator-335"><span class="linenos">335</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="s2">&quot;RENAME&quot;</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-336"><a href="#Snowflake.Generator-336"><span class="linenos">336</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Generator-337"><a href="#Snowflake.Generator-337"><span class="linenos">337</span></a>
+</span><span id="Snowflake.Generator-338"><a href="#Snowflake.Generator-338"><span class="linenos">338</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Snowflake.Generator-339"><a href="#Snowflake.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">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Snowflake.Generator-340"><a href="#Snowflake.Generator-340"><span class="linenos">340</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-341"><a href="#Snowflake.Generator-341"><span class="linenos">341</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="Snowflake.Generator-342"><a href="#Snowflake.Generator-342"><span class="linenos">342</span></a> <span class="p">}</span>
+</span><span id="Snowflake.Generator-343"><a href="#Snowflake.Generator-343"><span class="linenos">343</span></a>
+</span><span id="Snowflake.Generator-344"><a href="#Snowflake.Generator-344"><span class="linenos">344</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="Snowflake.Generator-345"><a href="#Snowflake.Generator-345"><span class="linenos">345</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="Snowflake.Generator-346"><a href="#Snowflake.Generator-346"><span class="linenos">346</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="Snowflake.Generator-347"><a href="#Snowflake.Generator-347"><span class="linenos">347</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake.Generator-348"><a href="#Snowflake.Generator-348"><span class="linenos">348</span></a>
+</span><span id="Snowflake.Generator-349"><a href="#Snowflake.Generator-349"><span class="linenos">349</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="Snowflake.Generator-350"><a href="#Snowflake.Generator-350"><span class="linenos">350</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="Snowflake.Generator-351"><a href="#Snowflake.Generator-351"><span class="linenos">351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="Snowflake.Generator-352"><a href="#Snowflake.Generator-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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="Snowflake.Generator-353"><a href="#Snowflake.Generator-353"><span class="linenos">353</span></a>
+</span><span id="Snowflake.Generator-354"><a href="#Snowflake.Generator-354"><span class="linenos">354</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="Snowflake.Generator-355"><a href="#Snowflake.Generator-355"><span class="linenos">355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</span>
+</span><span id="Snowflake.Generator-356"><a href="#Snowflake.Generator-356"><span class="linenos">356</span></a>
+</span><span id="Snowflake.Generator-357"><a href="#Snowflake.Generator-357"><span class="linenos">357</span></a><span class="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
+</span><span id="Snowflake.Generator-358"><a href="#Snowflake.Generator-358"><span class="linenos">358</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
+</span><span id="Snowflake.Generator-359"><a href="#Snowflake.Generator-359"><span class="linenos">359</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Snowflake.Generator-360"><a href="#Snowflake.Generator-360"><span class="linenos">360</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="Snowflake.Generator-361"><a href="#Snowflake.Generator-361"><span class="linenos">361</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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="Snowflake.Generator-362"><a href="#Snowflake.Generator-362"><span class="linenos">362</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="Snowflake.Generator-363"><a href="#Snowflake.Generator-363"><span class="linenos">363</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+</span><span id="Snowflake.Generator-364"><a href="#Snowflake.Generator-364"><span class="linenos">364</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Snowflake.Generator-365"><a href="#Snowflake.Generator-365"><span class="linenos">365</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
+</span><span id="Snowflake.Generator-366"><a href="#Snowflake.Generator-366"><span class="linenos">366</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
+</span><span id="Snowflake.Generator-367"><a href="#Snowflake.Generator-367"><span class="linenos">367</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-368"><a href="#Snowflake.Generator-368"><span class="linenos">368</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator-369"><a href="#Snowflake.Generator-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Snowflake.Generator-370"><a href="#Snowflake.Generator-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Snowflake.Generator-371"><a href="#Snowflake.Generator-371"><span class="linenos">371</span></a>
+</span><span id="Snowflake.Generator-372"><a href="#Snowflake.Generator-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Snowflake.Generator-373"><a href="#Snowflake.Generator-373"><span class="linenos">373</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
+</span><span id="Snowflake.Generator-374"><a href="#Snowflake.Generator-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</span>
+</span><span id="Snowflake.Generator-375"><a href="#Snowflake.Generator-375"><span class="linenos">375</span></a>
+</span><span id="Snowflake.Generator-376"><a href="#Snowflake.Generator-376"><span class="linenos">376</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="Snowflake.Generator-377"><a href="#Snowflake.Generator-377"><span class="linenos">377</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
+</span><span id="Snowflake.Generator-378"><a href="#Snowflake.Generator-378"><span class="linenos">378</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
+</span><span id="Snowflake.Generator-379"><a href="#Snowflake.Generator-379"><span class="linenos">379</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
+</span><span id="Snowflake.Generator-380"><a href="#Snowflake.Generator-380"><span class="linenos">380</span></a><span class="sd"> generating the SQL.</span>
+</span><span id="Snowflake.Generator-381"><a href="#Snowflake.Generator-381"><span class="linenos">381</span></a>
+</span><span id="Snowflake.Generator-382"><a href="#Snowflake.Generator-382"><span class="linenos">382</span></a><span class="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
+</span><span id="Snowflake.Generator-383"><a href="#Snowflake.Generator-383"><span class="linenos">383</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
+</span><span id="Snowflake.Generator-384"><a href="#Snowflake.Generator-384"><span class="linenos">384</span></a><span class="sd"> properly quote but should be true in most cases.</span>
+</span><span id="Snowflake.Generator-385"><a href="#Snowflake.Generator-385"><span class="linenos">385</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Snowflake.Generator-386"><a href="#Snowflake.Generator-386"><span class="linenos">386</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
+</span><span id="Snowflake.Generator-387"><a href="#Snowflake.Generator-387"><span class="linenos">387</span></a> <span class="n">flatten</span><span class="p">(</span>
+</span><span id="Snowflake.Generator-388"><a href="#Snowflake.Generator-388"><span class="linenos">388</span></a> <span class="p">(</span><span class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
+</span><span id="Snowflake.Generator-389"><a href="#Snowflake.Generator-389"><span class="linenos">389</span></a> <span class="k">for</span> <span class="n">v</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">Values</span><span class="p">)</span>
+</span><span id="Snowflake.Generator-390"><a href="#Snowflake.Generator-390"><span class="linenos">390</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator-391"><a href="#Snowflake.Generator-391"><span class="linenos">391</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator-392"><a href="#Snowflake.Generator-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="n">values_identifiers</span><span class="p">:</span>
+</span><span id="Snowflake.Generator-393"><a href="#Snowflake.Generator-393"><span class="linenos">393</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="Snowflake.Generator-394"><a href="#Snowflake.Generator-394"><span class="linenos">394</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+</span><span id="Snowflake.Generator-395"><a href="#Snowflake.Generator-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
+</span><span id="Snowflake.Generator-396"><a href="#Snowflake.Generator-396"><span class="linenos">396</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Snowflake.Generator-397"><a href="#Snowflake.Generator-397"><span class="linenos">397</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator-398"><a href="#Snowflake.Generator-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Snowflake.Generator-399"><a href="#Snowflake.Generator-399"><span class="linenos">399</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Snowflake.Generator-400"><a href="#Snowflake.Generator-400"><span class="linenos">400</span></a>
+</span><span id="Snowflake.Generator-401"><a href="#Snowflake.Generator-401"><span class="linenos">401</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="Snowflake.Generator-402"><a href="#Snowflake.Generator-402"><span class="linenos">402</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="Snowflake.Generator-403"><a href="#Snowflake.Generator-403"><span class="linenos">403</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="Snowflake.Generator-404"><a href="#Snowflake.Generator-404"><span class="linenos">404</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Snowflake.Generator-405"><a href="#Snowflake.Generator-405"><span class="linenos">405</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><span id="Snowflake.Generator-406"><a href="#Snowflake.Generator-406"><span class="linenos">406</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">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Snowflake.Generator-407"><a href="#Snowflake.Generator-407"><span class="linenos">407</span></a>
+</span><span id="Snowflake.Generator-408"><a href="#Snowflake.Generator-408"><span class="linenos">408</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Snowflake.Generator-409"><a href="#Snowflake.Generator-409"><span class="linenos">409</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="Snowflake.Generator-410"><a href="#Snowflake.Generator-410"><span class="linenos">410</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Snowflake.Generator-411"><a href="#Snowflake.Generator-411"><span class="linenos">411</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="Snowflake.Generator-412"><a href="#Snowflake.Generator-412"><span class="linenos">412</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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="Snowflake.Generator-413"><a href="#Snowflake.Generator-413"><span class="linenos">413</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="Snowflake.Generator-414"><a href="#Snowflake.Generator-414"><span class="linenos">414</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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="Snowflake.Generator-415"><a href="#Snowflake.Generator-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</span>
</span></pre></div>
@@ -1202,10 +1205,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Snowflake.Generator.except_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.except_op-343"><a href="#Snowflake.Generator.except_op-343"><span class="linenos">343</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="Snowflake.Generator.except_op-344"><a href="#Snowflake.Generator.except_op-344"><span class="linenos">344</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="Snowflake.Generator.except_op-345"><a href="#Snowflake.Generator.except_op-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="Snowflake.Generator.except_op-346"><a href="#Snowflake.Generator.except_op-346"><span class="linenos">346</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">except_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.except_op-344"><a href="#Snowflake.Generator.except_op-344"><span class="linenos">344</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="Snowflake.Generator.except_op-345"><a href="#Snowflake.Generator.except_op-345"><span class="linenos">345</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="Snowflake.Generator.except_op-346"><a href="#Snowflake.Generator.except_op-346"><span class="linenos">346</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;EXCEPT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="Snowflake.Generator.except_op-347"><a href="#Snowflake.Generator.except_op-347"><span class="linenos">347</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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></pre></div>
@@ -1223,10 +1226,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Snowflake.Generator.intersect_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.intersect_op-348"><a href="#Snowflake.Generator.intersect_op-348"><span class="linenos">348</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="Snowflake.Generator.intersect_op-349"><a href="#Snowflake.Generator.intersect_op-349"><span class="linenos">349</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
-</span><span id="Snowflake.Generator.intersect_op-350"><a href="#Snowflake.Generator.intersect_op-350"><span class="linenos">350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
-</span><span id="Snowflake.Generator.intersect_op-351"><a href="#Snowflake.Generator.intersect_op-351"><span class="linenos">351</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">intersect_op</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.intersect_op-349"><a href="#Snowflake.Generator.intersect_op-349"><span class="linenos">349</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="Snowflake.Generator.intersect_op-350"><a href="#Snowflake.Generator.intersect_op-350"><span class="linenos">350</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;distinct&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+</span><span id="Snowflake.Generator.intersect_op-351"><a href="#Snowflake.Generator.intersect_op-351"><span class="linenos">351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;INTERSECT with All is not supported in Snowflake&quot;</span><span class="p">)</span>
+</span><span id="Snowflake.Generator.intersect_op-352"><a href="#Snowflake.Generator.intersect_op-352"><span class="linenos">352</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</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></pre></div>
@@ -1244,23 +1247,23 @@ Default: True</li>
</div>
<a class="headerlink" href="#Snowflake.Generator.values_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.values_sql-353"><a href="#Snowflake.Generator.values_sql-353"><span class="linenos">353</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="Snowflake.Generator.values_sql-354"><a href="#Snowflake.Generator.values_sql-354"><span class="linenos">354</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</span>
-</span><span id="Snowflake.Generator.values_sql-355"><a href="#Snowflake.Generator.values_sql-355"><span class="linenos">355</span></a>
-</span><span id="Snowflake.Generator.values_sql-356"><a href="#Snowflake.Generator.values_sql-356"><span class="linenos">356</span></a><span class="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
-</span><span id="Snowflake.Generator.values_sql-357"><a href="#Snowflake.Generator.values_sql-357"><span class="linenos">357</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
-</span><span id="Snowflake.Generator.values_sql-358"><a href="#Snowflake.Generator.values_sql-358"><span class="linenos">358</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Snowflake.Generator.values_sql-359"><a href="#Snowflake.Generator.values_sql-359"><span class="linenos">359</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="Snowflake.Generator.values_sql-360"><a href="#Snowflake.Generator.values_sql-360"><span class="linenos">360</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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="Snowflake.Generator.values_sql-361"><a href="#Snowflake.Generator.values_sql-361"><span class="linenos">361</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="Snowflake.Generator.values_sql-362"><a href="#Snowflake.Generator.values_sql-362"><span class="linenos">362</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="Snowflake.Generator.values_sql-363"><a href="#Snowflake.Generator.values_sql-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Snowflake.Generator.values_sql-364"><a href="#Snowflake.Generator.values_sql-364"><span class="linenos">364</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
-</span><span id="Snowflake.Generator.values_sql-365"><a href="#Snowflake.Generator.values_sql-365"><span class="linenos">365</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
-</span><span id="Snowflake.Generator.values_sql-366"><a href="#Snowflake.Generator.values_sql-366"><span class="linenos">366</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.values_sql-367"><a href="#Snowflake.Generator.values_sql-367"><span class="linenos">367</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator.values_sql-368"><a href="#Snowflake.Generator.values_sql-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Snowflake.Generator.values_sql-369"><a href="#Snowflake.Generator.values_sql-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_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="Snowflake.Generator.values_sql-354"><a href="#Snowflake.Generator.values_sql-354"><span class="linenos">354</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="Snowflake.Generator.values_sql-355"><a href="#Snowflake.Generator.values_sql-355"><span class="linenos">355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted.</span>
+</span><span id="Snowflake.Generator.values_sql-356"><a href="#Snowflake.Generator.values_sql-356"><span class="linenos">356</span></a>
+</span><span id="Snowflake.Generator.values_sql-357"><a href="#Snowflake.Generator.values_sql-357"><span class="linenos">357</span></a><span class="sd"> We also want to make sure that after we find matches where we need to unquote a column that we prevent users</span>
+</span><span id="Snowflake.Generator.values_sql-358"><a href="#Snowflake.Generator.values_sql-358"><span class="linenos">358</span></a><span class="sd"> from adding quotes to the column by using the `identify` argument when generating the SQL.</span>
+</span><span id="Snowflake.Generator.values_sql-359"><a href="#Snowflake.Generator.values_sql-359"><span class="linenos">359</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Snowflake.Generator.values_sql-360"><a href="#Snowflake.Generator.values_sql-360"><span class="linenos">360</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="Snowflake.Generator.values_sql-361"><a href="#Snowflake.Generator.values_sql-361"><span class="linenos">361</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</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="Snowflake.Generator.values_sql-362"><a href="#Snowflake.Generator.values_sql-362"><span class="linenos">362</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="Snowflake.Generator.values_sql-363"><a href="#Snowflake.Generator.values_sql-363"><span class="linenos">363</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+</span><span id="Snowflake.Generator.values_sql-364"><a href="#Snowflake.Generator.values_sql-364"><span class="linenos">364</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Snowflake.Generator.values_sql-365"><a href="#Snowflake.Generator.values_sql-365"><span class="linenos">365</span></a> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">TableAlias</span><span class="p">)</span>
+</span><span id="Snowflake.Generator.values_sql-366"><a href="#Snowflake.Generator.values_sql-366"><span class="linenos">366</span></a> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">==</span> <span class="s2">&quot;columns&quot;</span>
+</span><span id="Snowflake.Generator.values_sql-367"><a href="#Snowflake.Generator.values_sql-367"><span class="linenos">367</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.values_sql-368"><a href="#Snowflake.Generator.values_sql-368"><span class="linenos">368</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator.values_sql-369"><a href="#Snowflake.Generator.values_sql-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Snowflake.Generator.values_sql-370"><a href="#Snowflake.Generator.values_sql-370"><span class="linenos">370</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1283,9 +1286,9 @@ from adding quotes to the column by using the <code>identify</code> argument whe
</div>
<a class="headerlink" href="#Snowflake.Generator.settag_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.settag_sql-371"><a href="#Snowflake.Generator.settag_sql-371"><span class="linenos">371</span></a> <span class="k">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Snowflake.Generator.settag_sql-372"><a href="#Snowflake.Generator.settag_sql-372"><span class="linenos">372</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
-</span><span id="Snowflake.Generator.settag_sql-373"><a href="#Snowflake.Generator.settag_sql-373"><span class="linenos">373</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.settag_sql-372"><a href="#Snowflake.Generator.settag_sql-372"><span class="linenos">372</span></a> <span class="k">def</span> <span class="nf">settag_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetTag</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Snowflake.Generator.settag_sql-373"><a href="#Snowflake.Generator.settag_sql-373"><span class="linenos">373</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;UNSET&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unset&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;SET&quot;</span>
+</span><span id="Snowflake.Generator.settag_sql-374"><a href="#Snowflake.Generator.settag_sql-374"><span class="linenos">374</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> TAG </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="s2">&quot;</span>
</span></pre></div>
@@ -1303,30 +1306,30 @@ from adding quotes to the column by using the <code>identify</code> argument whe
</div>
<a class="headerlink" href="#Snowflake.Generator.select_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.select_sql-375"><a href="#Snowflake.Generator.select_sql-375"><span class="linenos">375</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="Snowflake.Generator.select_sql-376"><a href="#Snowflake.Generator.select_sql-376"><span class="linenos">376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
-</span><span id="Snowflake.Generator.select_sql-377"><a href="#Snowflake.Generator.select_sql-377"><span class="linenos">377</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
-</span><span id="Snowflake.Generator.select_sql-378"><a href="#Snowflake.Generator.select_sql-378"><span class="linenos">378</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
-</span><span id="Snowflake.Generator.select_sql-379"><a href="#Snowflake.Generator.select_sql-379"><span class="linenos">379</span></a><span class="sd"> generating the SQL.</span>
-</span><span id="Snowflake.Generator.select_sql-380"><a href="#Snowflake.Generator.select_sql-380"><span class="linenos">380</span></a>
-</span><span id="Snowflake.Generator.select_sql-381"><a href="#Snowflake.Generator.select_sql-381"><span class="linenos">381</span></a><span class="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
-</span><span id="Snowflake.Generator.select_sql-382"><a href="#Snowflake.Generator.select_sql-382"><span class="linenos">382</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
-</span><span id="Snowflake.Generator.select_sql-383"><a href="#Snowflake.Generator.select_sql-383"><span class="linenos">383</span></a><span class="sd"> properly quote but should be true in most cases.</span>
-</span><span id="Snowflake.Generator.select_sql-384"><a href="#Snowflake.Generator.select_sql-384"><span class="linenos">384</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Snowflake.Generator.select_sql-385"><a href="#Snowflake.Generator.select_sql-385"><span class="linenos">385</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
-</span><span id="Snowflake.Generator.select_sql-386"><a href="#Snowflake.Generator.select_sql-386"><span class="linenos">386</span></a> <span class="n">flatten</span><span class="p">(</span>
-</span><span id="Snowflake.Generator.select_sql-387"><a href="#Snowflake.Generator.select_sql-387"><span class="linenos">387</span></a> <span class="p">(</span><span class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
-</span><span id="Snowflake.Generator.select_sql-388"><a href="#Snowflake.Generator.select_sql-388"><span class="linenos">388</span></a> <span class="k">for</span> <span class="n">v</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">Values</span><span class="p">)</span>
-</span><span id="Snowflake.Generator.select_sql-389"><a href="#Snowflake.Generator.select_sql-389"><span class="linenos">389</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator.select_sql-390"><a href="#Snowflake.Generator.select_sql-390"><span class="linenos">390</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator.select_sql-391"><a href="#Snowflake.Generator.select_sql-391"><span class="linenos">391</span></a> <span class="k">if</span> <span class="n">values_identifiers</span><span class="p">:</span>
-</span><span id="Snowflake.Generator.select_sql-392"><a href="#Snowflake.Generator.select_sql-392"><span class="linenos">392</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="Snowflake.Generator.select_sql-393"><a href="#Snowflake.Generator.select_sql-393"><span class="linenos">393</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
-</span><span id="Snowflake.Generator.select_sql-394"><a href="#Snowflake.Generator.select_sql-394"><span class="linenos">394</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
-</span><span id="Snowflake.Generator.select_sql-395"><a href="#Snowflake.Generator.select_sql-395"><span class="linenos">395</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="Snowflake.Generator.select_sql-396"><a href="#Snowflake.Generator.select_sql-396"><span class="linenos">396</span></a> <span class="p">)</span>
-</span><span id="Snowflake.Generator.select_sql-397"><a href="#Snowflake.Generator.select_sql-397"><span class="linenos">397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="Snowflake.Generator.select_sql-398"><a href="#Snowflake.Generator.select_sql-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_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="Snowflake.Generator.select_sql-376"><a href="#Snowflake.Generator.select_sql-376"><span class="linenos">376</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="Snowflake.Generator.select_sql-377"><a href="#Snowflake.Generator.select_sql-377"><span class="linenos">377</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Due to a bug in Snowflake we want to make sure that all columns in a VALUES table alias are unquoted and also</span>
+</span><span id="Snowflake.Generator.select_sql-378"><a href="#Snowflake.Generator.select_sql-378"><span class="linenos">378</span></a><span class="sd"> that all columns in a SELECT are unquoted. We also want to make sure that after we find matches where we need</span>
+</span><span id="Snowflake.Generator.select_sql-379"><a href="#Snowflake.Generator.select_sql-379"><span class="linenos">379</span></a><span class="sd"> to unquote a column that we prevent users from adding quotes to the column by using the `identify` argument when</span>
+</span><span id="Snowflake.Generator.select_sql-380"><a href="#Snowflake.Generator.select_sql-380"><span class="linenos">380</span></a><span class="sd"> generating the SQL.</span>
+</span><span id="Snowflake.Generator.select_sql-381"><a href="#Snowflake.Generator.select_sql-381"><span class="linenos">381</span></a>
+</span><span id="Snowflake.Generator.select_sql-382"><a href="#Snowflake.Generator.select_sql-382"><span class="linenos">382</span></a><span class="sd"> Note: We make an assumption that any columns referenced in a VALUES expression should be unquoted throughout the</span>
+</span><span id="Snowflake.Generator.select_sql-383"><a href="#Snowflake.Generator.select_sql-383"><span class="linenos">383</span></a><span class="sd"> expression. This might not be true in a case where the same column name can be sourced from another table that can</span>
+</span><span id="Snowflake.Generator.select_sql-384"><a href="#Snowflake.Generator.select_sql-384"><span class="linenos">384</span></a><span class="sd"> properly quote but should be true in most cases.</span>
+</span><span id="Snowflake.Generator.select_sql-385"><a href="#Snowflake.Generator.select_sql-385"><span class="linenos">385</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Snowflake.Generator.select_sql-386"><a href="#Snowflake.Generator.select_sql-386"><span class="linenos">386</span></a> <span class="n">values_identifiers</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
+</span><span id="Snowflake.Generator.select_sql-387"><a href="#Snowflake.Generator.select_sql-387"><span class="linenos">387</span></a> <span class="n">flatten</span><span class="p">(</span>
+</span><span id="Snowflake.Generator.select_sql-388"><a href="#Snowflake.Generator.select_sql-388"><span class="linenos">388</span></a> <span class="p">(</span><span class="n">v</span><span class="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 class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">())</span><span class="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="p">[])</span>
+</span><span id="Snowflake.Generator.select_sql-389"><a href="#Snowflake.Generator.select_sql-389"><span class="linenos">389</span></a> <span class="k">for</span> <span class="n">v</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">Values</span><span class="p">)</span>
+</span><span id="Snowflake.Generator.select_sql-390"><a href="#Snowflake.Generator.select_sql-390"><span class="linenos">390</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator.select_sql-391"><a href="#Snowflake.Generator.select_sql-391"><span class="linenos">391</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator.select_sql-392"><a href="#Snowflake.Generator.select_sql-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="n">values_identifiers</span><span class="p">:</span>
+</span><span id="Snowflake.Generator.select_sql-393"><a href="#Snowflake.Generator.select_sql-393"><span class="linenos">393</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="Snowflake.Generator.select_sql-394"><a href="#Snowflake.Generator.select_sql-394"><span class="linenos">394</span></a> <span class="k">lambda</span> <span class="n">node</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">**</span><span class="p">{</span><span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="s2">&quot;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+</span><span id="Snowflake.Generator.select_sql-395"><a href="#Snowflake.Generator.select_sql-395"><span class="linenos">395</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="ow">and</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">values_identifiers</span>
+</span><span id="Snowflake.Generator.select_sql-396"><a href="#Snowflake.Generator.select_sql-396"><span class="linenos">396</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="Snowflake.Generator.select_sql-397"><a href="#Snowflake.Generator.select_sql-397"><span class="linenos">397</span></a> <span class="p">)</span>
+</span><span id="Snowflake.Generator.select_sql-398"><a href="#Snowflake.Generator.select_sql-398"><span class="linenos">398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">no_identify</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
+</span><span id="Snowflake.Generator.select_sql-399"><a href="#Snowflake.Generator.select_sql-399"><span class="linenos">399</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">select_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1353,12 +1356,12 @@ properly quote but should be true in most cases.</p>
</div>
<a class="headerlink" href="#Snowflake.Generator.describe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.describe_sql-400"><a href="#Snowflake.Generator.describe_sql-400"><span class="linenos">400</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="Snowflake.Generator.describe_sql-401"><a href="#Snowflake.Generator.describe_sql-401"><span class="linenos">401</span></a> <span class="c1"># Default to table if kind is unknown</span>
-</span><span id="Snowflake.Generator.describe_sql-402"><a href="#Snowflake.Generator.describe_sql-402"><span class="linenos">402</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="Snowflake.Generator.describe_sql-403"><a href="#Snowflake.Generator.describe_sql-403"><span class="linenos">403</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Snowflake.Generator.describe_sql-404"><a href="#Snowflake.Generator.describe_sql-404"><span class="linenos">404</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><span id="Snowflake.Generator.describe_sql-405"><a href="#Snowflake.Generator.describe_sql-405"><span class="linenos">405</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">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="Snowflake.Generator.describe_sql-401"><a href="#Snowflake.Generator.describe_sql-401"><span class="linenos">401</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="Snowflake.Generator.describe_sql-402"><a href="#Snowflake.Generator.describe_sql-402"><span class="linenos">402</span></a> <span class="c1"># Default to table if kind is unknown</span>
+</span><span id="Snowflake.Generator.describe_sql-403"><a href="#Snowflake.Generator.describe_sql-403"><span class="linenos">403</span></a> <span class="n">kind_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="s2">&quot;kind&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="Snowflake.Generator.describe_sql-404"><a href="#Snowflake.Generator.describe_sql-404"><span class="linenos">404</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_value</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">kind_value</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Snowflake.Generator.describe_sql-405"><a href="#Snowflake.Generator.describe_sql-405"><span class="linenos">405</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><span id="Snowflake.Generator.describe_sql-406"><a href="#Snowflake.Generator.describe_sql-406"><span class="linenos">406</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">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -1376,14 +1379,14 @@ properly quote but should be true in most cases.</p>
</div>
<a class="headerlink" href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-407"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-407"><span class="linenos">407</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
-</span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-408"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-408"><span class="linenos">408</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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-409"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-409"><span class="linenos">409</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-410"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-410"><span class="linenos">410</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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-411"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-411"><span class="linenos">411</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-412"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-412"><span class="linenos">412</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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-413"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-413"><span class="linenos">413</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-414"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-414"><span class="linenos">414</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-408"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-408"><span class="linenos">408</span></a> <span class="k">def</span> <span class="nf">generatedasidentitycolumnconstraint_sql</span><span class="p">(</span>
+</span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-409"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-409"><span class="linenos">409</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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-410"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-410"><span class="linenos">410</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-411"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-411"><span class="linenos">411</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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-412"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-412"><span class="linenos">412</span></a> <span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; START </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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-413"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-413"><span class="linenos">413</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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-414"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-414"><span class="linenos">414</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; INCREMENT </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="Snowflake.Generator.generatedasidentitycolumnconstraint_sql-415"><a href="#Snowflake.Generator.generatedasidentitycolumnconstraint_sql-415"><span class="linenos">415</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;AUTOINCREMENT</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="s2">&quot;</span>
</span></pre></div>
@@ -1508,7 +1511,7 @@ properly quote but should be true in most cases.</p>
<dd id="Snowflake.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Snowflake.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Snowflake.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Snowflake.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Snowflake.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Snowflake.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Snowflake.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Snowflake.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1517,6 +1520,7 @@ properly quote but should be true in most cases.</p>
<dd id="Snowflake.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Snowflake.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Snowflake.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Snowflake.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Snowflake.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Snowflake.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Snowflake.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/spark.html b/docs/sqlglot/dialects/spark.html
index bc53a56..d29015b 100644
--- a/docs/sqlglot/dialects/spark.html
+++ b/docs/sqlglot/dialects/spark.html
@@ -43,17 +43,11 @@
<a class="class" href="#Spark.Generator">Spark.Generator</a>
<ul class="memberlist">
<li>
- <a class="function" href="#Spark.Generator.cast_sql">cast_sql</a>
+ <a class="function" href="#Spark.Generator.datediff_sql">datediff_sql</a>
</li>
</ul>
</li>
- <li>
- <a class="class" href="#Spark.Tokenizer">Spark.Tokenizer</a>
- <ul class="memberlist">
- </ul>
-
- </li>
</ul>
</li>
@@ -80,229 +74,61 @@
<label class="view-source-button" for="mod-spark-view-source"><span>View Source</span></label>
- <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
-</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
-</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a>
-</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">parser</span>
-</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span> <span class="n">rename_func</span><span class="p">,</span> <span class="n">trim_sql</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.hive</span> <span class="kn">import</span> <span class="n">Hive</span>
-</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
-</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</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">Hive</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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;TABLE&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">)</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="p">(</span><span class="n">properties</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="p">[])</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="p">):</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CREATE TEMPORARY VIEW </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">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><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="k">return</span> <span class="n">create_with_partitions_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-21"><a href="#L-21"><span class="linenos"> 21</span></a>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="k">def</span> <span class="nf">_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Hive</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">Map</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">keys</span> <span class="o">=</span> <span 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">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">])</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">values</span> <span class="o">=</span> <span 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">args</span><span class="p">[</span><span class="s2">&quot;values&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="sa">f</span><span class="s2">&quot;MAP_FROM_ARRAYS(</span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</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">_str_to_date</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Hive</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">StrToDate</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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-31"><a href="#L-31"><span class="linenos"> 31</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-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="o">==</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</span><span class="p">:</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(</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">time_format</span><span class="si">}</span><span class="s2">)&quot;</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><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="k">def</span> <span class="nf">_unix_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Hive</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">UnixToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">scale</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scale&quot;</span><span class="p">)</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">timestamp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">SECONDS</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="sa">f</span><span class="s2">&quot;TIMESTAMP_SECONDS(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">MILLIS</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="sa">f</span><span class="s2">&quot;TIMESTAMP_MILLIS(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">MICROS</span><span class="p">:</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TIMESTAMP_MICROS(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">)&quot;</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">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Improper scale for timestamp&quot;</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><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="k">class</span> <span class="nc">Spark</span><span class="p">(</span><span class="n">Hive</span><span class="p">):</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">FUNCTIONS</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="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;LEFT&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">Substring</span><span class="p">(</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</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-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">start</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">1</span><span class="p">),</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">length</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-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="p">),</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;SHIFTLEFT&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">BitwiseLeftShift</span><span class="p">(</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</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-65"><a href="#L-65"><span class="linenos"> 65</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-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="p">),</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;SHIFTRIGHT&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">BitwiseRightShift</span><span class="p">(</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="p">),</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;RIGHT&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">Substring</span><span class="p">(</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">expression</span><span class="o">=</span><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">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">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">1</span><span class="p">)),</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="p">),</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">length</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-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="p">),</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</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="s2">&quot;BOOLEAN&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">Cast</span><span class="p">(</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">this</span><span class="o">=</span><span class="n">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">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="s2">&quot;boolean&quot;</span><span class="p">)</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="p">),</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;INT&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">Cast</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">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="s2">&quot;int&quot;</span><span class="p">)),</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;DAYOFWEEK&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">DayOfWeek</span><span class="p">(</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="p">),</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;DAYOFMONTH&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">DayOfMonth</span><span class="p">(</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="p">),</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;DAYOFYEAR&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">DayOfYear</span><span class="p">(</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="p">),</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;WEEKOFYEAR&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">WeekOfYear</span><span class="p">(</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="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;DATE&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">Cast</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">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="s2">&quot;date&quot;</span><span class="p">)),</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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="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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="p">),</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="s2">&quot;STRING&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">Cast</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">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="s2">&quot;string&quot;</span><span class="p">)),</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">1</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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="s2">&quot;TIMESTAMP&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">Cast</span><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">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">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="s2">&quot;timestamp&quot;</span><span class="p">)</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="p">}</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">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 class="c1"># type: ignore</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;BROADCAST&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="s2">&quot;BROADCASTJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="s2">&quot;MAPJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="s2">&quot;MERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="s2">&quot;SHUFFLEMERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="s2">&quot;MERGEJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="s2">&quot;SHUFFLE_HASH&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&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><span id="L-122"><a href="#L-122"><span class="linenos">122</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-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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="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">Expression</span><span class="p">]:</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</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;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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">Drop</span><span class="p">,</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</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><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="s2">&quot;COLUMNS&quot;</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="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">pivot_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">-&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-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="c1"># Spark doesn&#39;t add a suffix to the pivot columns when there&#39;s a single aggregation</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pivot_columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</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="p">[</span><span class="s2">&quot;&quot;</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="n">names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">pivot_columns</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="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</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="sd"> Moreover, function names are lowercased in order to mimic Spark&#39;s naming scheme.</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">else</span> <span class="n">node</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="p">)</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</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="s2">&quot;spark&quot;</span><span class="p">,</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-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">return</span> <span class="n">names</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">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">exp</span><span 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;BYTE&quot;</span><span class="p">,</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">exp</span><span 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;SHORT&quot;</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">exp</span><span 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;LONG&quot;</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="p">}</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">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</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;APPROX_COUNT_DISTINCT&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">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;USING </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">&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">ArraySum</span><span class="p">:</span> <span 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;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&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">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</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">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&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;unit&quot;</span><span class="p">)),</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</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-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</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">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">:</span> <span 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">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <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">Trim</span><span class="p">:</span> <span class="n">trim_sql</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">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-196"><a href="#L-196"><span class="linenos">196</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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_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">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">)&quot;</span><span class="p">,</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="p">}</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</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">ArraySort</span><span class="p">)</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</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">ILike</span><span class="p">)</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">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</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="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</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">Cast</span><span class="p">)</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">is_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="p">):</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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-218"><a href="#L-218"><span class="linenos">218</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;TO_JSON&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-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="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
+</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.spark2</span> <span class="kn">import</span> <span class="n">Spark2</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
+</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="k">def</span> <span class="nf">_parse_datediff</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="sd"> Although Spark docs don&#39;t mention the &quot;unit&quot; argument, Spark3 added support for</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="sd"> it at some point. Databricks also supports this variation (see below).</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="sd"> For example, in spark-sql (v3.3.1):</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="sd"> - SELECT DATEDIFF(&#39;2020-01-01&#39;, &#39;2020-01-05&#39;) results in -4</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="sd"> - SELECT DATEDIFF(day, &#39;2020-01-01&#39;, &#39;2020-01-05&#39;) results in 4</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a>
+</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="sd"> See also:</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="sd"> - https://docs.databricks.com/sql/language-manual/functions/datediff3.html</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="sd"> - https://docs.databricks.com/sql/language-manual/functions/datediff.html</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos">24</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-25"><a href="#L-25"><span class="linenos">25</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-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">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">3</span><span class="p">:</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">this</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a>
+</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">(</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span 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">TsOrDsToDate</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">unit</span><span class="o">=</span><span class="n">unit</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="p">)</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a><span class="k">class</span> <span class="nc">Spark</span><span class="p">(</span><span class="n">Spark2</span><span class="p">):</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="o">**</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="p">}</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="n">Spark2</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</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 class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos">48</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-49"><a href="#L-49"><span class="linenos">49</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos">50</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;expression&quot;</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="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos">53</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;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">unit</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span>
</span></pre></div>
@@ -312,184 +138,32 @@
<div class="attr class">
<span class="def">class</span>
- <span class="name">Spark</span><wbr>(<span class="base"><a href="hive.html#Hive">sqlglot.dialects.hive.Hive</a></span>):
+ <span class="name">Spark</span><wbr>(<span class="base"><a href="spark2.html#Spark2">sqlglot.dialects.spark2.Spark2</a></span>):
<label class="view-source-button" for="Spark-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Spark"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark-53"><a href="#Spark-53"><span class="linenos"> 53</span></a><span class="k">class</span> <span class="nc">Spark</span><span class="p">(</span><span class="n">Hive</span><span class="p">):</span>
-</span><span id="Spark-54"><a href="#Spark-54"><span class="linenos"> 54</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Spark-55"><a href="#Spark-55"><span class="linenos"> 55</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark-56"><a href="#Spark-56"><span class="linenos"> 56</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark-57"><a href="#Spark-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark-58"><a href="#Spark-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark-59"><a href="#Spark-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;LEFT&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">Substring</span><span class="p">(</span>
-</span><span id="Spark-60"><a href="#Spark-60"><span class="linenos"> 60</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="Spark-61"><a href="#Spark-61"><span class="linenos"> 61</span></a> <span class="n">start</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">1</span><span class="p">),</span>
-</span><span id="Spark-62"><a href="#Spark-62"><span class="linenos"> 62</span></a> <span class="n">length</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="Spark-63"><a href="#Spark-63"><span class="linenos"> 63</span></a> <span class="p">),</span>
-</span><span id="Spark-64"><a href="#Spark-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;SHIFTLEFT&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">BitwiseLeftShift</span><span class="p">(</span>
-</span><span id="Spark-65"><a href="#Spark-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="Spark-66"><a href="#Spark-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="Spark-67"><a href="#Spark-67"><span class="linenos"> 67</span></a> <span class="p">),</span>
-</span><span id="Spark-68"><a href="#Spark-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;SHIFTRIGHT&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">BitwiseRightShift</span><span class="p">(</span>
-</span><span id="Spark-69"><a href="#Spark-69"><span class="linenos"> 69</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="Spark-70"><a href="#Spark-70"><span class="linenos"> 70</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="Spark-71"><a href="#Spark-71"><span class="linenos"> 71</span></a> <span class="p">),</span>
-</span><span id="Spark-72"><a href="#Spark-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;RIGHT&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">Substring</span><span class="p">(</span>
-</span><span id="Spark-73"><a href="#Spark-73"><span class="linenos"> 73</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="Spark-74"><a href="#Spark-74"><span class="linenos"> 74</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
-</span><span id="Spark-75"><a href="#Spark-75"><span class="linenos"> 75</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</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="Spark-76"><a href="#Spark-76"><span class="linenos"> 76</span></a> <span class="n">expression</span><span class="o">=</span><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">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">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">1</span><span class="p">)),</span>
-</span><span id="Spark-77"><a href="#Spark-77"><span class="linenos"> 77</span></a> <span class="p">),</span>
-</span><span id="Spark-78"><a href="#Spark-78"><span class="linenos"> 78</span></a> <span class="n">length</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="Spark-79"><a href="#Spark-79"><span class="linenos"> 79</span></a> <span class="p">),</span>
-</span><span id="Spark-80"><a href="#Spark-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark-81"><a href="#Spark-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;BOOLEAN&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">Cast</span><span class="p">(</span>
-</span><span id="Spark-82"><a href="#Spark-82"><span class="linenos"> 82</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">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="s2">&quot;boolean&quot;</span><span class="p">)</span>
-</span><span id="Spark-83"><a href="#Spark-83"><span class="linenos"> 83</span></a> <span class="p">),</span>
-</span><span id="Spark-84"><a href="#Spark-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark-85"><a href="#Spark-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;INT&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">Cast</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">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="s2">&quot;int&quot;</span><span class="p">)),</span>
-</span><span id="Spark-86"><a href="#Spark-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark-87"><a href="#Spark-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;DAYOFWEEK&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">DayOfWeek</span><span class="p">(</span>
-</span><span id="Spark-88"><a href="#Spark-88"><span class="linenos"> 88</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark-89"><a href="#Spark-89"><span class="linenos"> 89</span></a> <span class="p">),</span>
-</span><span id="Spark-90"><a href="#Spark-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;DAYOFMONTH&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">DayOfMonth</span><span class="p">(</span>
-</span><span id="Spark-91"><a href="#Spark-91"><span class="linenos"> 91</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark-92"><a href="#Spark-92"><span class="linenos"> 92</span></a> <span class="p">),</span>
-</span><span id="Spark-93"><a href="#Spark-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;DAYOFYEAR&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">DayOfYear</span><span class="p">(</span>
-</span><span id="Spark-94"><a href="#Spark-94"><span class="linenos"> 94</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark-95"><a href="#Spark-95"><span class="linenos"> 95</span></a> <span class="p">),</span>
-</span><span id="Spark-96"><a href="#Spark-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;WEEKOFYEAR&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">WeekOfYear</span><span class="p">(</span>
-</span><span id="Spark-97"><a href="#Spark-97"><span class="linenos"> 97</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark-98"><a href="#Spark-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
-</span><span id="Spark-99"><a href="#Spark-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATE&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">Cast</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">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="s2">&quot;date&quot;</span><span class="p">)),</span>
-</span><span id="Spark-100"><a href="#Spark-100"><span class="linenos">100</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="Spark-101"><a href="#Spark-101"><span class="linenos">101</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Spark-102"><a href="#Spark-102"><span class="linenos">102</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="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="Spark-103"><a href="#Spark-103"><span class="linenos">103</span></a> <span class="p">),</span>
-</span><span id="Spark-104"><a href="#Spark-104"><span class="linenos">104</span></a> <span class="s2">&quot;STRING&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">Cast</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">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="s2">&quot;string&quot;</span><span class="p">)),</span>
-</span><span id="Spark-105"><a href="#Spark-105"><span class="linenos">105</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">1</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="Spark-106"><a href="#Spark-106"><span class="linenos">106</span></a> <span class="s2">&quot;TIMESTAMP&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">Cast</span><span class="p">(</span>
-</span><span id="Spark-107"><a href="#Spark-107"><span class="linenos">107</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">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="s2">&quot;timestamp&quot;</span><span class="p">)</span>
-</span><span id="Spark-108"><a href="#Spark-108"><span class="linenos">108</span></a> <span class="p">),</span>
-</span><span id="Spark-109"><a href="#Spark-109"><span class="linenos">109</span></a> <span class="p">}</span>
-</span><span id="Spark-110"><a href="#Spark-110"><span class="linenos">110</span></a>
-</span><span id="Spark-111"><a href="#Spark-111"><span class="linenos">111</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark-112"><a href="#Spark-112"><span class="linenos">112</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 class="c1"># type: ignore</span>
-</span><span id="Spark-113"><a href="#Spark-113"><span class="linenos">113</span></a> <span class="s2">&quot;BROADCAST&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
-</span><span id="Spark-114"><a href="#Spark-114"><span class="linenos">114</span></a> <span class="s2">&quot;BROADCASTJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
-</span><span id="Spark-115"><a href="#Spark-115"><span class="linenos">115</span></a> <span class="s2">&quot;MAPJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
-</span><span id="Spark-116"><a href="#Spark-116"><span class="linenos">116</span></a> <span class="s2">&quot;MERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
-</span><span id="Spark-117"><a href="#Spark-117"><span class="linenos">117</span></a> <span class="s2">&quot;SHUFFLEMERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
-</span><span id="Spark-118"><a href="#Spark-118"><span class="linenos">118</span></a> <span class="s2">&quot;MERGEJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
-</span><span id="Spark-119"><a href="#Spark-119"><span class="linenos">119</span></a> <span class="s2">&quot;SHUFFLE_HASH&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
-</span><span id="Spark-120"><a href="#Spark-120"><span class="linenos">120</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
-</span><span id="Spark-121"><a href="#Spark-121"><span class="linenos">121</span></a> <span class="p">}</span>
-</span><span id="Spark-122"><a href="#Spark-122"><span class="linenos">122</span></a>
-</span><span id="Spark-123"><a href="#Spark-123"><span class="linenos">123</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="Spark-124"><a href="#Spark-124"><span class="linenos">124</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;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
-</span><span id="Spark-125"><a href="#Spark-125"><span class="linenos">125</span></a>
-</span><span id="Spark-126"><a href="#Spark-126"><span class="linenos">126</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">Expression</span><span class="p">]:</span>
-</span><span id="Spark-127"><a href="#Spark-127"><span class="linenos">127</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;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Spark-128"><a href="#Spark-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="Spark-129"><a href="#Spark-129"><span class="linenos">129</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><span id="Spark-130"><a href="#Spark-130"><span class="linenos">130</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
-</span><span id="Spark-131"><a href="#Spark-131"><span class="linenos">131</span></a> <span class="p">)</span>
-</span><span id="Spark-132"><a href="#Spark-132"><span class="linenos">132</span></a>
-</span><span id="Spark-133"><a href="#Spark-133"><span class="linenos">133</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">pivot_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">-&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="Spark-134"><a href="#Spark-134"><span class="linenos">134</span></a> <span class="c1"># Spark doesn&#39;t add a suffix to the pivot columns when there&#39;s a single aggregation</span>
-</span><span id="Spark-135"><a href="#Spark-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pivot_columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Spark-136"><a href="#Spark-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
-</span><span id="Spark-137"><a href="#Spark-137"><span class="linenos">137</span></a>
-</span><span id="Spark-138"><a href="#Spark-138"><span class="linenos">138</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Spark-139"><a href="#Spark-139"><span class="linenos">139</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">pivot_columns</span><span class="p">:</span>
-</span><span id="Spark-140"><a href="#Spark-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="Spark-141"><a href="#Spark-141"><span class="linenos">141</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Spark-142"><a href="#Spark-142"><span class="linenos">142</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Spark-143"><a href="#Spark-143"><span class="linenos">143</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Spark-144"><a href="#Spark-144"><span class="linenos">144</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
-</span><span id="Spark-145"><a href="#Spark-145"><span class="linenos">145</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
-</span><span id="Spark-146"><a href="#Spark-146"><span class="linenos">146</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
-</span><span id="Spark-147"><a href="#Spark-147"><span class="linenos">147</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
-</span><span id="Spark-148"><a href="#Spark-148"><span class="linenos">148</span></a>
-</span><span id="Spark-149"><a href="#Spark-149"><span class="linenos">149</span></a><span class="sd"> Moreover, function names are lowercased in order to mimic Spark&#39;s naming scheme.</span>
-</span><span id="Spark-150"><a href="#Spark-150"><span class="linenos">150</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Spark-151"><a href="#Spark-151"><span class="linenos">151</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Spark-152"><a href="#Spark-152"><span class="linenos">152</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Spark-153"><a href="#Spark-153"><span class="linenos">153</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Spark-154"><a href="#Spark-154"><span class="linenos">154</span></a> <span class="k">else</span> <span class="n">node</span>
-</span><span id="Spark-155"><a href="#Spark-155"><span class="linenos">155</span></a> <span class="p">)</span>
-</span><span id="Spark-156"><a href="#Spark-156"><span class="linenos">156</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</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="s2">&quot;spark&quot;</span><span class="p">,</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="Spark-157"><a href="#Spark-157"><span class="linenos">157</span></a>
-</span><span id="Spark-158"><a href="#Spark-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">names</span>
-</span><span id="Spark-159"><a href="#Spark-159"><span class="linenos">159</span></a>
-</span><span id="Spark-160"><a href="#Spark-160"><span class="linenos">160</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Spark-161"><a href="#Spark-161"><span class="linenos">161</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark-162"><a href="#Spark-162"><span class="linenos">162</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark-163"><a href="#Spark-163"><span class="linenos">163</span></a> <span class="n">exp</span><span 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;BYTE&quot;</span><span class="p">,</span>
-</span><span id="Spark-164"><a href="#Spark-164"><span class="linenos">164</span></a> <span class="n">exp</span><span 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;SHORT&quot;</span><span class="p">,</span>
-</span><span id="Spark-165"><a href="#Spark-165"><span class="linenos">165</span></a> <span class="n">exp</span><span 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;LONG&quot;</span><span class="p">,</span>
-</span><span id="Spark-166"><a href="#Spark-166"><span class="linenos">166</span></a> <span class="p">}</span>
-</span><span id="Spark-167"><a href="#Spark-167"><span class="linenos">167</span></a>
-</span><span id="Spark-168"><a href="#Spark-168"><span class="linenos">168</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark-169"><a href="#Spark-169"><span class="linenos">169</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark-170"><a href="#Spark-170"><span class="linenos">170</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark-171"><a href="#Spark-171"><span class="linenos">171</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark-172"><a href="#Spark-172"><span class="linenos">172</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark-173"><a href="#Spark-173"><span class="linenos">173</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark-174"><a href="#Spark-174"><span class="linenos">174</span></a> <span class="p">}</span>
-</span><span id="Spark-175"><a href="#Spark-175"><span class="linenos">175</span></a>
-</span><span id="Spark-176"><a href="#Spark-176"><span class="linenos">176</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark-177"><a href="#Spark-177"><span class="linenos">177</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark-178"><a href="#Spark-178"><span class="linenos">178</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
-</span><span id="Spark-179"><a href="#Spark-179"><span class="linenos">179</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;USING </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">&quot;</span><span class="p">,</span>
-</span><span id="Spark-180"><a href="#Spark-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span 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;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
-</span><span id="Spark-181"><a href="#Spark-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
-</span><span id="Spark-182"><a href="#Spark-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
-</span><span id="Spark-183"><a href="#Spark-183"><span class="linenos">183</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">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&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;unit&quot;</span><span class="p">)),</span>
-</span><span id="Spark-184"><a href="#Spark-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
-</span><span id="Spark-185"><a href="#Spark-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
-</span><span id="Spark-186"><a href="#Spark-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Spark-187"><a href="#Spark-187"><span class="linenos">187</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="Spark-188"><a href="#Spark-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
-</span><span id="Spark-189"><a href="#Spark-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
-</span><span id="Spark-190"><a href="#Spark-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
-</span><span id="Spark-191"><a href="#Spark-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">:</span> <span 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">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="Spark-192"><a href="#Spark-192"><span class="linenos">192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Spark-193"><a href="#Spark-193"><span class="linenos">193</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Spark-194"><a href="#Spark-194"><span class="linenos">194</span></a> <span class="p">),</span>
-</span><span id="Spark-195"><a href="#Spark-195"><span class="linenos">195</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="Spark-196"><a href="#Spark-196"><span class="linenos">196</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="Spark-197"><a href="#Spark-197"><span class="linenos">197</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="Spark-198"><a href="#Spark-198"><span class="linenos">198</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="Spark-199"><a href="#Spark-199"><span class="linenos">199</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="Spark-200"><a href="#Spark-200"><span class="linenos">200</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="Spark-201"><a href="#Spark-201"><span class="linenos">201</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="Spark-202"><a href="#Spark-202"><span class="linenos">202</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="Spark-203"><a href="#Spark-203"><span class="linenos">203</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="Spark-204"><a href="#Spark-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_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">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">)&quot;</span><span class="p">,</span>
-</span><span id="Spark-205"><a href="#Spark-205"><span class="linenos">205</span></a> <span class="p">}</span>
-</span><span id="Spark-206"><a href="#Spark-206"><span class="linenos">206</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">ArraySort</span><span class="p">)</span>
-</span><span id="Spark-207"><a href="#Spark-207"><span class="linenos">207</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">ILike</span><span class="p">)</span>
-</span><span id="Spark-208"><a href="#Spark-208"><span class="linenos">208</span></a>
-</span><span id="Spark-209"><a href="#Spark-209"><span class="linenos">209</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark-210"><a href="#Spark-210"><span class="linenos">210</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark-211"><a href="#Spark-211"><span class="linenos">211</span></a>
-</span><span id="Spark-212"><a href="#Spark-212"><span class="linenos">212</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark-213"><a href="#Spark-213"><span class="linenos">213</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">Cast</span><span class="p">)</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">is_type</span><span class="p">(</span>
-</span><span id="Spark-214"><a href="#Spark-214"><span class="linenos">214</span></a> <span class="n">exp</span><span 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><span id="Spark-215"><a href="#Spark-215"><span class="linenos">215</span></a> <span class="p">):</span>
-</span><span id="Spark-216"><a href="#Spark-216"><span class="linenos">216</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
-</span><span id="Spark-217"><a href="#Spark-217"><span class="linenos">217</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
-</span><span id="Spark-218"><a href="#Spark-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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="Spark-219"><a href="#Spark-219"><span class="linenos">219</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;TO_JSON&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="Spark-220"><a href="#Spark-220"><span class="linenos">220</span></a>
-</span><span id="Spark-221"><a href="#Spark-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Spark-222"><a href="#Spark-222"><span class="linenos">222</span></a>
-</span><span id="Spark-223"><a href="#Spark-223"><span class="linenos">223</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Spark-224"><a href="#Spark-224"><span class="linenos">224</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark-37"><a href="#Spark-37"><span class="linenos">37</span></a><span class="k">class</span> <span class="nc">Spark</span><span class="p">(</span><span class="n">Spark2</span><span class="p">):</span>
+</span><span id="Spark-38"><a href="#Spark-38"><span class="linenos">38</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Spark-39"><a href="#Spark-39"><span class="linenos">39</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark-40"><a href="#Spark-40"><span class="linenos">40</span></a> <span class="o">**</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark-41"><a href="#Spark-41"><span class="linenos">41</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="Spark-42"><a href="#Spark-42"><span class="linenos">42</span></a> <span class="p">}</span>
+</span><span id="Spark-43"><a href="#Spark-43"><span class="linenos">43</span></a>
+</span><span id="Spark-44"><a href="#Spark-44"><span class="linenos">44</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Spark-45"><a href="#Spark-45"><span class="linenos">45</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="n">Spark2</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Spark-46"><a href="#Spark-46"><span class="linenos">46</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span>
+</span><span id="Spark-47"><a href="#Spark-47"><span class="linenos">47</span></a>
+</span><span id="Spark-48"><a href="#Spark-48"><span class="linenos">48</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark-49"><a href="#Spark-49"><span class="linenos">49</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="Spark-50"><a href="#Spark-50"><span class="linenos">50</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Spark-51"><a href="#Spark-51"><span class="linenos">51</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;expression&quot;</span><span class="p">)</span>
+</span><span id="Spark-52"><a href="#Spark-52"><span class="linenos">52</span></a>
+</span><span id="Spark-53"><a href="#Spark-53"><span class="linenos">53</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Spark-54"><a href="#Spark-54"><span class="linenos">54</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;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">unit</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="Spark-55"><a href="#Spark-55"><span class="linenos">55</span></a>
+</span><span id="Spark-56"><a href="#Spark-56"><span class="linenos">56</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;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span>
</span></pre></div>
@@ -498,7 +172,11 @@
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
- <div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
+ <div><dt><a href="spark2.html#Spark2">sqlglot.dialects.spark2.Spark2</a></dt>
+ <dd id="Spark.Tokenizer" class="class"><a href="spark2.html#Spark2.Tokenizer">Tokenizer</a></dd>
+
+ </div>
+ <div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
<dd id="Spark.get_or_raise" class="function"><a href="dialect.html#Dialect.get_or_raise">get_or_raise</a></dd>
<dd id="Spark.format_time" class="function"><a href="dialect.html#Dialect.format_time">format_time</a></dd>
<dd id="Spark.parse" class="function"><a href="dialect.html#Dialect.parse">parse</a></dd>
@@ -518,117 +196,17 @@
<div class="attr class">
<span class="def">class</span>
- <span class="name">Spark.Parser</span><wbr>(<span class="base"><a href="hive.html#Hive.Parser">sqlglot.dialects.hive.Hive.Parser</a></span>):
+ <span class="name">Spark.Parser</span><wbr>(<span class="base"><a href="spark2.html#Spark2.Parser">sqlglot.dialects.spark2.Spark2.Parser</a></span>):
<label class="view-source-button" for="Spark.Parser-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Spark.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Parser-54"><a href="#Spark.Parser-54"><span class="linenos"> 54</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Spark.Parser-55"><a href="#Spark.Parser-55"><span class="linenos"> 55</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark.Parser-56"><a href="#Spark.Parser-56"><span class="linenos"> 56</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark.Parser-57"><a href="#Spark.Parser-57"><span class="linenos"> 57</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark.Parser-58"><a href="#Spark.Parser-58"><span class="linenos"> 58</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark.Parser-59"><a href="#Spark.Parser-59"><span class="linenos"> 59</span></a> <span class="s2">&quot;LEFT&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">Substring</span><span class="p">(</span>
-</span><span id="Spark.Parser-60"><a href="#Spark.Parser-60"><span class="linenos"> 60</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="Spark.Parser-61"><a href="#Spark.Parser-61"><span class="linenos"> 61</span></a> <span class="n">start</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">1</span><span class="p">),</span>
-</span><span id="Spark.Parser-62"><a href="#Spark.Parser-62"><span class="linenos"> 62</span></a> <span class="n">length</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="Spark.Parser-63"><a href="#Spark.Parser-63"><span class="linenos"> 63</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-64"><a href="#Spark.Parser-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;SHIFTLEFT&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">BitwiseLeftShift</span><span class="p">(</span>
-</span><span id="Spark.Parser-65"><a href="#Spark.Parser-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="Spark.Parser-66"><a href="#Spark.Parser-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="Spark.Parser-67"><a href="#Spark.Parser-67"><span class="linenos"> 67</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-68"><a href="#Spark.Parser-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;SHIFTRIGHT&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">BitwiseRightShift</span><span class="p">(</span>
-</span><span id="Spark.Parser-69"><a href="#Spark.Parser-69"><span class="linenos"> 69</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="Spark.Parser-70"><a href="#Spark.Parser-70"><span class="linenos"> 70</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="Spark.Parser-71"><a href="#Spark.Parser-71"><span class="linenos"> 71</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-72"><a href="#Spark.Parser-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;RIGHT&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">Substring</span><span class="p">(</span>
-</span><span id="Spark.Parser-73"><a href="#Spark.Parser-73"><span class="linenos"> 73</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="Spark.Parser-74"><a href="#Spark.Parser-74"><span class="linenos"> 74</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
-</span><span id="Spark.Parser-75"><a href="#Spark.Parser-75"><span class="linenos"> 75</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</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="Spark.Parser-76"><a href="#Spark.Parser-76"><span class="linenos"> 76</span></a> <span class="n">expression</span><span class="o">=</span><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">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">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">1</span><span class="p">)),</span>
-</span><span id="Spark.Parser-77"><a href="#Spark.Parser-77"><span class="linenos"> 77</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-78"><a href="#Spark.Parser-78"><span class="linenos"> 78</span></a> <span class="n">length</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="Spark.Parser-79"><a href="#Spark.Parser-79"><span class="linenos"> 79</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-80"><a href="#Spark.Parser-80"><span class="linenos"> 80</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark.Parser-81"><a href="#Spark.Parser-81"><span class="linenos"> 81</span></a> <span class="s2">&quot;BOOLEAN&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">Cast</span><span class="p">(</span>
-</span><span id="Spark.Parser-82"><a href="#Spark.Parser-82"><span class="linenos"> 82</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">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="s2">&quot;boolean&quot;</span><span class="p">)</span>
-</span><span id="Spark.Parser-83"><a href="#Spark.Parser-83"><span class="linenos"> 83</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-84"><a href="#Spark.Parser-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark.Parser-85"><a href="#Spark.Parser-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;INT&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">Cast</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">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="s2">&quot;int&quot;</span><span class="p">)),</span>
-</span><span id="Spark.Parser-86"><a href="#Spark.Parser-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
-</span><span id="Spark.Parser-87"><a href="#Spark.Parser-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;DAYOFWEEK&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">DayOfWeek</span><span class="p">(</span>
-</span><span id="Spark.Parser-88"><a href="#Spark.Parser-88"><span class="linenos"> 88</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark.Parser-89"><a href="#Spark.Parser-89"><span class="linenos"> 89</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-90"><a href="#Spark.Parser-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;DAYOFMONTH&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">DayOfMonth</span><span class="p">(</span>
-</span><span id="Spark.Parser-91"><a href="#Spark.Parser-91"><span class="linenos"> 91</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark.Parser-92"><a href="#Spark.Parser-92"><span class="linenos"> 92</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-93"><a href="#Spark.Parser-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;DAYOFYEAR&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">DayOfYear</span><span class="p">(</span>
-</span><span id="Spark.Parser-94"><a href="#Spark.Parser-94"><span class="linenos"> 94</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark.Parser-95"><a href="#Spark.Parser-95"><span class="linenos"> 95</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-96"><a href="#Spark.Parser-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;WEEKOFYEAR&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">WeekOfYear</span><span class="p">(</span>
-</span><span id="Spark.Parser-97"><a href="#Spark.Parser-97"><span class="linenos"> 97</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark.Parser-98"><a href="#Spark.Parser-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-99"><a href="#Spark.Parser-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATE&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">Cast</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">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="s2">&quot;date&quot;</span><span class="p">)),</span>
-</span><span id="Spark.Parser-100"><a href="#Spark.Parser-100"><span class="linenos">100</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
-</span><span id="Spark.Parser-101"><a href="#Spark.Parser-101"><span class="linenos">101</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Spark.Parser-102"><a href="#Spark.Parser-102"><span class="linenos">102</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="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="Spark.Parser-103"><a href="#Spark.Parser-103"><span class="linenos">103</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-104"><a href="#Spark.Parser-104"><span class="linenos">104</span></a> <span class="s2">&quot;STRING&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">Cast</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">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="s2">&quot;string&quot;</span><span class="p">)),</span>
-</span><span id="Spark.Parser-105"><a href="#Spark.Parser-105"><span class="linenos">105</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">1</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="Spark.Parser-106"><a href="#Spark.Parser-106"><span class="linenos">106</span></a> <span class="s2">&quot;TIMESTAMP&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">Cast</span><span class="p">(</span>
-</span><span id="Spark.Parser-107"><a href="#Spark.Parser-107"><span class="linenos">107</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">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="s2">&quot;timestamp&quot;</span><span class="p">)</span>
-</span><span id="Spark.Parser-108"><a href="#Spark.Parser-108"><span class="linenos">108</span></a> <span class="p">),</span>
-</span><span id="Spark.Parser-109"><a href="#Spark.Parser-109"><span class="linenos">109</span></a> <span class="p">}</span>
-</span><span id="Spark.Parser-110"><a href="#Spark.Parser-110"><span class="linenos">110</span></a>
-</span><span id="Spark.Parser-111"><a href="#Spark.Parser-111"><span class="linenos">111</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark.Parser-112"><a href="#Spark.Parser-112"><span class="linenos">112</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 class="c1"># type: ignore</span>
-</span><span id="Spark.Parser-113"><a href="#Spark.Parser-113"><span class="linenos">113</span></a> <span class="s2">&quot;BROADCAST&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-114"><a href="#Spark.Parser-114"><span class="linenos">114</span></a> <span class="s2">&quot;BROADCASTJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-115"><a href="#Spark.Parser-115"><span class="linenos">115</span></a> <span class="s2">&quot;MAPJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-116"><a href="#Spark.Parser-116"><span class="linenos">116</span></a> <span class="s2">&quot;MERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-117"><a href="#Spark.Parser-117"><span class="linenos">117</span></a> <span class="s2">&quot;SHUFFLEMERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-118"><a href="#Spark.Parser-118"><span class="linenos">118</span></a> <span class="s2">&quot;MERGEJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-119"><a href="#Spark.Parser-119"><span class="linenos">119</span></a> <span class="s2">&quot;SHUFFLE_HASH&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-120"><a href="#Spark.Parser-120"><span class="linenos">120</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
-</span><span id="Spark.Parser-121"><a href="#Spark.Parser-121"><span class="linenos">121</span></a> <span class="p">}</span>
-</span><span id="Spark.Parser-122"><a href="#Spark.Parser-122"><span class="linenos">122</span></a>
-</span><span id="Spark.Parser-123"><a href="#Spark.Parser-123"><span class="linenos">123</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="Spark.Parser-124"><a href="#Spark.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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
-</span><span id="Spark.Parser-125"><a href="#Spark.Parser-125"><span class="linenos">125</span></a>
-</span><span id="Spark.Parser-126"><a href="#Spark.Parser-126"><span class="linenos">126</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">Expression</span><span class="p">]:</span>
-</span><span id="Spark.Parser-127"><a href="#Spark.Parser-127"><span class="linenos">127</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;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Spark.Parser-128"><a href="#Spark.Parser-128"><span class="linenos">128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="Spark.Parser-129"><a href="#Spark.Parser-129"><span class="linenos">129</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><span id="Spark.Parser-130"><a href="#Spark.Parser-130"><span class="linenos">130</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
-</span><span id="Spark.Parser-131"><a href="#Spark.Parser-131"><span class="linenos">131</span></a> <span class="p">)</span>
-</span><span id="Spark.Parser-132"><a href="#Spark.Parser-132"><span class="linenos">132</span></a>
-</span><span id="Spark.Parser-133"><a href="#Spark.Parser-133"><span class="linenos">133</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">pivot_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">-&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="Spark.Parser-134"><a href="#Spark.Parser-134"><span class="linenos">134</span></a> <span class="c1"># Spark doesn&#39;t add a suffix to the pivot columns when there&#39;s a single aggregation</span>
-</span><span id="Spark.Parser-135"><a href="#Spark.Parser-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pivot_columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Spark.Parser-136"><a href="#Spark.Parser-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
-</span><span id="Spark.Parser-137"><a href="#Spark.Parser-137"><span class="linenos">137</span></a>
-</span><span id="Spark.Parser-138"><a href="#Spark.Parser-138"><span class="linenos">138</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Spark.Parser-139"><a href="#Spark.Parser-139"><span class="linenos">139</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">pivot_columns</span><span class="p">:</span>
-</span><span id="Spark.Parser-140"><a href="#Spark.Parser-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="Spark.Parser-141"><a href="#Spark.Parser-141"><span class="linenos">141</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Spark.Parser-142"><a href="#Spark.Parser-142"><span class="linenos">142</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Spark.Parser-143"><a href="#Spark.Parser-143"><span class="linenos">143</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Spark.Parser-144"><a href="#Spark.Parser-144"><span class="linenos">144</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
-</span><span id="Spark.Parser-145"><a href="#Spark.Parser-145"><span class="linenos">145</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
-</span><span id="Spark.Parser-146"><a href="#Spark.Parser-146"><span class="linenos">146</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
-</span><span id="Spark.Parser-147"><a href="#Spark.Parser-147"><span class="linenos">147</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
-</span><span id="Spark.Parser-148"><a href="#Spark.Parser-148"><span class="linenos">148</span></a>
-</span><span id="Spark.Parser-149"><a href="#Spark.Parser-149"><span class="linenos">149</span></a><span class="sd"> Moreover, function names are lowercased in order to mimic Spark&#39;s naming scheme.</span>
-</span><span id="Spark.Parser-150"><a href="#Spark.Parser-150"><span class="linenos">150</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Spark.Parser-151"><a href="#Spark.Parser-151"><span class="linenos">151</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="Spark.Parser-152"><a href="#Spark.Parser-152"><span class="linenos">152</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Spark.Parser-153"><a href="#Spark.Parser-153"><span class="linenos">153</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Spark.Parser-154"><a href="#Spark.Parser-154"><span class="linenos">154</span></a> <span class="k">else</span> <span class="n">node</span>
-</span><span id="Spark.Parser-155"><a href="#Spark.Parser-155"><span class="linenos">155</span></a> <span class="p">)</span>
-</span><span id="Spark.Parser-156"><a href="#Spark.Parser-156"><span class="linenos">156</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</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="s2">&quot;spark&quot;</span><span class="p">,</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="Spark.Parser-157"><a href="#Spark.Parser-157"><span class="linenos">157</span></a>
-</span><span id="Spark.Parser-158"><a href="#Spark.Parser-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="n">names</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Parser-38"><a href="#Spark.Parser-38"><span class="linenos">38</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Spark.Parser-39"><a href="#Spark.Parser-39"><span class="linenos">39</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark.Parser-40"><a href="#Spark.Parser-40"><span class="linenos">40</span></a> <span class="o">**</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark.Parser-41"><a href="#Spark.Parser-41"><span class="linenos">41</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">:</span> <span class="n">_parse_datediff</span><span class="p">,</span>
+</span><span id="Spark.Parser-42"><a href="#Spark.Parser-42"><span class="linenos">42</span></a> <span class="p">}</span>
</span></pre></div>
@@ -679,74 +257,25 @@ Default: "nulls_are_small"</li>
<div class="attr class">
<span class="def">class</span>
- <span class="name">Spark.Generator</span><wbr>(<span class="base"><a href="hive.html#Hive.Generator">sqlglot.dialects.hive.Hive.Generator</a></span>):
+ <span class="name">Spark.Generator</span><wbr>(<span class="base"><a href="spark2.html#Spark2.Generator">sqlglot.dialects.spark2.Spark2.Generator</a></span>):
<label class="view-source-button" for="Spark.Generator-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Spark.Generator"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator-160"><a href="#Spark.Generator-160"><span class="linenos">160</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
-</span><span id="Spark.Generator-161"><a href="#Spark.Generator-161"><span class="linenos">161</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark.Generator-162"><a href="#Spark.Generator-162"><span class="linenos">162</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark.Generator-163"><a href="#Spark.Generator-163"><span class="linenos">163</span></a> <span class="n">exp</span><span 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;BYTE&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-164"><a href="#Spark.Generator-164"><span class="linenos">164</span></a> <span class="n">exp</span><span 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;SHORT&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-165"><a href="#Spark.Generator-165"><span class="linenos">165</span></a> <span class="n">exp</span><span 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;LONG&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-166"><a href="#Spark.Generator-166"><span class="linenos">166</span></a> <span class="p">}</span>
-</span><span id="Spark.Generator-167"><a href="#Spark.Generator-167"><span class="linenos">167</span></a>
-</span><span id="Spark.Generator-168"><a href="#Spark.Generator-168"><span class="linenos">168</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark.Generator-169"><a href="#Spark.Generator-169"><span class="linenos">169</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark.Generator-170"><a href="#Spark.Generator-170"><span class="linenos">170</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark.Generator-171"><a href="#Spark.Generator-171"><span class="linenos">171</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark.Generator-172"><a href="#Spark.Generator-172"><span class="linenos">172</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark.Generator-173"><a href="#Spark.Generator-173"><span class="linenos">173</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">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Spark.Generator-174"><a href="#Spark.Generator-174"><span class="linenos">174</span></a> <span class="p">}</span>
-</span><span id="Spark.Generator-175"><a href="#Spark.Generator-175"><span class="linenos">175</span></a>
-</span><span id="Spark.Generator-176"><a href="#Spark.Generator-176"><span class="linenos">176</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Spark.Generator-177"><a href="#Spark.Generator-177"><span class="linenos">177</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Spark.Generator-178"><a href="#Spark.Generator-178"><span class="linenos">178</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
-</span><span id="Spark.Generator-179"><a href="#Spark.Generator-179"><span class="linenos">179</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;USING </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">&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-180"><a href="#Spark.Generator-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span 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;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-181"><a href="#Spark.Generator-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
-</span><span id="Spark.Generator-182"><a href="#Spark.Generator-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
-</span><span id="Spark.Generator-183"><a href="#Spark.Generator-183"><span class="linenos">183</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">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&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;unit&quot;</span><span class="p">)),</span>
-</span><span id="Spark.Generator-184"><a href="#Spark.Generator-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-185"><a href="#Spark.Generator-185"><span class="linenos">185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
-</span><span id="Spark.Generator-186"><a href="#Spark.Generator-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-187"><a href="#Spark.Generator-187"><span class="linenos">187</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="Spark.Generator-188"><a href="#Spark.Generator-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
-</span><span id="Spark.Generator-189"><a href="#Spark.Generator-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
-</span><span id="Spark.Generator-190"><a href="#Spark.Generator-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
-</span><span id="Spark.Generator-191"><a href="#Spark.Generator-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">:</span> <span 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">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="Spark.Generator-192"><a href="#Spark.Generator-192"><span class="linenos">192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="Spark.Generator-193"><a href="#Spark.Generator-193"><span class="linenos">193</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Spark.Generator-194"><a href="#Spark.Generator-194"><span class="linenos">194</span></a> <span class="p">),</span>
-</span><span id="Spark.Generator-195"><a href="#Spark.Generator-195"><span class="linenos">195</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="Spark.Generator-196"><a href="#Spark.Generator-196"><span class="linenos">196</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="Spark.Generator-197"><a href="#Spark.Generator-197"><span class="linenos">197</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="Spark.Generator-198"><a href="#Spark.Generator-198"><span class="linenos">198</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="Spark.Generator-199"><a href="#Spark.Generator-199"><span class="linenos">199</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="Spark.Generator-200"><a href="#Spark.Generator-200"><span class="linenos">200</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="Spark.Generator-201"><a href="#Spark.Generator-201"><span class="linenos">201</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="Spark.Generator-202"><a href="#Spark.Generator-202"><span class="linenos">202</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="Spark.Generator-203"><a href="#Spark.Generator-203"><span class="linenos">203</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="Spark.Generator-204"><a href="#Spark.Generator-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_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">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">)&quot;</span><span class="p">,</span>
-</span><span id="Spark.Generator-205"><a href="#Spark.Generator-205"><span class="linenos">205</span></a> <span class="p">}</span>
-</span><span id="Spark.Generator-206"><a href="#Spark.Generator-206"><span class="linenos">206</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">ArraySort</span><span class="p">)</span>
-</span><span id="Spark.Generator-207"><a href="#Spark.Generator-207"><span class="linenos">207</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">ILike</span><span class="p">)</span>
-</span><span id="Spark.Generator-208"><a href="#Spark.Generator-208"><span class="linenos">208</span></a>
-</span><span id="Spark.Generator-209"><a href="#Spark.Generator-209"><span class="linenos">209</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark.Generator-210"><a href="#Spark.Generator-210"><span class="linenos">210</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Spark.Generator-211"><a href="#Spark.Generator-211"><span class="linenos">211</span></a>
-</span><span id="Spark.Generator-212"><a href="#Spark.Generator-212"><span class="linenos">212</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark.Generator-213"><a href="#Spark.Generator-213"><span class="linenos">213</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">Cast</span><span class="p">)</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">is_type</span><span class="p">(</span>
-</span><span id="Spark.Generator-214"><a href="#Spark.Generator-214"><span class="linenos">214</span></a> <span class="n">exp</span><span 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><span id="Spark.Generator-215"><a href="#Spark.Generator-215"><span class="linenos">215</span></a> <span class="p">):</span>
-</span><span id="Spark.Generator-216"><a href="#Spark.Generator-216"><span class="linenos">216</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
-</span><span id="Spark.Generator-217"><a href="#Spark.Generator-217"><span class="linenos">217</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
-</span><span id="Spark.Generator-218"><a href="#Spark.Generator-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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="Spark.Generator-219"><a href="#Spark.Generator-219"><span class="linenos">219</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;TO_JSON&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="Spark.Generator-220"><a href="#Spark.Generator-220"><span class="linenos">220</span></a>
-</span><span id="Spark.Generator-221"><a href="#Spark.Generator-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator-44"><a href="#Spark.Generator-44"><span class="linenos">44</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Spark2</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Spark.Generator-45"><a href="#Spark.Generator-45"><span class="linenos">45</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="n">Spark2</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Spark.Generator-46"><a href="#Spark.Generator-46"><span class="linenos">46</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span>
+</span><span id="Spark.Generator-47"><a href="#Spark.Generator-47"><span class="linenos">47</span></a>
+</span><span id="Spark.Generator-48"><a href="#Spark.Generator-48"><span class="linenos">48</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark.Generator-49"><a href="#Spark.Generator-49"><span class="linenos">49</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="Spark.Generator-50"><a href="#Spark.Generator-50"><span class="linenos">50</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Spark.Generator-51"><a href="#Spark.Generator-51"><span class="linenos">51</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;expression&quot;</span><span class="p">)</span>
+</span><span id="Spark.Generator-52"><a href="#Spark.Generator-52"><span class="linenos">52</span></a>
+</span><span id="Spark.Generator-53"><a href="#Spark.Generator-53"><span class="linenos">53</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Spark.Generator-54"><a href="#Spark.Generator-54"><span class="linenos">54</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;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">unit</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="Spark.Generator-55"><a href="#Spark.Generator-55"><span class="linenos">55</span></a>
+</span><span id="Spark.Generator-56"><a href="#Spark.Generator-56"><span class="linenos">56</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;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span>
</span></pre></div>
@@ -794,27 +323,26 @@ Default: True</li>
</div>
- <div id="Spark.Generator.cast_sql" class="classattr">
- <input id="Spark.Generator.cast_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <div id="Spark.Generator.datediff_sql" class="classattr">
+ <input id="Spark.Generator.datediff_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
- <span class="name">cast_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Cast">sqlglot.expressions.Cast</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+ <span class="name">datediff_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#DateDiff">sqlglot.expressions.DateDiff</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
- <label class="view-source-button" for="Spark.Generator.cast_sql-view-source"><span>View Source</span></label>
+ <label class="view-source-button" for="Spark.Generator.datediff_sql-view-source"><span>View Source</span></label>
</div>
- <a class="headerlink" href="#Spark.Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator.cast_sql-212"><a href="#Spark.Generator.cast_sql-212"><span class="linenos">212</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Spark.Generator.cast_sql-213"><a href="#Spark.Generator.cast_sql-213"><span class="linenos">213</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">Cast</span><span class="p">)</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">is_type</span><span class="p">(</span>
-</span><span id="Spark.Generator.cast_sql-214"><a href="#Spark.Generator.cast_sql-214"><span class="linenos">214</span></a> <span class="n">exp</span><span 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><span id="Spark.Generator.cast_sql-215"><a href="#Spark.Generator.cast_sql-215"><span class="linenos">215</span></a> <span class="p">):</span>
-</span><span id="Spark.Generator.cast_sql-216"><a href="#Spark.Generator.cast_sql-216"><span class="linenos">216</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
-</span><span id="Spark.Generator.cast_sql-217"><a href="#Spark.Generator.cast_sql-217"><span class="linenos">217</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
-</span><span id="Spark.Generator.cast_sql-218"><a href="#Spark.Generator.cast_sql-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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="Spark.Generator.cast_sql-219"><a href="#Spark.Generator.cast_sql-219"><span class="linenos">219</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;TO_JSON&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="Spark.Generator.cast_sql-220"><a href="#Spark.Generator.cast_sql-220"><span class="linenos">220</span></a>
-</span><span id="Spark.Generator.cast_sql-221"><a href="#Spark.Generator.cast_sql-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Spark</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</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>
+ <a class="headerlink" href="#Spark.Generator.datediff_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Generator.datediff_sql-48"><a href="#Spark.Generator.datediff_sql-48"><span class="linenos">48</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark.Generator.datediff_sql-49"><a href="#Spark.Generator.datediff_sql-49"><span class="linenos">49</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="Spark.Generator.datediff_sql-50"><a href="#Spark.Generator.datediff_sql-50"><span class="linenos">50</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Spark.Generator.datediff_sql-51"><a href="#Spark.Generator.datediff_sql-51"><span class="linenos">51</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;expression&quot;</span><span class="p">)</span>
+</span><span id="Spark.Generator.datediff_sql-52"><a href="#Spark.Generator.datediff_sql-52"><span class="linenos">52</span></a>
+</span><span id="Spark.Generator.datediff_sql-53"><a href="#Spark.Generator.datediff_sql-53"><span class="linenos">53</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Spark.Generator.datediff_sql-54"><a href="#Spark.Generator.datediff_sql-54"><span class="linenos">54</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;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">unit</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="Spark.Generator.datediff_sql-55"><a href="#Spark.Generator.datediff_sql-55"><span class="linenos">55</span></a>
+</span><span id="Spark.Generator.datediff_sql-56"><a href="#Spark.Generator.datediff_sql-56"><span class="linenos">56</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;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span>
</span></pre></div>
@@ -943,7 +471,7 @@ Default: True</li>
<dd id="Spark.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Spark.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Spark.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Spark.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Spark.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Spark.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Spark.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Spark.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -952,6 +480,7 @@ Default: True</li>
<dd id="Spark.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Spark.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Spark.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Spark.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Spark.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Spark.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Spark.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
@@ -1048,6 +577,10 @@ Default: True</li>
<dd id="Spark.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
</div>
+ <div><dt><a href="spark2.html#Spark2.Generator">sqlglot.dialects.spark2.Spark2.Generator</a></dt>
+ <dd id="Spark.Generator.cast_sql" class="function"><a href="spark2.html#Spark2.Generator.cast_sql">cast_sql</a></dd>
+
+ </div>
<div><dt><a href="hive.html#Hive.Generator">sqlglot.dialects.hive.Hive.Generator</a></dt>
<dd id="Spark.Generator.arrayagg_sql" class="function"><a href="hive.html#Hive.Generator.arrayagg_sql">arrayagg_sql</a></dd>
<dd id="Spark.Generator.with_properties" class="function"><a href="hive.html#Hive.Generator.with_properties">with_properties</a></dd>
@@ -1057,35 +590,6 @@ Default: True</li>
</dl>
</div>
</section>
- <section id="Spark.Tokenizer">
- <input id="Spark.Tokenizer-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr class">
-
- <span class="def">class</span>
- <span class="name">Spark.Tokenizer</span><wbr>(<span class="base"><a href="hive.html#Hive.Tokenizer">sqlglot.dialects.hive.Hive.Tokenizer</a></span>):
-
- <label class="view-source-button" for="Spark.Tokenizer-view-source"><span>View Source</span></label>
-
- </div>
- <a class="headerlink" href="#Spark.Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Spark.Tokenizer-223"><a href="#Spark.Tokenizer-223"><span class="linenos">223</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
-</span><span id="Spark.Tokenizer-224"><a href="#Spark.Tokenizer-224"><span class="linenos">224</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></pre></div>
-
-
-
-
- <div class="inherited">
- <h5>Inherited Members</h5>
- <dl>
- <div><dt><a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a></dt>
- <dd id="Spark.Tokenizer.reset" class="function"><a href="../tokens.html#Tokenizer.reset">reset</a></dd>
- <dd id="Spark.Tokenizer.tokenize" class="function"><a href="../tokens.html#Tokenizer.tokenize">tokenize</a></dd>
-
- </div>
- </dl>
- </div>
- </section>
</main>
<script>
function escapeHTML(html) {
diff --git a/docs/sqlglot/dialects/spark2.html b/docs/sqlglot/dialects/spark2.html
new file mode 100644
index 0000000..ade8161
--- /dev/null
+++ b/docs/sqlglot/dialects/spark2.html
@@ -0,0 +1,1271 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="generator" content="pdoc 13.1.1"/>
+ <title>sqlglot.dialects.spark2 API documentation</title>
+
+ <style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
+ <style>/*! syntax-highlighting.css */pre{line-height:125%;}span.linenos{color:inherit; background-color:transparent; padding-left:5px; padding-right:20px;}.pdoc-code .hll{background-color:#ffffcc}.pdoc-code{background:#f8f8f8;}.pdoc-code .c{color:#3D7B7B; font-style:italic}.pdoc-code .err{border:1px solid #FF0000}.pdoc-code .k{color:#008000; font-weight:bold}.pdoc-code .o{color:#666666}.pdoc-code .ch{color:#3D7B7B; font-style:italic}.pdoc-code .cm{color:#3D7B7B; font-style:italic}.pdoc-code .cp{color:#9C6500}.pdoc-code .cpf{color:#3D7B7B; font-style:italic}.pdoc-code .c1{color:#3D7B7B; font-style:italic}.pdoc-code .cs{color:#3D7B7B; font-style:italic}.pdoc-code .gd{color:#A00000}.pdoc-code .ge{font-style:italic}.pdoc-code .gr{color:#E40000}.pdoc-code .gh{color:#000080; font-weight:bold}.pdoc-code .gi{color:#008400}.pdoc-code .go{color:#717171}.pdoc-code .gp{color:#000080; font-weight:bold}.pdoc-code .gs{font-weight:bold}.pdoc-code .gu{color:#800080; font-weight:bold}.pdoc-code .gt{color:#0044DD}.pdoc-code .kc{color:#008000; font-weight:bold}.pdoc-code .kd{color:#008000; font-weight:bold}.pdoc-code .kn{color:#008000; font-weight:bold}.pdoc-code .kp{color:#008000}.pdoc-code .kr{color:#008000; font-weight:bold}.pdoc-code .kt{color:#B00040}.pdoc-code .m{color:#666666}.pdoc-code .s{color:#BA2121}.pdoc-code .na{color:#687822}.pdoc-code .nb{color:#008000}.pdoc-code .nc{color:#0000FF; font-weight:bold}.pdoc-code .no{color:#880000}.pdoc-code .nd{color:#AA22FF}.pdoc-code .ni{color:#717171; font-weight:bold}.pdoc-code .ne{color:#CB3F38; font-weight:bold}.pdoc-code .nf{color:#0000FF}.pdoc-code .nl{color:#767600}.pdoc-code .nn{color:#0000FF; font-weight:bold}.pdoc-code .nt{color:#008000; font-weight:bold}.pdoc-code .nv{color:#19177C}.pdoc-code .ow{color:#AA22FF; font-weight:bold}.pdoc-code .w{color:#bbbbbb}.pdoc-code .mb{color:#666666}.pdoc-code .mf{color:#666666}.pdoc-code .mh{color:#666666}.pdoc-code .mi{color:#666666}.pdoc-code .mo{color:#666666}.pdoc-code .sa{color:#BA2121}.pdoc-code .sb{color:#BA2121}.pdoc-code .sc{color:#BA2121}.pdoc-code .dl{color:#BA2121}.pdoc-code .sd{color:#BA2121; font-style:italic}.pdoc-code .s2{color:#BA2121}.pdoc-code .se{color:#AA5D1F; font-weight:bold}.pdoc-code .sh{color:#BA2121}.pdoc-code .si{color:#A45A77; font-weight:bold}.pdoc-code .sx{color:#008000}.pdoc-code .sr{color:#A45A77}.pdoc-code .s1{color:#BA2121}.pdoc-code .ss{color:#19177C}.pdoc-code .bp{color:#008000}.pdoc-code .fm{color:#0000FF}.pdoc-code .vc{color:#19177C}.pdoc-code .vg{color:#19177C}.pdoc-code .vi{color:#19177C}.pdoc-code .vm{color:#19177C}.pdoc-code .il{color:#666666}</style>
+ <style>/*! theme.css */:root{--pdoc-background:#fff;}.pdoc{--text:#212529;--muted:#6c757d;--link:#3660a5;--link-hover:#1659c5;--code:#f8f8f8;--active:#fff598;--accent:#eee;--accent2:#c1c1c1;--nav-hover:rgba(255, 255, 255, 0.5);--name:#0066BB;--def:#008800;--annotation:#007020;}</style>
+ <style>/*! layout.css */html, body{width:100%;height:100%;}html, main{scroll-behavior:smooth;}body{background-color:var(--pdoc-background);}@media (max-width:769px){#navtoggle{cursor:pointer;position:absolute;width:50px;height:40px;top:1rem;right:1rem;border-color:var(--text);color:var(--text);display:flex;opacity:0.8;z-index:999;}#navtoggle:hover{opacity:1;}#togglestate + div{display:none;}#togglestate:checked + div{display:inherit;}main, header{padding:2rem 3vw;}header + main{margin-top:-3rem;}.git-button{display:none !important;}nav input[type="search"]{max-width:77%;}nav input[type="search"]:first-child{margin-top:-6px;}nav input[type="search"]:valid ~ *{display:none !important;}}@media (min-width:770px){:root{--sidebar-width:clamp(12.5rem, 28vw, 22rem);}nav{position:fixed;overflow:auto;height:100vh;width:var(--sidebar-width);}main, header{padding:3rem 2rem 3rem calc(var(--sidebar-width) + 3rem);width:calc(54rem + var(--sidebar-width));max-width:100%;}header + main{margin-top:-4rem;}#navtoggle{display:none;}}#togglestate{position:absolute;height:0;opacity:0;}nav.pdoc{--pad:clamp(0.5rem, 2vw, 1.75rem);--indent:1.5rem;background-color:var(--accent);border-right:1px solid var(--accent2);box-shadow:0 0 20px rgba(50, 50, 50, .2) inset;padding:0 0 0 var(--pad);overflow-wrap:anywhere;scrollbar-width:thin; scrollbar-color:var(--accent2) transparent }nav.pdoc::-webkit-scrollbar{width:.4rem; }nav.pdoc::-webkit-scrollbar-thumb{background-color:var(--accent2); }nav.pdoc > div{padding:var(--pad) 0;}nav.pdoc .module-list-button{display:inline-flex;align-items:center;color:var(--text);border-color:var(--muted);margin-bottom:1rem;}nav.pdoc .module-list-button:hover{border-color:var(--text);}nav.pdoc input[type=search]{display:block;outline-offset:0;width:calc(100% - var(--pad));}nav.pdoc .logo{max-width:calc(100% - var(--pad));max-height:35vh;display:block;margin:0 auto 1rem;transform:translate(calc(-.5 * var(--pad)), 0);}nav.pdoc ul{list-style:none;padding-left:0;}nav.pdoc > div > ul{margin-left:calc(0px - var(--pad));}nav.pdoc li a{padding:.2rem 0 .2rem calc(var(--pad) + var(--indent));}nav.pdoc > div > ul > li > a{padding-left:var(--pad);}nav.pdoc li{transition:all 100ms;}nav.pdoc li:hover{background-color:var(--nav-hover);}nav.pdoc a, nav.pdoc a:hover{color:var(--text);}nav.pdoc a{display:block;}nav.pdoc > h2:first-of-type{margin-top:1.5rem;}nav.pdoc .class:before{content:"class ";color:var(--muted);}nav.pdoc .function:after{content:"()";color:var(--muted);}nav.pdoc footer:before{content:"";display:block;width:calc(100% - var(--pad));border-top:solid var(--accent2) 1px;margin-top:1.5rem;padding-top:.5rem;}nav.pdoc footer{font-size:small;}</style>
+ <style>/*! content.css */.pdoc{color:var(--text);box-sizing:border-box;line-height:1.5;background:none;}.pdoc .pdoc-button{cursor:pointer;display:inline-block;border:solid black 1px;border-radius:2px;font-size:.75rem;padding:calc(0.5em - 1px) 1em;transition:100ms all;}.pdoc .pdoc-alert{padding:1rem 1rem 1rem calc(1.5rem + 24px);border:1px solid transparent;border-radius:.25rem;background-repeat:no-repeat;background-position:1rem center;margin-bottom:1rem;}.pdoc .pdoc-alert > *:last-child{margin-bottom:0;}.pdoc .pdoc-alert-note {color:#084298;background-color:#cfe2ff;border-color:#b6d4fe;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23084298%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8%2016A8%208%200%201%200%208%200a8%208%200%200%200%200%2016zm.93-9.412-1%204.705c-.07.34.029.533.304.533.194%200%20.487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703%200-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381%202.29-.287zM8%205.5a1%201%200%201%201%200-2%201%201%200%200%201%200%202z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23664d03%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8.982%201.566a1.13%201.13%200%200%200-1.96%200L.165%2013.233c-.457.778.091%201.767.98%201.767h13.713c.889%200%201.438-.99.98-1.767L8.982%201.566zM8%205c.535%200%20.954.462.9.995l-.35%203.507a.552.552%200%200%201-1.1%200L7.1%205.995A.905.905%200%200%201%208%205zm.002%206a1%201%200%201%201%200%202%201%201%200%200%201%200-2z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23842029%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M5.52.359A.5.5%200%200%201%206%200h4a.5.5%200%200%201%20.474.658L8.694%206H12.5a.5.5%200%200%201%20.395.807l-7%209a.5.5%200%200%201-.873-.454L6.823%209.5H3.5a.5.5%200%200%201-.48-.641l2.5-8.5z%22/%3E%3C/svg%3E");}.pdoc .visually-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important;}.pdoc h1, .pdoc h2, .pdoc h3{font-weight:300;margin:.3em 0;padding:.2em 0;}.pdoc > section:not(.module-info) h1{font-size:1.5rem;font-weight:500;}.pdoc > section:not(.module-info) h2{font-size:1.4rem;font-weight:500;}.pdoc > section:not(.module-info) h3{font-size:1.3rem;font-weight:500;}.pdoc > section:not(.module-info) h4{font-size:1.2rem;}.pdoc > section:not(.module-info) h5{font-size:1.1rem;}.pdoc a{text-decoration:none;color:var(--link);}.pdoc a:hover{color:var(--link-hover);}.pdoc blockquote{margin-left:2rem;}.pdoc pre{border-top:1px solid var(--accent2);border-bottom:1px solid var(--accent2);margin-top:0;margin-bottom:1em;padding:.5rem 0 .5rem .5rem;overflow-x:auto;background-color:var(--code);}.pdoc code{color:var(--text);padding:.2em .4em;margin:0;font-size:85%;background-color:var(--code);border-radius:6px;}.pdoc a > code{color:inherit;}.pdoc pre > code{display:inline-block;font-size:inherit;background:none;border:none;padding:0;}.pdoc > section:not(.module-info){margin-bottom:1.5rem;}.pdoc .modulename{margin-top:0;font-weight:bold;}.pdoc .modulename a{color:var(--link);transition:100ms all;}.pdoc .git-button{float:right;border:solid var(--link) 1px;}.pdoc .git-button:hover{background-color:var(--link);color:var(--pdoc-background);}.view-source-toggle-state,.view-source-toggle-state ~ .pdoc-code{display:none;}.view-source-toggle-state:checked ~ .pdoc-code{display:block;}.view-source-button{display:inline-block;float:right;font-size:.75rem;line-height:1.5rem;color:var(--muted);padding:0 .4rem 0 1.3rem;cursor:pointer;text-indent:-2px;}.view-source-button > span{visibility:hidden;}.module-info .view-source-button{float:none;display:flex;justify-content:flex-end;margin:-1.2rem .4rem -.2rem 0;}.view-source-button::before{position:absolute;content:"View Source";display:list-item;list-style-type:disclosure-closed;}.view-source-toggle-state:checked ~ .attr .view-source-button::before,.view-source-toggle-state:checked ~ .view-source-button::before{list-style-type:disclosure-open;}.pdoc .docstring{margin-bottom:1.5rem;}.pdoc section:not(.module-info) .docstring{margin-left:clamp(0rem, 5vw - 2rem, 1rem);}.pdoc .docstring .pdoc-code{margin-left:1em;margin-right:1em;}.pdoc h1:target,.pdoc h2:target,.pdoc h3:target,.pdoc h4:target,.pdoc h5:target,.pdoc h6:target,.pdoc .pdoc-code > pre > span:target{background-color:var(--active);box-shadow:-1rem 0 0 0 var(--active);}.pdoc .pdoc-code > pre > span:target{display:block;}.pdoc div:target > .attr,.pdoc section:target > .attr,.pdoc dd:target > a{background-color:var(--active);}.pdoc *{scroll-margin:2rem;}.pdoc .pdoc-code .linenos{user-select:none;}.pdoc .attr:hover{filter:contrast(0.95);}.pdoc section, .pdoc .classattr{position:relative;}.pdoc .headerlink{--width:clamp(1rem, 3vw, 2rem);position:absolute;top:0;left:calc(0rem - var(--width));transition:all 100ms ease-in-out;opacity:0;}.pdoc .headerlink::before{content:"#";display:block;text-align:center;width:var(--width);height:2.3rem;line-height:2.3rem;font-size:1.5rem;}.pdoc .attr:hover ~ .headerlink,.pdoc *:target > .headerlink,.pdoc .headerlink:hover{opacity:1;}.pdoc .attr{display:block;margin:.5rem 0 .5rem;padding:.4rem .4rem .4rem 1rem;background-color:var(--accent);overflow-x:auto;}.pdoc .classattr{margin-left:2rem;}.pdoc .name{color:var(--name);font-weight:bold;}.pdoc .def{color:var(--def);font-weight:bold;}.pdoc .signature{background-color:transparent;}.pdoc .param, .pdoc .return-annotation{white-space:pre;}.pdoc .signature.multiline .param{display:block;}.pdoc .signature.condensed .param{display:inline-block;}.pdoc .annotation{color:var(--annotation);}.pdoc .view-value-toggle-state,.pdoc .view-value-toggle-state ~ .default_value{display:none;}.pdoc .view-value-toggle-state:checked ~ .default_value{display:inherit;}.pdoc .view-value-button{font-size:.5rem;vertical-align:middle;border-style:dashed;margin-top:-0.1rem;}.pdoc .view-value-button:hover{background:white;}.pdoc .view-value-button::before{content:"show";text-align:center;width:2.2em;display:inline-block;}.pdoc .view-value-toggle-state:checked ~ .view-value-button::before{content:"hide";}.pdoc .inherited{margin-left:2rem;}.pdoc .inherited dt{font-weight:700;}.pdoc .inherited dt, .pdoc .inherited dd{display:inline;margin-left:0;margin-bottom:.5rem;}.pdoc .inherited dd:not(:last-child):after{content:", ";}.pdoc .inherited .class:before{content:"class ";}.pdoc .inherited .function a:after{content:"()";}.pdoc .search-result .docstring{overflow:auto;max-height:25vh;}.pdoc .search-result.focused > .attr{background-color:var(--active);}.pdoc .attribution{margin-top:2rem;display:block;opacity:0.5;transition:all 200ms;filter:grayscale(100%);}.pdoc .attribution:hover{opacity:1;filter:grayscale(0%);}.pdoc .attribution img{margin-left:5px;height:35px;vertical-align:middle;width:70px;transition:all 200ms;}.pdoc table{display:block;width:max-content;max-width:100%;overflow:auto;margin-bottom:1rem;}.pdoc table th{font-weight:600;}.pdoc table th, .pdoc table td{padding:6px 13px;border:1px solid var(--accent2);}</style>
+ <style>/*! custom.css */</style></head>
+<body>
+ <nav class="pdoc">
+ <label id="navtoggle" for="togglestate" class="pdoc-button"><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke-linecap='round' stroke="currentColor" stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg></label>
+ <input id="togglestate" type="checkbox" aria-hidden="true" tabindex="-1">
+ <div> <a class="pdoc-button module-list-button" href="../dialects.html">
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-in-left" viewBox="0 0 16 16">
+ <path fill-rule="evenodd" d="M10 3.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 1 0v2A1.5 1.5 0 0 1 9.5 14h-8A1.5 1.5 0 0 1 0 12.5v-9A1.5 1.5 0 0 1 1.5 2h8A1.5 1.5 0 0 1 11 3.5v2a.5.5 0 0 1-1 0v-2z"/>
+ <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
+</svg> &nbsp;sqlglot.dialects</a>
+
+
+ <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
+ pattern=".+" required>
+
+
+
+ <h2>API Documentation</h2>
+ <ul class="memberlist">
+ <li>
+ <a class="class" href="#Spark2">Spark2</a>
+ <ul class="memberlist">
+ <li>
+ <a class="class" href="#Spark2.Parser">Spark2.Parser</a>
+ <ul class="memberlist">
+ </ul>
+
+ </li>
+ <li>
+ <a class="class" href="#Spark2.Generator">Spark2.Generator</a>
+ <ul class="memberlist">
+ <li>
+ <a class="function" href="#Spark2.Generator.cast_sql">cast_sql</a>
+ </li>
+ </ul>
+
+ </li>
+ <li>
+ <a class="class" href="#Spark2.Tokenizer">Spark2.Tokenizer</a>
+ <ul class="memberlist">
+ </ul>
+
+ </li>
+ </ul>
+
+ </li>
+ </ul>
+
+
+ <footer>Copyright (c) 2023 Toby Mao</footer>
+
+ <a class="attribution" title="pdoc: Python API documentation generator" href="https://pdoc.dev" target="_blank">
+ built with <span class="visually-hidden">pdoc</span><img
+ alt="pdoc logo"
+ src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20role%3D%22img%22%20aria-label%3D%22pdoc%20logo%22%20width%3D%22300%22%20height%3D%22150%22%20viewBox%3D%22-1%200%2060%2030%22%3E%3Ctitle%3Epdoc%3C/title%3E%3Cpath%20d%3D%22M29.621%2021.293c-.011-.273-.214-.475-.511-.481a.5.5%200%200%200-.489.503l-.044%201.393c-.097.551-.695%201.215-1.566%201.704-.577.428-1.306.486-2.193.182-1.426-.617-2.467-1.654-3.304-2.487l-.173-.172a3.43%203.43%200%200%200-.365-.306.49.49%200%200%200-.286-.196c-1.718-1.06-4.931-1.47-7.353.191l-.219.15c-1.707%201.187-3.413%202.131-4.328%201.03-.02-.027-.49-.685-.141-1.763.233-.721.546-2.408.772-4.076.042-.09.067-.187.046-.288.166-1.347.277-2.625.241-3.351%201.378-1.008%202.271-2.586%202.271-4.362%200-.976-.272-1.935-.788-2.774-.057-.094-.122-.18-.184-.268.033-.167.052-.339.052-.516%200-1.477-1.202-2.679-2.679-2.679-.791%200-1.496.352-1.987.9a6.3%206.3%200%200%200-1.001.029c-.492-.564-1.207-.929-2.012-.929-1.477%200-2.679%201.202-2.679%202.679A2.65%202.65%200%200%200%20.97%206.554c-.383.747-.595%201.572-.595%202.41%200%202.311%201.507%204.29%203.635%205.107-.037.699-.147%202.27-.423%203.294l-.137.461c-.622%202.042-2.515%208.257%201.727%2010.643%201.614.908%203.06%201.248%204.317%201.248%202.665%200%204.492-1.524%205.322-2.401%201.476-1.559%202.886-1.854%206.491.82%201.877%201.393%203.514%201.753%204.861%201.068%202.223-1.713%202.811-3.867%203.399-6.374.077-.846.056-1.469.054-1.537zm-4.835%204.313c-.054.305-.156.586-.242.629-.034-.007-.131-.022-.307-.157-.145-.111-.314-.478-.456-.908.221.121.432.25.675.355.115.039.219.051.33.081zm-2.251-1.238c-.05.33-.158.648-.252.694-.022.001-.125-.018-.307-.157-.217-.166-.488-.906-.639-1.573.358.344.754.693%201.198%201.036zm-3.887-2.337c-.006-.116-.018-.231-.041-.342.635.145%201.189.368%201.599.625.097.231.166.481.174.642-.03.049-.055.101-.067.158-.046.013-.128.026-.298.004-.278-.037-.901-.57-1.367-1.087zm-1.127-.497c.116.306.176.625.12.71-.019.014-.117.045-.345.016-.206-.027-.604-.332-.986-.695.41-.051.816-.056%201.211-.031zm-4.535%201.535c.209.22.379.47.358.598-.006.041-.088.138-.351.234-.144.055-.539-.063-.979-.259a11.66%2011.66%200%200%200%20.972-.573zm.983-.664c.359-.237.738-.418%201.126-.554.25.237.479.548.457.694-.006.042-.087.138-.351.235-.174.064-.694-.105-1.232-.375zm-3.381%201.794c-.022.145-.061.29-.149.401-.133.166-.358.248-.69.251h-.002c-.133%200-.306-.26-.45-.621.417.091.854.07%201.291-.031zm-2.066-8.077a4.78%204.78%200%200%201-.775-.584c.172-.115.505-.254.88-.378l-.105.962zm-.331%202.302a10.32%2010.32%200%200%201-.828-.502c.202-.143.576-.328.984-.49l-.156.992zm-.45%202.157l-.701-.403c.214-.115.536-.249.891-.376a11.57%2011.57%200%200%201-.19.779zm-.181%201.716c.064.398.194.702.298.893-.194-.051-.435-.162-.736-.398.061-.119.224-.3.438-.495zM8.87%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zm-.735-.389a1.15%201.15%200%200%200-.314.783%201.16%201.16%200%200%200%201.162%201.162c.457%200%20.842-.27%201.032-.653.026.117.042.238.042.362a1.68%201.68%200%200%201-1.679%201.679%201.68%201.68%200%200%201-1.679-1.679c0-.843.626-1.535%201.436-1.654zM5.059%205.406A1.68%201.68%200%200%201%203.38%207.085a1.68%201.68%200%200%201-1.679-1.679c0-.037.009-.072.011-.109.21.3.541.508.935.508a1.16%201.16%200%200%200%201.162-1.162%201.14%201.14%200%200%200-.474-.912c.015%200%20.03-.005.045-.005.926.001%201.679.754%201.679%201.68zM3.198%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zM1.375%208.964c0-.52.103-1.035.288-1.52.466.394%201.06.64%201.717.64%201.144%200%202.116-.725%202.499-1.738.383%201.012%201.355%201.738%202.499%201.738.867%200%201.631-.421%202.121-1.062.307.605.478%201.267.478%201.942%200%202.486-2.153%204.51-4.801%204.51s-4.801-2.023-4.801-4.51zm24.342%2019.349c-.985.498-2.267.168-3.813-.979-3.073-2.281-5.453-3.199-7.813-.705-1.315%201.391-4.163%203.365-8.423.97-3.174-1.786-2.239-6.266-1.261-9.479l.146-.492c.276-1.02.395-2.457.444-3.268a6.11%206.11%200%200%200%201.18.115%206.01%206.01%200%200%200%202.536-.562l-.006.175c-.802.215-1.848.612-2.021%201.25-.079.295.021.601.274.837.219.203.415.364.598.501-.667.304-1.243.698-1.311%201.179-.02.144-.022.507.393.787.213.144.395.26.564.365-1.285.521-1.361.96-1.381%201.126-.018.142-.011.496.427.746l.854.489c-.473.389-.971.914-.999%201.429-.018.278.095.532.316.713.675.556%201.231.721%201.653.721.059%200%20.104-.014.158-.02.207.707.641%201.64%201.513%201.64h.013c.8-.008%201.236-.345%201.462-.626.173-.216.268-.457.325-.692.424.195.93.374%201.372.374.151%200%20.294-.021.423-.068.732-.27.944-.704.993-1.021.009-.061.003-.119.002-.179.266.086.538.147.789.147.15%200%20.294-.021.423-.069.542-.2.797-.489.914-.754.237.147.478.258.704.288.106.014.205.021.296.021.356%200%20.595-.101.767-.229.438.435%201.094.992%201.656%201.067.106.014.205.021.296.021a1.56%201.56%200%200%200%20.323-.035c.17.575.453%201.289.866%201.605.358.273.665.362.914.362a.99.99%200%200%200%20.421-.093%201.03%201.03%200%200%200%20.245-.164c.168.428.39.846.68%201.068.358.273.665.362.913.362a.99.99%200%200%200%20.421-.093c.317-.148.512-.448.639-.762.251.157.495.257.726.257.127%200%20.25-.024.37-.071.427-.17.706-.617.841-1.314.022-.015.047-.022.068-.038.067-.051.133-.104.196-.159-.443%201.486-1.107%202.761-2.086%203.257zM8.66%209.925a.5.5%200%201%200-1%200c0%20.653-.818%201.205-1.787%201.205s-1.787-.552-1.787-1.205a.5.5%200%201%200-1%200c0%201.216%201.25%202.205%202.787%202.205s2.787-.989%202.787-2.205zm4.4%2015.965l-.208.097c-2.661%201.258-4.708%201.436-6.086.527-1.542-1.017-1.88-3.19-1.844-4.198a.4.4%200%200%200-.385-.414c-.242-.029-.406.164-.414.385-.046%201.249.367%203.686%202.202%204.896.708.467%201.547.7%202.51.7%201.248%200%202.706-.392%204.362-1.174l.185-.086a.4.4%200%200%200%20.205-.527c-.089-.204-.326-.291-.527-.206zM9.547%202.292c.093.077.205.114.317.114a.5.5%200%200%200%20.318-.886L8.817.397a.5.5%200%200%200-.703.068.5.5%200%200%200%20.069.703l1.364%201.124zm-7.661-.065c.086%200%20.173-.022.253-.068l1.523-.893a.5.5%200%200%200-.506-.863l-1.523.892a.5.5%200%200%200-.179.685c.094.158.261.247.432.247z%22%20transform%3D%22matrix%28-1%200%200%201%2058%200%29%22%20fill%3D%22%233bb300%22/%3E%3Cpath%20d%3D%22M.3%2021.86V10.18q0-.46.02-.68.04-.22.18-.5.28-.54%201.34-.54%201.06%200%201.42.28.38.26.44.78.76-1.04%202.38-1.04%201.64%200%203.1%201.54%201.46%201.54%201.46%203.58%200%202.04-1.46%203.58-1.44%201.54-3.08%201.54-1.64%200-2.38-.92v4.04q0%20.46-.04.68-.02.22-.18.5-.14.3-.5.42-.36.12-.98.12-.62%200-1-.12-.36-.12-.52-.4-.14-.28-.18-.5-.02-.22-.02-.68zm3.96-9.42q-.46.54-.46%201.18%200%20.64.46%201.18.48.52%201.2.52.74%200%201.24-.52.52-.52.52-1.18%200-.66-.48-1.18-.48-.54-1.26-.54-.76%200-1.22.54zm14.741-8.36q.16-.3.54-.42.38-.12%201-.12.64%200%201.02.12.38.12.52.42.16.3.18.54.04.22.04.68v11.94q0%20.46-.04.7-.02.22-.18.5-.3.54-1.7.54-1.38%200-1.54-.98-.84.96-2.34.96-1.8%200-3.28-1.56-1.48-1.58-1.48-3.66%200-2.1%201.48-3.68%201.5-1.58%203.28-1.58%201.48%200%202.3%201v-4.2q0-.46.02-.68.04-.24.18-.52zm-3.24%2010.86q.52.54%201.26.54.74%200%201.22-.54.5-.54.5-1.18%200-.66-.48-1.22-.46-.56-1.26-.56-.8%200-1.28.56-.48.54-.48%201.2%200%20.66.52%201.2zm7.833-1.2q0-2.4%201.68-3.96%201.68-1.56%203.84-1.56%202.16%200%203.82%201.56%201.66%201.54%201.66%203.94%200%201.66-.86%202.96-.86%201.28-2.1%201.9-1.22.6-2.54.6-1.32%200-2.56-.64-1.24-.66-2.1-1.92-.84-1.28-.84-2.88zm4.18%201.44q.64.48%201.3.48.66%200%201.32-.5.66-.5.66-1.48%200-.98-.62-1.46-.62-.48-1.34-.48-.72%200-1.34.5-.62.5-.62%201.48%200%20.96.64%201.46zm11.412-1.44q0%20.84.56%201.32.56.46%201.18.46.64%200%201.18-.36.56-.38.9-.38.6%200%201.46%201.06.46.58.46%201.04%200%20.76-1.1%201.42-1.14.8-2.8.8-1.86%200-3.58-1.34-.82-.64-1.34-1.7-.52-1.08-.52-2.36%200-1.3.52-2.34.52-1.06%201.34-1.7%201.66-1.32%203.54-1.32.76%200%201.48.22.72.2%201.06.4l.32.2q.36.24.56.38.52.4.52.92%200%20.5-.42%201.14-.72%201.1-1.38%201.1-.38%200-1.08-.44-.36-.34-1.04-.34-.66%200-1.24.48-.58.48-.58%201.34z%22%20fill%3D%22green%22/%3E%3C/svg%3E"/>
+ </a>
+</div>
+ </nav>
+ <main class="pdoc">
+ <section class="module-info">
+ <a class="pdoc-button git-button" href="https://github.com/tobymao/sqlglot/tree/main/sqlglot/dialects/spark2.py">Edit on GitHub</a>
+ <h1 class="modulename">
+<a href="./../../sqlglot.html">sqlglot</a><wbr>.<a href="./../dialects.html">dialects</a><wbr>.spark2 </h1>
+
+
+ <input id="mod-spark2-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+
+ <label class="view-source-button" for="mod-spark2-view-source"><span>View Source</span></label>
+
+ <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
+</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">parser</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">create_with_partitions_sql</span><span class="p">,</span> <span class="n">rename_func</span><span class="p">,</span> <span class="n">trim_sql</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.hive</span> <span class="kn">import</span> <span class="n">Hive</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot.helper</span> <span class="kn">import</span> <span class="n">seq_get</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
+</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</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">Hive</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">Create</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">kind</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;kind&quot;</span><span class="p">]</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;properties&quot;</span><span class="p">)</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;TABLE&quot;</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">)</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="k">for</span> <span class="n">prop</span> <span class="ow">in</span> <span class="p">(</span><span class="n">properties</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="p">[])</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="p">):</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CREATE TEMPORARY VIEW </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="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">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><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="k">return</span> <span class="n">create_with_partitions_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-21"><a href="#L-21"><span class="linenos"> 21</span></a>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="k">def</span> <span class="nf">_map_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Hive</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">Map</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">keys</span> <span class="o">=</span> <span 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">args</span><span class="p">[</span><span class="s2">&quot;keys&quot;</span><span class="p">])</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="n">values</span> <span class="o">=</span> <span 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">args</span><span class="p">[</span><span class="s2">&quot;values&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="sa">f</span><span class="s2">&quot;MAP_FROM_ARRAYS(</span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">values</span><span class="si">}</span><span class="s2">)&quot;</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">_parse_as_cast</span><span class="p">(</span><span class="n">to_type</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">t</span><span class="o">.</span><span class="n">Sequence</span><span 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-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="k">return</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">Cast</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">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_type</span><span class="p">))</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><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="k">def</span> <span class="nf">_str_to_date</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Hive</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">StrToDate</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-35"><a href="#L-35"><span class="linenos"> 35</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-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="k">if</span> <span class="n">time_format</span> <span class="o">==</span> <span class="n">Hive</span><span class="o">.</span><span class="n">date_format</span><span class="p">:</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TO_DATE(</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">time_format</span><span class="si">}</span><span class="s2">)&quot;</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">_unix_to_time_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Hive</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">UnixToTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">scale</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;scale&quot;</span><span class="p">)</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">timestamp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="ow">is</span> <span class="kc">None</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="sa">f</span><span class="s2">&quot;CAST(FROM_UNIXTIME(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">) AS TIMESTAMP)&quot;</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">SECONDS</span><span class="p">:</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TIMESTAMP_SECONDS(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">MILLIS</span><span class="p">:</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TIMESTAMP_MILLIS(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="k">if</span> <span class="n">scale</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="o">.</span><span class="n">MICROS</span><span class="p">:</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TIMESTAMP_MICROS(</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Improper scale for timestamp&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><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a><span class="k">class</span> <span class="nc">Spark2</span><span class="p">(</span><span class="n">Hive</span><span class="p">):</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;LEFT&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">Substring</span><span class="p">(</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</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-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">start</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">1</span><span class="p">),</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">length</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-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="p">),</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;SHIFTLEFT&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">BitwiseLeftShift</span><span class="p">(</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</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-69"><a href="#L-69"><span class="linenos"> 69</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-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="p">),</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;SHIFTRIGHT&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">BitwiseRightShift</span><span class="p">(</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</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-73"><a href="#L-73"><span class="linenos"> 73</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-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="p">),</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="s2">&quot;RIGHT&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">Substring</span><span class="p">(</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">this</span><span class="o">=</span><span class="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-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">expression</span><span class="o">=</span><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">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">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">1</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 class="n">length</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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="p">),</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;DAYOFWEEK&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">DayOfWeek</span><span class="p">(</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="p">),</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="s2">&quot;DAYOFMONTH&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">DayOfMonth</span><span class="p">(</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="p">),</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="s2">&quot;DAYOFYEAR&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">DayOfYear</span><span class="p">(</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="p">),</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;WEEKOFYEAR&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">WeekOfYear</span><span class="p">(</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="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;DATE&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">Cast</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">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="s2">&quot;date&quot;</span><span class="p">)),</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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="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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="p">),</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">1</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-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="p">}</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="o">**</span><span class="n">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 class="c1"># type: ignore</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="s2">&quot;BROADCAST&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="s2">&quot;BROADCASTJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="s2">&quot;MAPJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="s2">&quot;MERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="s2">&quot;SHUFFLEMERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="s2">&quot;MERGEJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="s2">&quot;SHUFFLE_HASH&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</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><span id="L-124"><a href="#L-124"><span class="linenos">124</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-125"><a href="#L-125"><span class="linenos">125</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;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</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">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">Expression</span><span class="p">]:</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</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;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">Drop</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_schema</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="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="p">)</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="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">pivot_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">-&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-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="c1"># Spark doesn&#39;t add a suffix to the pivot columns when there&#39;s a single aggregation</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pivot_columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">names</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="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">pivot_columns</span><span class="p">:</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</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="sd"> Moreover, function names are lowercased in order to mimic Spark&#39;s naming scheme.</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">else</span> <span class="n">node</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="p">)</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</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="s2">&quot;spark&quot;</span><span class="p">,</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-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">return</span> <span class="n">names</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">exp</span><span 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;BYTE&quot;</span><span class="p">,</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">exp</span><span 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;SHORT&quot;</span><span class="p">,</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">exp</span><span 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;LONG&quot;</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="p">}</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</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">UNSUPPORTED</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="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</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;APPROX_COUNT_DISTINCT&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">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;USING </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">&quot;</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span 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;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</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">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&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;unit&quot;</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">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</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-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</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">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&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">StructKwarg</span><span class="p">:</span> <span 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">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-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="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-197"><a href="#L-197"><span class="linenos">197</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-198"><a href="#L-198"><span class="linenos">198</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-199"><a href="#L-199"><span class="linenos">199</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-200"><a href="#L-200"><span class="linenos">200</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-201"><a href="#L-201"><span class="linenos">201</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-202"><a href="#L-202"><span class="linenos">202</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-203"><a href="#L-203"><span class="linenos">203</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-204"><a href="#L-204"><span class="linenos">204</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-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_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">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">)&quot;</span><span class="p">,</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">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">ArraySort</span><span class="p">)</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</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">ILike</span><span class="p">)</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">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</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="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</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">Cast</span><span class="p">)</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">is_type</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="p">):</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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-220"><a href="#L-220"><span class="linenos">220</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;TO_JSON&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-221"><a href="#L-221"><span class="linenos">221</span></a>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</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></pre></div>
+
+
+ </section>
+ <section id="Spark2">
+ <input id="Spark2-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr class">
+
+ <span class="def">class</span>
+ <span class="name">Spark2</span><wbr>(<span class="base"><a href="hive.html#Hive">sqlglot.dialects.hive.Hive</a></span>):
+
+ <label class="view-source-button" for="Spark2-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Spark2"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2-57"><a href="#Spark2-57"><span class="linenos"> 57</span></a><span class="k">class</span> <span class="nc">Spark2</span><span class="p">(</span><span class="n">Hive</span><span class="p">):</span>
+</span><span id="Spark2-58"><a href="#Spark2-58"><span class="linenos"> 58</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Spark2-59"><a href="#Spark2-59"><span class="linenos"> 59</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-60"><a href="#Spark2-60"><span class="linenos"> 60</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2-61"><a href="#Spark2-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2-62"><a href="#Spark2-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2-63"><a href="#Spark2-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;LEFT&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">Substring</span><span class="p">(</span>
+</span><span id="Spark2-64"><a href="#Spark2-64"><span class="linenos"> 64</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="Spark2-65"><a href="#Spark2-65"><span class="linenos"> 65</span></a> <span class="n">start</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">1</span><span class="p">),</span>
+</span><span id="Spark2-66"><a href="#Spark2-66"><span class="linenos"> 66</span></a> <span class="n">length</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="Spark2-67"><a href="#Spark2-67"><span class="linenos"> 67</span></a> <span class="p">),</span>
+</span><span id="Spark2-68"><a href="#Spark2-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;SHIFTLEFT&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">BitwiseLeftShift</span><span class="p">(</span>
+</span><span id="Spark2-69"><a href="#Spark2-69"><span class="linenos"> 69</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="Spark2-70"><a href="#Spark2-70"><span class="linenos"> 70</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="Spark2-71"><a href="#Spark2-71"><span class="linenos"> 71</span></a> <span class="p">),</span>
+</span><span id="Spark2-72"><a href="#Spark2-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;SHIFTRIGHT&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">BitwiseRightShift</span><span class="p">(</span>
+</span><span id="Spark2-73"><a href="#Spark2-73"><span class="linenos"> 73</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="Spark2-74"><a href="#Spark2-74"><span class="linenos"> 74</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="Spark2-75"><a href="#Spark2-75"><span class="linenos"> 75</span></a> <span class="p">),</span>
+</span><span id="Spark2-76"><a href="#Spark2-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;RIGHT&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">Substring</span><span class="p">(</span>
+</span><span id="Spark2-77"><a href="#Spark2-77"><span class="linenos"> 77</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="Spark2-78"><a href="#Spark2-78"><span class="linenos"> 78</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
+</span><span id="Spark2-79"><a href="#Spark2-79"><span class="linenos"> 79</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</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="Spark2-80"><a href="#Spark2-80"><span class="linenos"> 80</span></a> <span class="n">expression</span><span class="o">=</span><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">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">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">1</span><span class="p">)),</span>
+</span><span id="Spark2-81"><a href="#Spark2-81"><span class="linenos"> 81</span></a> <span class="p">),</span>
+</span><span id="Spark2-82"><a href="#Spark2-82"><span class="linenos"> 82</span></a> <span class="n">length</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="Spark2-83"><a href="#Spark2-83"><span class="linenos"> 83</span></a> <span class="p">),</span>
+</span><span id="Spark2-84"><a href="#Spark2-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2-85"><a href="#Spark2-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2-86"><a href="#Spark2-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2-87"><a href="#Spark2-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;DAYOFWEEK&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">DayOfWeek</span><span class="p">(</span>
+</span><span id="Spark2-88"><a href="#Spark2-88"><span class="linenos"> 88</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2-89"><a href="#Spark2-89"><span class="linenos"> 89</span></a> <span class="p">),</span>
+</span><span id="Spark2-90"><a href="#Spark2-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;DAYOFMONTH&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">DayOfMonth</span><span class="p">(</span>
+</span><span id="Spark2-91"><a href="#Spark2-91"><span class="linenos"> 91</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2-92"><a href="#Spark2-92"><span class="linenos"> 92</span></a> <span class="p">),</span>
+</span><span id="Spark2-93"><a href="#Spark2-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;DAYOFYEAR&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">DayOfYear</span><span class="p">(</span>
+</span><span id="Spark2-94"><a href="#Spark2-94"><span class="linenos"> 94</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2-95"><a href="#Spark2-95"><span class="linenos"> 95</span></a> <span class="p">),</span>
+</span><span id="Spark2-96"><a href="#Spark2-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;WEEKOFYEAR&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">WeekOfYear</span><span class="p">(</span>
+</span><span id="Spark2-97"><a href="#Spark2-97"><span class="linenos"> 97</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2-98"><a href="#Spark2-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
+</span><span id="Spark2-99"><a href="#Spark2-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATE&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">Cast</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">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="s2">&quot;date&quot;</span><span class="p">)),</span>
+</span><span id="Spark2-100"><a href="#Spark2-100"><span class="linenos">100</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
+</span><span id="Spark2-101"><a href="#Spark2-101"><span class="linenos">101</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Spark2-102"><a href="#Spark2-102"><span class="linenos">102</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="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="Spark2-103"><a href="#Spark2-103"><span class="linenos">103</span></a> <span class="p">),</span>
+</span><span id="Spark2-104"><a href="#Spark2-104"><span class="linenos">104</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">1</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="Spark2-105"><a href="#Spark2-105"><span class="linenos">105</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
+</span><span id="Spark2-106"><a href="#Spark2-106"><span class="linenos">106</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
+</span><span id="Spark2-107"><a href="#Spark2-107"><span class="linenos">107</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
+</span><span id="Spark2-108"><a href="#Spark2-108"><span class="linenos">108</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
+</span><span id="Spark2-109"><a href="#Spark2-109"><span class="linenos">109</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
+</span><span id="Spark2-110"><a href="#Spark2-110"><span class="linenos">110</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
+</span><span id="Spark2-111"><a href="#Spark2-111"><span class="linenos">111</span></a> <span class="p">}</span>
+</span><span id="Spark2-112"><a href="#Spark2-112"><span class="linenos">112</span></a>
+</span><span id="Spark2-113"><a href="#Spark2-113"><span class="linenos">113</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-114"><a href="#Spark2-114"><span class="linenos">114</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 class="c1"># type: ignore</span>
+</span><span id="Spark2-115"><a href="#Spark2-115"><span class="linenos">115</span></a> <span class="s2">&quot;BROADCAST&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
+</span><span id="Spark2-116"><a href="#Spark2-116"><span class="linenos">116</span></a> <span class="s2">&quot;BROADCASTJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
+</span><span id="Spark2-117"><a href="#Spark2-117"><span class="linenos">117</span></a> <span class="s2">&quot;MAPJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
+</span><span id="Spark2-118"><a href="#Spark2-118"><span class="linenos">118</span></a> <span class="s2">&quot;MERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
+</span><span id="Spark2-119"><a href="#Spark2-119"><span class="linenos">119</span></a> <span class="s2">&quot;SHUFFLEMERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
+</span><span id="Spark2-120"><a href="#Spark2-120"><span class="linenos">120</span></a> <span class="s2">&quot;MERGEJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
+</span><span id="Spark2-121"><a href="#Spark2-121"><span class="linenos">121</span></a> <span class="s2">&quot;SHUFFLE_HASH&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
+</span><span id="Spark2-122"><a href="#Spark2-122"><span class="linenos">122</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
+</span><span id="Spark2-123"><a href="#Spark2-123"><span class="linenos">123</span></a> <span class="p">}</span>
+</span><span id="Spark2-124"><a href="#Spark2-124"><span class="linenos">124</span></a>
+</span><span id="Spark2-125"><a href="#Spark2-125"><span class="linenos">125</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="Spark2-126"><a href="#Spark2-126"><span class="linenos">126</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;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
+</span><span id="Spark2-127"><a href="#Spark2-127"><span class="linenos">127</span></a>
+</span><span id="Spark2-128"><a href="#Spark2-128"><span class="linenos">128</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">Expression</span><span class="p">]:</span>
+</span><span id="Spark2-129"><a href="#Spark2-129"><span class="linenos">129</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;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Spark2-130"><a href="#Spark2-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="Spark2-131"><a href="#Spark2-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_schema</span><span class="p">(),</span>
+</span><span id="Spark2-132"><a href="#Spark2-132"><span class="linenos">132</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
+</span><span id="Spark2-133"><a href="#Spark2-133"><span class="linenos">133</span></a> <span class="p">)</span>
+</span><span id="Spark2-134"><a href="#Spark2-134"><span class="linenos">134</span></a>
+</span><span id="Spark2-135"><a href="#Spark2-135"><span class="linenos">135</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">pivot_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">-&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="Spark2-136"><a href="#Spark2-136"><span class="linenos">136</span></a> <span class="c1"># Spark doesn&#39;t add a suffix to the pivot columns when there&#39;s a single aggregation</span>
+</span><span id="Spark2-137"><a href="#Spark2-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pivot_columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Spark2-138"><a href="#Spark2-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
+</span><span id="Spark2-139"><a href="#Spark2-139"><span class="linenos">139</span></a>
+</span><span id="Spark2-140"><a href="#Spark2-140"><span class="linenos">140</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Spark2-141"><a href="#Spark2-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">pivot_columns</span><span class="p">:</span>
+</span><span id="Spark2-142"><a href="#Spark2-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="Spark2-143"><a href="#Spark2-143"><span class="linenos">143</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Spark2-144"><a href="#Spark2-144"><span class="linenos">144</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Spark2-145"><a href="#Spark2-145"><span class="linenos">145</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Spark2-146"><a href="#Spark2-146"><span class="linenos">146</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
+</span><span id="Spark2-147"><a href="#Spark2-147"><span class="linenos">147</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
+</span><span id="Spark2-148"><a href="#Spark2-148"><span class="linenos">148</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
+</span><span id="Spark2-149"><a href="#Spark2-149"><span class="linenos">149</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
+</span><span id="Spark2-150"><a href="#Spark2-150"><span class="linenos">150</span></a>
+</span><span id="Spark2-151"><a href="#Spark2-151"><span class="linenos">151</span></a><span class="sd"> Moreover, function names are lowercased in order to mimic Spark&#39;s naming scheme.</span>
+</span><span id="Spark2-152"><a href="#Spark2-152"><span class="linenos">152</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Spark2-153"><a href="#Spark2-153"><span class="linenos">153</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Spark2-154"><a href="#Spark2-154"><span class="linenos">154</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Spark2-155"><a href="#Spark2-155"><span class="linenos">155</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Spark2-156"><a href="#Spark2-156"><span class="linenos">156</span></a> <span class="k">else</span> <span class="n">node</span>
+</span><span id="Spark2-157"><a href="#Spark2-157"><span class="linenos">157</span></a> <span class="p">)</span>
+</span><span id="Spark2-158"><a href="#Spark2-158"><span class="linenos">158</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</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="s2">&quot;spark&quot;</span><span class="p">,</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="Spark2-159"><a href="#Spark2-159"><span class="linenos">159</span></a>
+</span><span id="Spark2-160"><a href="#Spark2-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">names</span>
+</span><span id="Spark2-161"><a href="#Spark2-161"><span class="linenos">161</span></a>
+</span><span id="Spark2-162"><a href="#Spark2-162"><span class="linenos">162</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Spark2-163"><a href="#Spark2-163"><span class="linenos">163</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-164"><a href="#Spark2-164"><span class="linenos">164</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2-165"><a href="#Spark2-165"><span class="linenos">165</span></a> <span class="n">exp</span><span 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;BYTE&quot;</span><span class="p">,</span>
+</span><span id="Spark2-166"><a href="#Spark2-166"><span class="linenos">166</span></a> <span class="n">exp</span><span 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;SHORT&quot;</span><span class="p">,</span>
+</span><span id="Spark2-167"><a href="#Spark2-167"><span class="linenos">167</span></a> <span class="n">exp</span><span 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;LONG&quot;</span><span class="p">,</span>
+</span><span id="Spark2-168"><a href="#Spark2-168"><span class="linenos">168</span></a> <span class="p">}</span>
+</span><span id="Spark2-169"><a href="#Spark2-169"><span class="linenos">169</span></a>
+</span><span id="Spark2-170"><a href="#Spark2-170"><span class="linenos">170</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-171"><a href="#Spark2-171"><span class="linenos">171</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2-172"><a href="#Spark2-172"><span class="linenos">172</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2-173"><a href="#Spark2-173"><span class="linenos">173</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2-174"><a href="#Spark2-174"><span class="linenos">174</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2-175"><a href="#Spark2-175"><span class="linenos">175</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2-176"><a href="#Spark2-176"><span class="linenos">176</span></a> <span class="p">}</span>
+</span><span id="Spark2-177"><a href="#Spark2-177"><span class="linenos">177</span></a>
+</span><span id="Spark2-178"><a href="#Spark2-178"><span class="linenos">178</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2-179"><a href="#Spark2-179"><span class="linenos">179</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2-180"><a href="#Spark2-180"><span class="linenos">180</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
+</span><span id="Spark2-181"><a href="#Spark2-181"><span class="linenos">181</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;USING </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">&quot;</span><span class="p">,</span>
+</span><span id="Spark2-182"><a href="#Spark2-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span 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;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
+</span><span id="Spark2-183"><a href="#Spark2-183"><span class="linenos">183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
+</span><span id="Spark2-184"><a href="#Spark2-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
+</span><span id="Spark2-185"><a href="#Spark2-185"><span class="linenos">185</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">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&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;unit&quot;</span><span class="p">)),</span>
+</span><span id="Spark2-186"><a href="#Spark2-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
+</span><span id="Spark2-187"><a href="#Spark2-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
+</span><span id="Spark2-188"><a href="#Spark2-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Spark2-189"><a href="#Spark2-189"><span class="linenos">189</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="Spark2-190"><a href="#Spark2-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
+</span><span id="Spark2-191"><a href="#Spark2-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
+</span><span id="Spark2-192"><a href="#Spark2-192"><span class="linenos">192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
+</span><span id="Spark2-193"><a href="#Spark2-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">:</span> <span 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">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="Spark2-194"><a href="#Spark2-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Spark2-195"><a href="#Spark2-195"><span class="linenos">195</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Spark2-196"><a href="#Spark2-196"><span class="linenos">196</span></a> <span class="p">),</span>
+</span><span id="Spark2-197"><a href="#Spark2-197"><span class="linenos">197</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="Spark2-198"><a href="#Spark2-198"><span class="linenos">198</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="Spark2-199"><a href="#Spark2-199"><span class="linenos">199</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="Spark2-200"><a href="#Spark2-200"><span class="linenos">200</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="Spark2-201"><a href="#Spark2-201"><span class="linenos">201</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="Spark2-202"><a href="#Spark2-202"><span class="linenos">202</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="Spark2-203"><a href="#Spark2-203"><span class="linenos">203</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="Spark2-204"><a href="#Spark2-204"><span class="linenos">204</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="Spark2-205"><a href="#Spark2-205"><span class="linenos">205</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="Spark2-206"><a href="#Spark2-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_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">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">)&quot;</span><span class="p">,</span>
+</span><span id="Spark2-207"><a href="#Spark2-207"><span class="linenos">207</span></a> <span class="p">}</span>
+</span><span id="Spark2-208"><a href="#Spark2-208"><span class="linenos">208</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">ArraySort</span><span class="p">)</span>
+</span><span id="Spark2-209"><a href="#Spark2-209"><span class="linenos">209</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">ILike</span><span class="p">)</span>
+</span><span id="Spark2-210"><a href="#Spark2-210"><span class="linenos">210</span></a>
+</span><span id="Spark2-211"><a href="#Spark2-211"><span class="linenos">211</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Spark2-212"><a href="#Spark2-212"><span class="linenos">212</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Spark2-213"><a href="#Spark2-213"><span class="linenos">213</span></a>
+</span><span id="Spark2-214"><a href="#Spark2-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2-215"><a href="#Spark2-215"><span class="linenos">215</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">Cast</span><span class="p">)</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">is_type</span><span class="p">(</span>
+</span><span id="Spark2-216"><a href="#Spark2-216"><span class="linenos">216</span></a> <span class="n">exp</span><span 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><span id="Spark2-217"><a href="#Spark2-217"><span class="linenos">217</span></a> <span class="p">):</span>
+</span><span id="Spark2-218"><a href="#Spark2-218"><span class="linenos">218</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
+</span><span id="Spark2-219"><a href="#Spark2-219"><span class="linenos">219</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
+</span><span id="Spark2-220"><a href="#Spark2-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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="Spark2-221"><a href="#Spark2-221"><span class="linenos">221</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;TO_JSON&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="Spark2-222"><a href="#Spark2-222"><span class="linenos">222</span></a>
+</span><span id="Spark2-223"><a href="#Spark2-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Spark2-224"><a href="#Spark2-224"><span class="linenos">224</span></a>
+</span><span id="Spark2-225"><a href="#Spark2-225"><span class="linenos">225</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Spark2-226"><a href="#Spark2-226"><span class="linenos">226</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></pre></div>
+
+
+
+
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></dt>
+ <dd id="Spark2.get_or_raise" class="function"><a href="dialect.html#Dialect.get_or_raise">get_or_raise</a></dd>
+ <dd id="Spark2.format_time" class="function"><a href="dialect.html#Dialect.format_time">format_time</a></dd>
+ <dd id="Spark2.parse" class="function"><a href="dialect.html#Dialect.parse">parse</a></dd>
+ <dd id="Spark2.parse_into" class="function"><a href="dialect.html#Dialect.parse_into">parse_into</a></dd>
+ <dd id="Spark2.generate" class="function"><a href="dialect.html#Dialect.generate">generate</a></dd>
+ <dd id="Spark2.transpile" class="function"><a href="dialect.html#Dialect.transpile">transpile</a></dd>
+ <dd id="Spark2.tokenize" class="function"><a href="dialect.html#Dialect.tokenize">tokenize</a></dd>
+ <dd id="Spark2.parser" class="function"><a href="dialect.html#Dialect.parser">parser</a></dd>
+ <dd id="Spark2.generator" class="function"><a href="dialect.html#Dialect.generator">generator</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="Spark2.Parser">
+ <input id="Spark2.Parser-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr class">
+
+ <span class="def">class</span>
+ <span class="name">Spark2.Parser</span><wbr>(<span class="base"><a href="hive.html#Hive.Parser">sqlglot.dialects.hive.Hive.Parser</a></span>):
+
+ <label class="view-source-button" for="Spark2.Parser-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Spark2.Parser"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Parser-58"><a href="#Spark2.Parser-58"><span class="linenos"> 58</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Spark2.Parser-59"><a href="#Spark2.Parser-59"><span class="linenos"> 59</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Parser-60"><a href="#Spark2.Parser-60"><span class="linenos"> 60</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2.Parser-61"><a href="#Spark2.Parser-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2.Parser-62"><a href="#Spark2.Parser-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2.Parser-63"><a href="#Spark2.Parser-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;LEFT&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">Substring</span><span class="p">(</span>
+</span><span id="Spark2.Parser-64"><a href="#Spark2.Parser-64"><span class="linenos"> 64</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="Spark2.Parser-65"><a href="#Spark2.Parser-65"><span class="linenos"> 65</span></a> <span class="n">start</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">1</span><span class="p">),</span>
+</span><span id="Spark2.Parser-66"><a href="#Spark2.Parser-66"><span class="linenos"> 66</span></a> <span class="n">length</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="Spark2.Parser-67"><a href="#Spark2.Parser-67"><span class="linenos"> 67</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-68"><a href="#Spark2.Parser-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;SHIFTLEFT&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">BitwiseLeftShift</span><span class="p">(</span>
+</span><span id="Spark2.Parser-69"><a href="#Spark2.Parser-69"><span class="linenos"> 69</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="Spark2.Parser-70"><a href="#Spark2.Parser-70"><span class="linenos"> 70</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="Spark2.Parser-71"><a href="#Spark2.Parser-71"><span class="linenos"> 71</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-72"><a href="#Spark2.Parser-72"><span class="linenos"> 72</span></a> <span class="s2">&quot;SHIFTRIGHT&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">BitwiseRightShift</span><span class="p">(</span>
+</span><span id="Spark2.Parser-73"><a href="#Spark2.Parser-73"><span class="linenos"> 73</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="Spark2.Parser-74"><a href="#Spark2.Parser-74"><span class="linenos"> 74</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="Spark2.Parser-75"><a href="#Spark2.Parser-75"><span class="linenos"> 75</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-76"><a href="#Spark2.Parser-76"><span class="linenos"> 76</span></a> <span class="s2">&quot;RIGHT&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">Substring</span><span class="p">(</span>
+</span><span id="Spark2.Parser-77"><a href="#Spark2.Parser-77"><span class="linenos"> 77</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="Spark2.Parser-78"><a href="#Spark2.Parser-78"><span class="linenos"> 78</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
+</span><span id="Spark2.Parser-79"><a href="#Spark2.Parser-79"><span class="linenos"> 79</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</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="Spark2.Parser-80"><a href="#Spark2.Parser-80"><span class="linenos"> 80</span></a> <span class="n">expression</span><span class="o">=</span><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">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">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">1</span><span class="p">)),</span>
+</span><span id="Spark2.Parser-81"><a href="#Spark2.Parser-81"><span class="linenos"> 81</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-82"><a href="#Spark2.Parser-82"><span class="linenos"> 82</span></a> <span class="n">length</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="Spark2.Parser-83"><a href="#Spark2.Parser-83"><span class="linenos"> 83</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-84"><a href="#Spark2.Parser-84"><span class="linenos"> 84</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2.Parser-85"><a href="#Spark2.Parser-85"><span class="linenos"> 85</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2.Parser-86"><a href="#Spark2.Parser-86"><span class="linenos"> 86</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
+</span><span id="Spark2.Parser-87"><a href="#Spark2.Parser-87"><span class="linenos"> 87</span></a> <span class="s2">&quot;DAYOFWEEK&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">DayOfWeek</span><span class="p">(</span>
+</span><span id="Spark2.Parser-88"><a href="#Spark2.Parser-88"><span class="linenos"> 88</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2.Parser-89"><a href="#Spark2.Parser-89"><span class="linenos"> 89</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-90"><a href="#Spark2.Parser-90"><span class="linenos"> 90</span></a> <span class="s2">&quot;DAYOFMONTH&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">DayOfMonth</span><span class="p">(</span>
+</span><span id="Spark2.Parser-91"><a href="#Spark2.Parser-91"><span class="linenos"> 91</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2.Parser-92"><a href="#Spark2.Parser-92"><span class="linenos"> 92</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-93"><a href="#Spark2.Parser-93"><span class="linenos"> 93</span></a> <span class="s2">&quot;DAYOFYEAR&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">DayOfYear</span><span class="p">(</span>
+</span><span id="Spark2.Parser-94"><a href="#Spark2.Parser-94"><span class="linenos"> 94</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2.Parser-95"><a href="#Spark2.Parser-95"><span class="linenos"> 95</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-96"><a href="#Spark2.Parser-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;WEEKOFYEAR&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">WeekOfYear</span><span class="p">(</span>
+</span><span id="Spark2.Parser-97"><a href="#Spark2.Parser-97"><span class="linenos"> 97</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</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="Spark2.Parser-98"><a href="#Spark2.Parser-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-99"><a href="#Spark2.Parser-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATE&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">Cast</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">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="s2">&quot;date&quot;</span><span class="p">)),</span>
+</span><span id="Spark2.Parser-100"><a href="#Spark2.Parser-100"><span class="linenos">100</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
+</span><span id="Spark2.Parser-101"><a href="#Spark2.Parser-101"><span class="linenos">101</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Spark2.Parser-102"><a href="#Spark2.Parser-102"><span class="linenos">102</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="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="Spark2.Parser-103"><a href="#Spark2.Parser-103"><span class="linenos">103</span></a> <span class="p">),</span>
+</span><span id="Spark2.Parser-104"><a href="#Spark2.Parser-104"><span class="linenos">104</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</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">1</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="Spark2.Parser-105"><a href="#Spark2.Parser-105"><span class="linenos">105</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-106"><a href="#Spark2.Parser-106"><span class="linenos">106</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-107"><a href="#Spark2.Parser-107"><span class="linenos">107</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-108"><a href="#Spark2.Parser-108"><span class="linenos">108</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-109"><a href="#Spark2.Parser-109"><span class="linenos">109</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-110"><a href="#Spark2.Parser-110"><span class="linenos">110</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-111"><a href="#Spark2.Parser-111"><span class="linenos">111</span></a> <span class="p">}</span>
+</span><span id="Spark2.Parser-112"><a href="#Spark2.Parser-112"><span class="linenos">112</span></a>
+</span><span id="Spark2.Parser-113"><a href="#Spark2.Parser-113"><span class="linenos">113</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Parser-114"><a href="#Spark2.Parser-114"><span class="linenos">114</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 class="c1"># type: ignore</span>
+</span><span id="Spark2.Parser-115"><a href="#Spark2.Parser-115"><span class="linenos">115</span></a> <span class="s2">&quot;BROADCAST&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-116"><a href="#Spark2.Parser-116"><span class="linenos">116</span></a> <span class="s2">&quot;BROADCASTJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-117"><a href="#Spark2.Parser-117"><span class="linenos">117</span></a> <span class="s2">&quot;MAPJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-118"><a href="#Spark2.Parser-118"><span class="linenos">118</span></a> <span class="s2">&quot;MERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-119"><a href="#Spark2.Parser-119"><span class="linenos">119</span></a> <span class="s2">&quot;SHUFFLEMERGE&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-120"><a href="#Spark2.Parser-120"><span class="linenos">120</span></a> <span class="s2">&quot;MERGEJOIN&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_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-121"><a href="#Spark2.Parser-121"><span class="linenos">121</span></a> <span class="s2">&quot;SHUFFLE_HASH&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-122"><a href="#Spark2.Parser-122"><span class="linenos">122</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&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_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Parser-123"><a href="#Spark2.Parser-123"><span class="linenos">123</span></a> <span class="p">}</span>
+</span><span id="Spark2.Parser-124"><a href="#Spark2.Parser-124"><span class="linenos">124</span></a>
+</span><span id="Spark2.Parser-125"><a href="#Spark2.Parser-125"><span class="linenos">125</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="Spark2.Parser-126"><a href="#Spark2.Parser-126"><span class="linenos">126</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;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
+</span><span id="Spark2.Parser-127"><a href="#Spark2.Parser-127"><span class="linenos">127</span></a>
+</span><span id="Spark2.Parser-128"><a href="#Spark2.Parser-128"><span class="linenos">128</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">Expression</span><span class="p">]:</span>
+</span><span id="Spark2.Parser-129"><a href="#Spark2.Parser-129"><span class="linenos">129</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;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Spark2.Parser-130"><a href="#Spark2.Parser-130"><span class="linenos">130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="Spark2.Parser-131"><a href="#Spark2.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_schema</span><span class="p">(),</span>
+</span><span id="Spark2.Parser-132"><a href="#Spark2.Parser-132"><span class="linenos">132</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Parser-133"><a href="#Spark2.Parser-133"><span class="linenos">133</span></a> <span class="p">)</span>
+</span><span id="Spark2.Parser-134"><a href="#Spark2.Parser-134"><span class="linenos">134</span></a>
+</span><span id="Spark2.Parser-135"><a href="#Spark2.Parser-135"><span class="linenos">135</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">pivot_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">-&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="Spark2.Parser-136"><a href="#Spark2.Parser-136"><span class="linenos">136</span></a> <span class="c1"># Spark doesn&#39;t add a suffix to the pivot columns when there&#39;s a single aggregation</span>
+</span><span id="Spark2.Parser-137"><a href="#Spark2.Parser-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pivot_columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Spark2.Parser-138"><a href="#Spark2.Parser-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
+</span><span id="Spark2.Parser-139"><a href="#Spark2.Parser-139"><span class="linenos">139</span></a>
+</span><span id="Spark2.Parser-140"><a href="#Spark2.Parser-140"><span class="linenos">140</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Spark2.Parser-141"><a href="#Spark2.Parser-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">pivot_columns</span><span class="p">:</span>
+</span><span id="Spark2.Parser-142"><a href="#Spark2.Parser-142"><span class="linenos">142</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="Spark2.Parser-143"><a href="#Spark2.Parser-143"><span class="linenos">143</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Spark2.Parser-144"><a href="#Spark2.Parser-144"><span class="linenos">144</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Spark2.Parser-145"><a href="#Spark2.Parser-145"><span class="linenos">145</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Spark2.Parser-146"><a href="#Spark2.Parser-146"><span class="linenos">146</span></a><span class="sd"> This case corresponds to aggregations without aliases being used as suffixes</span>
+</span><span id="Spark2.Parser-147"><a href="#Spark2.Parser-147"><span class="linenos">147</span></a><span class="sd"> (e.g. col_avg(foo)). We need to unquote identifiers because they&#39;re going to</span>
+</span><span id="Spark2.Parser-148"><a href="#Spark2.Parser-148"><span class="linenos">148</span></a><span class="sd"> be quoted in the base parser&#39;s `_parse_pivot` method, due to `to_identifier`.</span>
+</span><span id="Spark2.Parser-149"><a href="#Spark2.Parser-149"><span class="linenos">149</span></a><span class="sd"> Otherwise, we&#39;d end up with `col_avg(`foo`)` (notice the double quotes).</span>
+</span><span id="Spark2.Parser-150"><a href="#Spark2.Parser-150"><span class="linenos">150</span></a>
+</span><span id="Spark2.Parser-151"><a href="#Spark2.Parser-151"><span class="linenos">151</span></a><span class="sd"> Moreover, function names are lowercased in order to mimic Spark&#39;s naming scheme.</span>
+</span><span id="Spark2.Parser-152"><a href="#Spark2.Parser-152"><span class="linenos">152</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Spark2.Parser-153"><a href="#Spark2.Parser-153"><span class="linenos">153</span></a> <span class="n">agg_all_unquoted</span> <span class="o">=</span> <span class="n">agg</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="Spark2.Parser-154"><a href="#Spark2.Parser-154"><span class="linenos">154</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Spark2.Parser-155"><a href="#Spark2.Parser-155"><span class="linenos">155</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Spark2.Parser-156"><a href="#Spark2.Parser-156"><span class="linenos">156</span></a> <span class="k">else</span> <span class="n">node</span>
+</span><span id="Spark2.Parser-157"><a href="#Spark2.Parser-157"><span class="linenos">157</span></a> <span class="p">)</span>
+</span><span id="Spark2.Parser-158"><a href="#Spark2.Parser-158"><span class="linenos">158</span></a> <span class="n">names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agg_all_unquoted</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="s2">&quot;spark&quot;</span><span class="p">,</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="Spark2.Parser-159"><a href="#Spark2.Parser-159"><span class="linenos">159</span></a>
+</span><span id="Spark2.Parser-160"><a href="#Spark2.Parser-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">names</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Parser consumes a list of tokens produced by the <code><a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a></code> and produces
+a parsed syntax tree.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>error_level:</strong> the desired error level.
+Default: ErrorLevel.RAISE</li>
+<li><strong>error_message_context:</strong> determines the amount of context to capture from a
+query string when displaying the error message (in number of characters).
+Default: 50.</li>
+<li><strong>index_offset:</strong> Index offset for arrays eg ARRAY[0] vs ARRAY[1] as the head of a list.
+Default: 0</li>
+<li><strong>alias_post_tablesample:</strong> If the table alias comes after tablesample.
+Default: False</li>
+<li><strong>max_errors:</strong> Maximum number of error messages to include in a raised ParseError.
+This is only relevant if error_level is ErrorLevel.RAISE.
+Default: 3</li>
+<li><strong>null_ordering:</strong> Indicates the default null ordering method to use if not explicitly set.
+Options are "nulls_are_small", "nulls_are_large", "nulls_are_last".
+Default: "nulls_are_small"</li>
+</ul>
+</div>
+
+
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="../parser.html#Parser">sqlglot.parser.Parser</a></dt>
+ <dd id="Spark2.Parser.__init__" class="function"><a href="../parser.html#Parser.__init__">Parser</a></dd>
+ <dd id="Spark2.Parser.reset" class="function"><a href="../parser.html#Parser.reset">reset</a></dd>
+ <dd id="Spark2.Parser.parse" class="function"><a href="../parser.html#Parser.parse">parse</a></dd>
+ <dd id="Spark2.Parser.parse_into" class="function"><a href="../parser.html#Parser.parse_into">parse_into</a></dd>
+ <dd id="Spark2.Parser.check_errors" class="function"><a href="../parser.html#Parser.check_errors">check_errors</a></dd>
+ <dd id="Spark2.Parser.raise_error" class="function"><a href="../parser.html#Parser.raise_error">raise_error</a></dd>
+ <dd id="Spark2.Parser.expression" class="function"><a href="../parser.html#Parser.expression">expression</a></dd>
+ <dd id="Spark2.Parser.validate_expression" class="function"><a href="../parser.html#Parser.validate_expression">validate_expression</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="Spark2.Generator">
+ <input id="Spark2.Generator-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr class">
+
+ <span class="def">class</span>
+ <span class="name">Spark2.Generator</span><wbr>(<span class="base"><a href="hive.html#Hive.Generator">sqlglot.dialects.hive.Hive.Generator</a></span>):
+
+ <label class="view-source-button" for="Spark2.Generator-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Spark2.Generator"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator-162"><a href="#Spark2.Generator-162"><span class="linenos">162</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
+</span><span id="Spark2.Generator-163"><a href="#Spark2.Generator-163"><span class="linenos">163</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Generator-164"><a href="#Spark2.Generator-164"><span class="linenos">164</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2.Generator-165"><a href="#Spark2.Generator-165"><span class="linenos">165</span></a> <span class="n">exp</span><span 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;BYTE&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-166"><a href="#Spark2.Generator-166"><span class="linenos">166</span></a> <span class="n">exp</span><span 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;SHORT&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-167"><a href="#Spark2.Generator-167"><span class="linenos">167</span></a> <span class="n">exp</span><span 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;LONG&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-168"><a href="#Spark2.Generator-168"><span class="linenos">168</span></a> <span class="p">}</span>
+</span><span id="Spark2.Generator-169"><a href="#Spark2.Generator-169"><span class="linenos">169</span></a>
+</span><span id="Spark2.Generator-170"><a href="#Spark2.Generator-170"><span class="linenos">170</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Generator-171"><a href="#Spark2.Generator-171"><span class="linenos">171</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2.Generator-172"><a href="#Spark2.Generator-172"><span class="linenos">172</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2.Generator-173"><a href="#Spark2.Generator-173"><span class="linenos">173</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2.Generator-174"><a href="#Spark2.Generator-174"><span class="linenos">174</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2.Generator-175"><a href="#Spark2.Generator-175"><span class="linenos">175</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">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Spark2.Generator-176"><a href="#Spark2.Generator-176"><span class="linenos">176</span></a> <span class="p">}</span>
+</span><span id="Spark2.Generator-177"><a href="#Spark2.Generator-177"><span class="linenos">177</span></a>
+</span><span id="Spark2.Generator-178"><a href="#Spark2.Generator-178"><span class="linenos">178</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Spark2.Generator-179"><a href="#Spark2.Generator-179"><span class="linenos">179</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Spark2.Generator-180"><a href="#Spark2.Generator-180"><span class="linenos">180</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;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Generator-181"><a href="#Spark2.Generator-181"><span class="linenos">181</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;USING </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">&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-182"><a href="#Spark2.Generator-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span 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;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-183"><a href="#Spark2.Generator-183"><span class="linenos">183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Generator-184"><a href="#Spark2.Generator-184"><span class="linenos">184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Generator-185"><a href="#Spark2.Generator-185"><span class="linenos">185</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">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&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;unit&quot;</span><span class="p">)),</span>
+</span><span id="Spark2.Generator-186"><a href="#Spark2.Generator-186"><span class="linenos">186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-187"><a href="#Spark2.Generator-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
+</span><span id="Spark2.Generator-188"><a href="#Spark2.Generator-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-189"><a href="#Spark2.Generator-189"><span class="linenos">189</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="Spark2.Generator-190"><a href="#Spark2.Generator-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
+</span><span id="Spark2.Generator-191"><a href="#Spark2.Generator-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
+</span><span id="Spark2.Generator-192"><a href="#Spark2.Generator-192"><span class="linenos">192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
+</span><span id="Spark2.Generator-193"><a href="#Spark2.Generator-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">:</span> <span 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">: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="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="Spark2.Generator-194"><a href="#Spark2.Generator-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="Spark2.Generator-195"><a href="#Spark2.Generator-195"><span class="linenos">195</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Spark2.Generator-196"><a href="#Spark2.Generator-196"><span class="linenos">196</span></a> <span class="p">),</span>
+</span><span id="Spark2.Generator-197"><a href="#Spark2.Generator-197"><span class="linenos">197</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="Spark2.Generator-198"><a href="#Spark2.Generator-198"><span class="linenos">198</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="Spark2.Generator-199"><a href="#Spark2.Generator-199"><span class="linenos">199</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="Spark2.Generator-200"><a href="#Spark2.Generator-200"><span class="linenos">200</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="Spark2.Generator-201"><a href="#Spark2.Generator-201"><span class="linenos">201</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="Spark2.Generator-202"><a href="#Spark2.Generator-202"><span class="linenos">202</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="Spark2.Generator-203"><a href="#Spark2.Generator-203"><span class="linenos">203</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="Spark2.Generator-204"><a href="#Spark2.Generator-204"><span class="linenos">204</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="Spark2.Generator-205"><a href="#Spark2.Generator-205"><span class="linenos">205</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="Spark2.Generator-206"><a href="#Spark2.Generator-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_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">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">)&quot;</span><span class="p">,</span>
+</span><span id="Spark2.Generator-207"><a href="#Spark2.Generator-207"><span class="linenos">207</span></a> <span class="p">}</span>
+</span><span id="Spark2.Generator-208"><a href="#Spark2.Generator-208"><span class="linenos">208</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">ArraySort</span><span class="p">)</span>
+</span><span id="Spark2.Generator-209"><a href="#Spark2.Generator-209"><span class="linenos">209</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">ILike</span><span class="p">)</span>
+</span><span id="Spark2.Generator-210"><a href="#Spark2.Generator-210"><span class="linenos">210</span></a>
+</span><span id="Spark2.Generator-211"><a href="#Spark2.Generator-211"><span class="linenos">211</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Spark2.Generator-212"><a href="#Spark2.Generator-212"><span class="linenos">212</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Spark2.Generator-213"><a href="#Spark2.Generator-213"><span class="linenos">213</span></a>
+</span><span id="Spark2.Generator-214"><a href="#Spark2.Generator-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2.Generator-215"><a href="#Spark2.Generator-215"><span class="linenos">215</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">Cast</span><span class="p">)</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">is_type</span><span class="p">(</span>
+</span><span id="Spark2.Generator-216"><a href="#Spark2.Generator-216"><span class="linenos">216</span></a> <span class="n">exp</span><span 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><span id="Spark2.Generator-217"><a href="#Spark2.Generator-217"><span class="linenos">217</span></a> <span class="p">):</span>
+</span><span id="Spark2.Generator-218"><a href="#Spark2.Generator-218"><span class="linenos">218</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
+</span><span id="Spark2.Generator-219"><a href="#Spark2.Generator-219"><span class="linenos">219</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
+</span><span id="Spark2.Generator-220"><a href="#Spark2.Generator-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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="Spark2.Generator-221"><a href="#Spark2.Generator-221"><span class="linenos">221</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;TO_JSON&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="Spark2.Generator-222"><a href="#Spark2.Generator-222"><span class="linenos">222</span></a>
+</span><span id="Spark2.Generator-223"><a href="#Spark2.Generator-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span></pre></div>
+
+
+ <div class="docstring"><p>Generator interprets the given syntax tree and produces a SQL string as an output.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>time_mapping (dict):</strong> the dictionary of custom time mappings in which the key
+represents a python time format and the output the target time format</li>
+<li><strong>time_trie (trie):</strong> a trie of the time_mapping keys</li>
+<li><strong>pretty (bool):</strong> if set to True the returned string will be formatted. Default: False.</li>
+<li><strong>quote_start (str):</strong> specifies which starting character to use to delimit quotes. Default: '.</li>
+<li><strong>quote_end (str):</strong> specifies which ending character to use to delimit quotes. Default: '.</li>
+<li><strong>identifier_start (str):</strong> specifies which starting character to use to delimit identifiers. Default: ".</li>
+<li><strong>identifier_end (str):</strong> specifies which ending character to use to delimit identifiers. Default: ".</li>
+<li><strong>identify (bool | str):</strong> 'always': always quote, 'safe': quote identifiers if they don't contain an upcase, True defaults to always.</li>
+<li><strong>normalize (bool):</strong> if set to True all identifiers will lower cased</li>
+<li><strong>string_escape (str):</strong> specifies a string escape character. Default: '.</li>
+<li><strong>identifier_escape (str):</strong> specifies an identifier escape character. Default: ".</li>
+<li><strong>pad (int):</strong> determines padding in a formatted string. Default: 2.</li>
+<li><strong>indent (int):</strong> determines the size of indentation in a formatted string. Default: 4.</li>
+<li><strong>unnest_column_only (bool):</strong> if true unnest table aliases are considered only as column aliases</li>
+<li><strong>normalize_functions (str):</strong> normalize function names, "upper", "lower", or None
+Default: "upper"</li>
+<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
+Default: False</li>
+<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
+unsupported expressions. Default ErrorLevel.WARN.</li>
+<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
+Options are "nulls_are_small", "nulls_are_large", "nulls_are_last".
+Default: "nulls_are_small"</li>
+<li><strong>max_unsupported (int):</strong> Maximum number of unsupported messages to include in a raised UnsupportedError.
+This is only relevant if unsupported_level is ErrorLevel.RAISE.
+Default: 3</li>
+<li><strong>leading_comma (bool):</strong> if the the comma is leading or trailing in select statements
+Default: False</li>
+<li><strong>max_text_width:</strong> The max number of characters in a segment before creating new lines in pretty mode.
+The default is on the smaller end because the length only represents a segment and not the true
+line length.
+Default: 80</li>
+<li><strong>comments:</strong> Whether or not to preserve comments in the output SQL code.
+Default: True</li>
+</ul>
+</div>
+
+
+ <div id="Spark2.Generator.cast_sql" class="classattr">
+ <input id="Spark2.Generator.cast_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr function">
+
+ <span class="def">def</span>
+ <span class="name">cast_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#Cast">sqlglot.expressions.Cast</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Spark2.Generator.cast_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Spark2.Generator.cast_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.cast_sql-214"><a href="#Spark2.Generator.cast_sql-214"><span class="linenos">214</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Spark2.Generator.cast_sql-215"><a href="#Spark2.Generator.cast_sql-215"><span class="linenos">215</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">Cast</span><span class="p">)</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">is_type</span><span class="p">(</span>
+</span><span id="Spark2.Generator.cast_sql-216"><a href="#Spark2.Generator.cast_sql-216"><span class="linenos">216</span></a> <span class="n">exp</span><span 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><span id="Spark2.Generator.cast_sql-217"><a href="#Spark2.Generator.cast_sql-217"><span class="linenos">217</span></a> <span class="p">):</span>
+</span><span id="Spark2.Generator.cast_sql-218"><a href="#Spark2.Generator.cast_sql-218"><span class="linenos">218</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
+</span><span id="Spark2.Generator.cast_sql-219"><a href="#Spark2.Generator.cast_sql-219"><span class="linenos">219</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;FROM_JSON&quot;</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="n">schema</span><span class="p">)</span>
+</span><span id="Spark2.Generator.cast_sql-220"><a href="#Spark2.Generator.cast_sql-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">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="Spark2.Generator.cast_sql-221"><a href="#Spark2.Generator.cast_sql-221"><span class="linenos">221</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;TO_JSON&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="Spark2.Generator.cast_sql-222"><a href="#Spark2.Generator.cast_sql-222"><span class="linenos">222</span></a>
+</span><span id="Spark2.Generator.cast_sql-223"><a href="#Spark2.Generator.cast_sql-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="../generator.html#Generator">sqlglot.generator.Generator</a></dt>
+ <dd id="Spark2.Generator.__init__" class="function"><a href="../generator.html#Generator.__init__">Generator</a></dd>
+ <dd id="Spark2.Generator.generate" class="function"><a href="../generator.html#Generator.generate">generate</a></dd>
+ <dd id="Spark2.Generator.unsupported" class="function"><a href="../generator.html#Generator.unsupported">unsupported</a></dd>
+ <dd id="Spark2.Generator.sep" class="function"><a href="../generator.html#Generator.sep">sep</a></dd>
+ <dd id="Spark2.Generator.seg" class="function"><a href="../generator.html#Generator.seg">seg</a></dd>
+ <dd id="Spark2.Generator.pad_comment" class="function"><a href="../generator.html#Generator.pad_comment">pad_comment</a></dd>
+ <dd id="Spark2.Generator.maybe_comment" class="function"><a href="../generator.html#Generator.maybe_comment">maybe_comment</a></dd>
+ <dd id="Spark2.Generator.wrap" class="function"><a href="../generator.html#Generator.wrap">wrap</a></dd>
+ <dd id="Spark2.Generator.no_identify" class="function"><a href="../generator.html#Generator.no_identify">no_identify</a></dd>
+ <dd id="Spark2.Generator.normalize_func" class="function"><a href="../generator.html#Generator.normalize_func">normalize_func</a></dd>
+ <dd id="Spark2.Generator.indent" class="function"><a href="../generator.html#Generator.indent">indent</a></dd>
+ <dd id="Spark2.Generator.sql" class="function"><a href="../generator.html#Generator.sql">sql</a></dd>
+ <dd id="Spark2.Generator.uncache_sql" class="function"><a href="../generator.html#Generator.uncache_sql">uncache_sql</a></dd>
+ <dd id="Spark2.Generator.cache_sql" class="function"><a href="../generator.html#Generator.cache_sql">cache_sql</a></dd>
+ <dd id="Spark2.Generator.characterset_sql" class="function"><a href="../generator.html#Generator.characterset_sql">characterset_sql</a></dd>
+ <dd id="Spark2.Generator.column_sql" class="function"><a href="../generator.html#Generator.column_sql">column_sql</a></dd>
+ <dd id="Spark2.Generator.columnposition_sql" class="function"><a href="../generator.html#Generator.columnposition_sql">columnposition_sql</a></dd>
+ <dd id="Spark2.Generator.columndef_sql" class="function"><a href="../generator.html#Generator.columndef_sql">columndef_sql</a></dd>
+ <dd id="Spark2.Generator.columnconstraint_sql" class="function"><a href="../generator.html#Generator.columnconstraint_sql">columnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.autoincrementcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.autoincrementcolumnconstraint_sql">autoincrementcolumnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.compresscolumnconstraint_sql" class="function"><a href="../generator.html#Generator.compresscolumnconstraint_sql">compresscolumnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.generatedasidentitycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.generatedasidentitycolumnconstraint_sql">generatedasidentitycolumnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.notnullcolumnconstraint_sql" class="function"><a href="../generator.html#Generator.notnullcolumnconstraint_sql">notnullcolumnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.primarykeycolumnconstraint_sql" class="function"><a href="../generator.html#Generator.primarykeycolumnconstraint_sql">primarykeycolumnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.uniquecolumnconstraint_sql" class="function"><a href="../generator.html#Generator.uniquecolumnconstraint_sql">uniquecolumnconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.create_sql" class="function"><a href="../generator.html#Generator.create_sql">create_sql</a></dd>
+ <dd id="Spark2.Generator.describe_sql" class="function"><a href="../generator.html#Generator.describe_sql">describe_sql</a></dd>
+ <dd id="Spark2.Generator.prepend_ctes" class="function"><a href="../generator.html#Generator.prepend_ctes">prepend_ctes</a></dd>
+ <dd id="Spark2.Generator.with_sql" class="function"><a href="../generator.html#Generator.with_sql">with_sql</a></dd>
+ <dd id="Spark2.Generator.cte_sql" class="function"><a href="../generator.html#Generator.cte_sql">cte_sql</a></dd>
+ <dd id="Spark2.Generator.tablealias_sql" class="function"><a href="../generator.html#Generator.tablealias_sql">tablealias_sql</a></dd>
+ <dd id="Spark2.Generator.bitstring_sql" class="function"><a href="../generator.html#Generator.bitstring_sql">bitstring_sql</a></dd>
+ <dd id="Spark2.Generator.hexstring_sql" class="function"><a href="../generator.html#Generator.hexstring_sql">hexstring_sql</a></dd>
+ <dd id="Spark2.Generator.bytestring_sql" class="function"><a href="../generator.html#Generator.bytestring_sql">bytestring_sql</a></dd>
+ <dd id="Spark2.Generator.directory_sql" class="function"><a href="../generator.html#Generator.directory_sql">directory_sql</a></dd>
+ <dd id="Spark2.Generator.delete_sql" class="function"><a href="../generator.html#Generator.delete_sql">delete_sql</a></dd>
+ <dd id="Spark2.Generator.drop_sql" class="function"><a href="../generator.html#Generator.drop_sql">drop_sql</a></dd>
+ <dd id="Spark2.Generator.except_sql" class="function"><a href="../generator.html#Generator.except_sql">except_sql</a></dd>
+ <dd id="Spark2.Generator.except_op" class="function"><a href="../generator.html#Generator.except_op">except_op</a></dd>
+ <dd id="Spark2.Generator.fetch_sql" class="function"><a href="../generator.html#Generator.fetch_sql">fetch_sql</a></dd>
+ <dd id="Spark2.Generator.filter_sql" class="function"><a href="../generator.html#Generator.filter_sql">filter_sql</a></dd>
+ <dd id="Spark2.Generator.hint_sql" class="function"><a href="../generator.html#Generator.hint_sql">hint_sql</a></dd>
+ <dd id="Spark2.Generator.index_sql" class="function"><a href="../generator.html#Generator.index_sql">index_sql</a></dd>
+ <dd id="Spark2.Generator.identifier_sql" class="function"><a href="../generator.html#Generator.identifier_sql">identifier_sql</a></dd>
+ <dd id="Spark2.Generator.inputoutputformat_sql" class="function"><a href="../generator.html#Generator.inputoutputformat_sql">inputoutputformat_sql</a></dd>
+ <dd id="Spark2.Generator.national_sql" class="function"><a href="../generator.html#Generator.national_sql">national_sql</a></dd>
+ <dd id="Spark2.Generator.partition_sql" class="function"><a href="../generator.html#Generator.partition_sql">partition_sql</a></dd>
+ <dd id="Spark2.Generator.properties_sql" class="function"><a href="../generator.html#Generator.properties_sql">properties_sql</a></dd>
+ <dd id="Spark2.Generator.root_properties" class="function"><a href="../generator.html#Generator.root_properties">root_properties</a></dd>
+ <dd id="Spark2.Generator.properties" class="function"><a href="../generator.html#Generator.properties">properties</a></dd>
+ <dd id="Spark2.Generator.locate_properties" class="function"><a href="../generator.html#Generator.locate_properties">locate_properties</a></dd>
+ <dd id="Spark2.Generator.property_sql" class="function"><a href="../generator.html#Generator.property_sql">property_sql</a></dd>
+ <dd id="Spark2.Generator.likeproperty_sql" class="function"><a href="../generator.html#Generator.likeproperty_sql">likeproperty_sql</a></dd>
+ <dd id="Spark2.Generator.fallbackproperty_sql" class="function"><a href="../generator.html#Generator.fallbackproperty_sql">fallbackproperty_sql</a></dd>
+ <dd id="Spark2.Generator.journalproperty_sql" class="function"><a href="../generator.html#Generator.journalproperty_sql">journalproperty_sql</a></dd>
+ <dd id="Spark2.Generator.freespaceproperty_sql" class="function"><a href="../generator.html#Generator.freespaceproperty_sql">freespaceproperty_sql</a></dd>
+ <dd id="Spark2.Generator.afterjournalproperty_sql" class="function"><a href="../generator.html#Generator.afterjournalproperty_sql">afterjournalproperty_sql</a></dd>
+ <dd id="Spark2.Generator.checksumproperty_sql" class="function"><a href="../generator.html#Generator.checksumproperty_sql">checksumproperty_sql</a></dd>
+ <dd id="Spark2.Generator.mergeblockratioproperty_sql" class="function"><a href="../generator.html#Generator.mergeblockratioproperty_sql">mergeblockratioproperty_sql</a></dd>
+ <dd id="Spark2.Generator.datablocksizeproperty_sql" class="function"><a href="../generator.html#Generator.datablocksizeproperty_sql">datablocksizeproperty_sql</a></dd>
+ <dd id="Spark2.Generator.blockcompressionproperty_sql" class="function"><a href="../generator.html#Generator.blockcompressionproperty_sql">blockcompressionproperty_sql</a></dd>
+ <dd id="Spark2.Generator.isolatedloadingproperty_sql" class="function"><a href="../generator.html#Generator.isolatedloadingproperty_sql">isolatedloadingproperty_sql</a></dd>
+ <dd id="Spark2.Generator.lockingproperty_sql" class="function"><a href="../generator.html#Generator.lockingproperty_sql">lockingproperty_sql</a></dd>
+ <dd id="Spark2.Generator.withdataproperty_sql" class="function"><a href="../generator.html#Generator.withdataproperty_sql">withdataproperty_sql</a></dd>
+ <dd id="Spark2.Generator.insert_sql" class="function"><a href="../generator.html#Generator.insert_sql">insert_sql</a></dd>
+ <dd id="Spark2.Generator.intersect_sql" class="function"><a href="../generator.html#Generator.intersect_sql">intersect_sql</a></dd>
+ <dd id="Spark2.Generator.intersect_op" class="function"><a href="../generator.html#Generator.intersect_op">intersect_op</a></dd>
+ <dd id="Spark2.Generator.introducer_sql" class="function"><a href="../generator.html#Generator.introducer_sql">introducer_sql</a></dd>
+ <dd id="Spark2.Generator.pseudotype_sql" class="function"><a href="../generator.html#Generator.pseudotype_sql">pseudotype_sql</a></dd>
+ <dd id="Spark2.Generator.onconflict_sql" class="function"><a href="../generator.html#Generator.onconflict_sql">onconflict_sql</a></dd>
+ <dd id="Spark2.Generator.returning_sql" class="function"><a href="../generator.html#Generator.returning_sql">returning_sql</a></dd>
+ <dd id="Spark2.Generator.rowformatdelimitedproperty_sql" class="function"><a href="../generator.html#Generator.rowformatdelimitedproperty_sql">rowformatdelimitedproperty_sql</a></dd>
+ <dd id="Spark2.Generator.table_sql" class="function"><a href="../generator.html#Generator.table_sql">table_sql</a></dd>
+ <dd id="Spark2.Generator.tablesample_sql" class="function"><a href="../generator.html#Generator.tablesample_sql">tablesample_sql</a></dd>
+ <dd id="Spark2.Generator.pivot_sql" class="function"><a href="../generator.html#Generator.pivot_sql">pivot_sql</a></dd>
+ <dd id="Spark2.Generator.tuple_sql" class="function"><a href="../generator.html#Generator.tuple_sql">tuple_sql</a></dd>
+ <dd id="Spark2.Generator.update_sql" class="function"><a href="../generator.html#Generator.update_sql">update_sql</a></dd>
+ <dd id="Spark2.Generator.values_sql" class="function"><a href="../generator.html#Generator.values_sql">values_sql</a></dd>
+ <dd id="Spark2.Generator.var_sql" class="function"><a href="../generator.html#Generator.var_sql">var_sql</a></dd>
+ <dd id="Spark2.Generator.into_sql" class="function"><a href="../generator.html#Generator.into_sql">into_sql</a></dd>
+ <dd id="Spark2.Generator.from_sql" class="function"><a href="../generator.html#Generator.from_sql">from_sql</a></dd>
+ <dd id="Spark2.Generator.group_sql" class="function"><a href="../generator.html#Generator.group_sql">group_sql</a></dd>
+ <dd id="Spark2.Generator.having_sql" class="function"><a href="../generator.html#Generator.having_sql">having_sql</a></dd>
+ <dd id="Spark2.Generator.join_sql" class="function"><a href="../generator.html#Generator.join_sql">join_sql</a></dd>
+ <dd id="Spark2.Generator.lambda_sql" class="function"><a href="../generator.html#Generator.lambda_sql">lambda_sql</a></dd>
+ <dd id="Spark2.Generator.lateral_sql" class="function"><a href="../generator.html#Generator.lateral_sql">lateral_sql</a></dd>
+ <dd id="Spark2.Generator.limit_sql" class="function"><a href="../generator.html#Generator.limit_sql">limit_sql</a></dd>
+ <dd id="Spark2.Generator.offset_sql" class="function"><a href="../generator.html#Generator.offset_sql">offset_sql</a></dd>
+ <dd id="Spark2.Generator.setitem_sql" class="function"><a href="../generator.html#Generator.setitem_sql">setitem_sql</a></dd>
+ <dd id="Spark2.Generator.set_sql" class="function"><a href="../generator.html#Generator.set_sql">set_sql</a></dd>
+ <dd id="Spark2.Generator.pragma_sql" class="function"><a href="../generator.html#Generator.pragma_sql">pragma_sql</a></dd>
+ <dd id="Spark2.Generator.lock_sql" class="function"><a href="../generator.html#Generator.lock_sql">lock_sql</a></dd>
+ <dd id="Spark2.Generator.literal_sql" class="function"><a href="../generator.html#Generator.literal_sql">literal_sql</a></dd>
+ <dd id="Spark2.Generator.loaddata_sql" class="function"><a href="../generator.html#Generator.loaddata_sql">loaddata_sql</a></dd>
+ <dd id="Spark2.Generator.null_sql" class="function"><a href="../generator.html#Generator.null_sql">null_sql</a></dd>
+ <dd id="Spark2.Generator.boolean_sql" class="function"><a href="../generator.html#Generator.boolean_sql">boolean_sql</a></dd>
+ <dd id="Spark2.Generator.order_sql" class="function"><a href="../generator.html#Generator.order_sql">order_sql</a></dd>
+ <dd id="Spark2.Generator.cluster_sql" class="function"><a href="../generator.html#Generator.cluster_sql">cluster_sql</a></dd>
+ <dd id="Spark2.Generator.distribute_sql" class="function"><a href="../generator.html#Generator.distribute_sql">distribute_sql</a></dd>
+ <dd id="Spark2.Generator.sort_sql" class="function"><a href="../generator.html#Generator.sort_sql">sort_sql</a></dd>
+ <dd id="Spark2.Generator.ordered_sql" class="function"><a href="../generator.html#Generator.ordered_sql">ordered_sql</a></dd>
+ <dd id="Spark2.Generator.matchrecognize_sql" class="function"><a href="../generator.html#Generator.matchrecognize_sql">matchrecognize_sql</a></dd>
+ <dd id="Spark2.Generator.query_modifiers" class="function"><a href="../generator.html#Generator.query_modifiers">query_modifiers</a></dd>
+ <dd id="Spark2.Generator.select_sql" class="function"><a href="../generator.html#Generator.select_sql">select_sql</a></dd>
+ <dd id="Spark2.Generator.schema_sql" class="function"><a href="../generator.html#Generator.schema_sql">schema_sql</a></dd>
+ <dd id="Spark2.Generator.star_sql" class="function"><a href="../generator.html#Generator.star_sql">star_sql</a></dd>
+ <dd id="Spark2.Generator.structkwarg_sql" class="function"><a href="../generator.html#Generator.structkwarg_sql">structkwarg_sql</a></dd>
+ <dd id="Spark2.Generator.parameter_sql" class="function"><a href="../generator.html#Generator.parameter_sql">parameter_sql</a></dd>
+ <dd id="Spark2.Generator.sessionparameter_sql" class="function"><a href="../generator.html#Generator.sessionparameter_sql">sessionparameter_sql</a></dd>
+ <dd id="Spark2.Generator.placeholder_sql" class="function"><a href="../generator.html#Generator.placeholder_sql">placeholder_sql</a></dd>
+ <dd id="Spark2.Generator.subquery_sql" class="function"><a href="../generator.html#Generator.subquery_sql">subquery_sql</a></dd>
+ <dd id="Spark2.Generator.qualify_sql" class="function"><a href="../generator.html#Generator.qualify_sql">qualify_sql</a></dd>
+ <dd id="Spark2.Generator.union_sql" class="function"><a href="../generator.html#Generator.union_sql">union_sql</a></dd>
+ <dd id="Spark2.Generator.union_op" class="function"><a href="../generator.html#Generator.union_op">union_op</a></dd>
+ <dd id="Spark2.Generator.unnest_sql" class="function"><a href="../generator.html#Generator.unnest_sql">unnest_sql</a></dd>
+ <dd id="Spark2.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
+ <dd id="Spark2.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
+ <dd id="Spark2.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
+ <dd id="Spark2.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
+ <dd id="Spark2.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
+ <dd id="Spark2.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
+ <dd id="Spark2.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
+ <dd id="Spark2.Generator.all_sql" class="function"><a href="../generator.html#Generator.all_sql">all_sql</a></dd>
+ <dd id="Spark2.Generator.any_sql" class="function"><a href="../generator.html#Generator.any_sql">any_sql</a></dd>
+ <dd id="Spark2.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
+ <dd id="Spark2.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
+ <dd id="Spark2.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Spark2.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
+ <dd id="Spark2.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
+ <dd id="Spark2.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
+ <dd id="Spark2.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
+ <dd id="Spark2.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
+ <dd id="Spark2.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
+ <dd id="Spark2.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
+ <dd id="Spark2.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
+ <dd id="Spark2.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
+ <dd id="Spark2.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
+ <dd id="Spark2.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
+ <dd id="Spark2.Generator.jsonobject_sql" class="function"><a href="../generator.html#Generator.jsonobject_sql">jsonobject_sql</a></dd>
+ <dd id="Spark2.Generator.in_sql" class="function"><a href="../generator.html#Generator.in_sql">in_sql</a></dd>
+ <dd id="Spark2.Generator.in_unnest_op" class="function"><a href="../generator.html#Generator.in_unnest_op">in_unnest_op</a></dd>
+ <dd id="Spark2.Generator.interval_sql" class="function"><a href="../generator.html#Generator.interval_sql">interval_sql</a></dd>
+ <dd id="Spark2.Generator.return_sql" class="function"><a href="../generator.html#Generator.return_sql">return_sql</a></dd>
+ <dd id="Spark2.Generator.reference_sql" class="function"><a href="../generator.html#Generator.reference_sql">reference_sql</a></dd>
+ <dd id="Spark2.Generator.anonymous_sql" class="function"><a href="../generator.html#Generator.anonymous_sql">anonymous_sql</a></dd>
+ <dd id="Spark2.Generator.paren_sql" class="function"><a href="../generator.html#Generator.paren_sql">paren_sql</a></dd>
+ <dd id="Spark2.Generator.neg_sql" class="function"><a href="../generator.html#Generator.neg_sql">neg_sql</a></dd>
+ <dd id="Spark2.Generator.not_sql" class="function"><a href="../generator.html#Generator.not_sql">not_sql</a></dd>
+ <dd id="Spark2.Generator.alias_sql" class="function"><a href="../generator.html#Generator.alias_sql">alias_sql</a></dd>
+ <dd id="Spark2.Generator.aliases_sql" class="function"><a href="../generator.html#Generator.aliases_sql">aliases_sql</a></dd>
+ <dd id="Spark2.Generator.attimezone_sql" class="function"><a href="../generator.html#Generator.attimezone_sql">attimezone_sql</a></dd>
+ <dd id="Spark2.Generator.add_sql" class="function"><a href="../generator.html#Generator.add_sql">add_sql</a></dd>
+ <dd id="Spark2.Generator.and_sql" class="function"><a href="../generator.html#Generator.and_sql">and_sql</a></dd>
+ <dd id="Spark2.Generator.connector_sql" class="function"><a href="../generator.html#Generator.connector_sql">connector_sql</a></dd>
+ <dd id="Spark2.Generator.bitwiseand_sql" class="function"><a href="../generator.html#Generator.bitwiseand_sql">bitwiseand_sql</a></dd>
+ <dd id="Spark2.Generator.bitwiseleftshift_sql" class="function"><a href="../generator.html#Generator.bitwiseleftshift_sql">bitwiseleftshift_sql</a></dd>
+ <dd id="Spark2.Generator.bitwisenot_sql" class="function"><a href="../generator.html#Generator.bitwisenot_sql">bitwisenot_sql</a></dd>
+ <dd id="Spark2.Generator.bitwiseor_sql" class="function"><a href="../generator.html#Generator.bitwiseor_sql">bitwiseor_sql</a></dd>
+ <dd id="Spark2.Generator.bitwiserightshift_sql" class="function"><a href="../generator.html#Generator.bitwiserightshift_sql">bitwiserightshift_sql</a></dd>
+ <dd id="Spark2.Generator.bitwisexor_sql" class="function"><a href="../generator.html#Generator.bitwisexor_sql">bitwisexor_sql</a></dd>
+ <dd id="Spark2.Generator.currentdate_sql" class="function"><a href="../generator.html#Generator.currentdate_sql">currentdate_sql</a></dd>
+ <dd id="Spark2.Generator.collate_sql" class="function"><a href="../generator.html#Generator.collate_sql">collate_sql</a></dd>
+ <dd id="Spark2.Generator.command_sql" class="function"><a href="../generator.html#Generator.command_sql">command_sql</a></dd>
+ <dd id="Spark2.Generator.comment_sql" class="function"><a href="../generator.html#Generator.comment_sql">comment_sql</a></dd>
+ <dd id="Spark2.Generator.transaction_sql" class="function"><a href="../generator.html#Generator.transaction_sql">transaction_sql</a></dd>
+ <dd id="Spark2.Generator.commit_sql" class="function"><a href="../generator.html#Generator.commit_sql">commit_sql</a></dd>
+ <dd id="Spark2.Generator.rollback_sql" class="function"><a href="../generator.html#Generator.rollback_sql">rollback_sql</a></dd>
+ <dd id="Spark2.Generator.altercolumn_sql" class="function"><a href="../generator.html#Generator.altercolumn_sql">altercolumn_sql</a></dd>
+ <dd id="Spark2.Generator.renametable_sql" class="function"><a href="../generator.html#Generator.renametable_sql">renametable_sql</a></dd>
+ <dd id="Spark2.Generator.altertable_sql" class="function"><a href="../generator.html#Generator.altertable_sql">altertable_sql</a></dd>
+ <dd id="Spark2.Generator.droppartition_sql" class="function"><a href="../generator.html#Generator.droppartition_sql">droppartition_sql</a></dd>
+ <dd id="Spark2.Generator.addconstraint_sql" class="function"><a href="../generator.html#Generator.addconstraint_sql">addconstraint_sql</a></dd>
+ <dd id="Spark2.Generator.distinct_sql" class="function"><a href="../generator.html#Generator.distinct_sql">distinct_sql</a></dd>
+ <dd id="Spark2.Generator.ignorenulls_sql" class="function"><a href="../generator.html#Generator.ignorenulls_sql">ignorenulls_sql</a></dd>
+ <dd id="Spark2.Generator.respectnulls_sql" class="function"><a href="../generator.html#Generator.respectnulls_sql">respectnulls_sql</a></dd>
+ <dd id="Spark2.Generator.intdiv_sql" class="function"><a href="../generator.html#Generator.intdiv_sql">intdiv_sql</a></dd>
+ <dd id="Spark2.Generator.dpipe_sql" class="function"><a href="../generator.html#Generator.dpipe_sql">dpipe_sql</a></dd>
+ <dd id="Spark2.Generator.div_sql" class="function"><a href="../generator.html#Generator.div_sql">div_sql</a></dd>
+ <dd id="Spark2.Generator.overlaps_sql" class="function"><a href="../generator.html#Generator.overlaps_sql">overlaps_sql</a></dd>
+ <dd id="Spark2.Generator.distance_sql" class="function"><a href="../generator.html#Generator.distance_sql">distance_sql</a></dd>
+ <dd id="Spark2.Generator.dot_sql" class="function"><a href="../generator.html#Generator.dot_sql">dot_sql</a></dd>
+ <dd id="Spark2.Generator.eq_sql" class="function"><a href="../generator.html#Generator.eq_sql">eq_sql</a></dd>
+ <dd id="Spark2.Generator.escape_sql" class="function"><a href="../generator.html#Generator.escape_sql">escape_sql</a></dd>
+ <dd id="Spark2.Generator.glob_sql" class="function"><a href="../generator.html#Generator.glob_sql">glob_sql</a></dd>
+ <dd id="Spark2.Generator.gt_sql" class="function"><a href="../generator.html#Generator.gt_sql">gt_sql</a></dd>
+ <dd id="Spark2.Generator.gte_sql" class="function"><a href="../generator.html#Generator.gte_sql">gte_sql</a></dd>
+ <dd id="Spark2.Generator.ilike_sql" class="function"><a href="../generator.html#Generator.ilike_sql">ilike_sql</a></dd>
+ <dd id="Spark2.Generator.ilikeany_sql" class="function"><a href="../generator.html#Generator.ilikeany_sql">ilikeany_sql</a></dd>
+ <dd id="Spark2.Generator.is_sql" class="function"><a href="../generator.html#Generator.is_sql">is_sql</a></dd>
+ <dd id="Spark2.Generator.like_sql" class="function"><a href="../generator.html#Generator.like_sql">like_sql</a></dd>
+ <dd id="Spark2.Generator.likeany_sql" class="function"><a href="../generator.html#Generator.likeany_sql">likeany_sql</a></dd>
+ <dd id="Spark2.Generator.similarto_sql" class="function"><a href="../generator.html#Generator.similarto_sql">similarto_sql</a></dd>
+ <dd id="Spark2.Generator.lt_sql" class="function"><a href="../generator.html#Generator.lt_sql">lt_sql</a></dd>
+ <dd id="Spark2.Generator.lte_sql" class="function"><a href="../generator.html#Generator.lte_sql">lte_sql</a></dd>
+ <dd id="Spark2.Generator.mod_sql" class="function"><a href="../generator.html#Generator.mod_sql">mod_sql</a></dd>
+ <dd id="Spark2.Generator.mul_sql" class="function"><a href="../generator.html#Generator.mul_sql">mul_sql</a></dd>
+ <dd id="Spark2.Generator.neq_sql" class="function"><a href="../generator.html#Generator.neq_sql">neq_sql</a></dd>
+ <dd id="Spark2.Generator.nullsafeeq_sql" class="function"><a href="../generator.html#Generator.nullsafeeq_sql">nullsafeeq_sql</a></dd>
+ <dd id="Spark2.Generator.nullsafeneq_sql" class="function"><a href="../generator.html#Generator.nullsafeneq_sql">nullsafeneq_sql</a></dd>
+ <dd id="Spark2.Generator.or_sql" class="function"><a href="../generator.html#Generator.or_sql">or_sql</a></dd>
+ <dd id="Spark2.Generator.slice_sql" class="function"><a href="../generator.html#Generator.slice_sql">slice_sql</a></dd>
+ <dd id="Spark2.Generator.sub_sql" class="function"><a href="../generator.html#Generator.sub_sql">sub_sql</a></dd>
+ <dd id="Spark2.Generator.trycast_sql" class="function"><a href="../generator.html#Generator.trycast_sql">trycast_sql</a></dd>
+ <dd id="Spark2.Generator.use_sql" class="function"><a href="../generator.html#Generator.use_sql">use_sql</a></dd>
+ <dd id="Spark2.Generator.binary" class="function"><a href="../generator.html#Generator.binary">binary</a></dd>
+ <dd id="Spark2.Generator.function_fallback_sql" class="function"><a href="../generator.html#Generator.function_fallback_sql">function_fallback_sql</a></dd>
+ <dd id="Spark2.Generator.func" class="function"><a href="../generator.html#Generator.func">func</a></dd>
+ <dd id="Spark2.Generator.format_args" class="function"><a href="../generator.html#Generator.format_args">format_args</a></dd>
+ <dd id="Spark2.Generator.text_width" class="function"><a href="../generator.html#Generator.text_width">text_width</a></dd>
+ <dd id="Spark2.Generator.format_time" class="function"><a href="../generator.html#Generator.format_time">format_time</a></dd>
+ <dd id="Spark2.Generator.expressions" class="function"><a href="../generator.html#Generator.expressions">expressions</a></dd>
+ <dd id="Spark2.Generator.op_expressions" class="function"><a href="../generator.html#Generator.op_expressions">op_expressions</a></dd>
+ <dd id="Spark2.Generator.naked_property" class="function"><a href="../generator.html#Generator.naked_property">naked_property</a></dd>
+ <dd id="Spark2.Generator.set_operation" class="function"><a href="../generator.html#Generator.set_operation">set_operation</a></dd>
+ <dd id="Spark2.Generator.tag_sql" class="function"><a href="../generator.html#Generator.tag_sql">tag_sql</a></dd>
+ <dd id="Spark2.Generator.token_sql" class="function"><a href="../generator.html#Generator.token_sql">token_sql</a></dd>
+ <dd id="Spark2.Generator.userdefinedfunction_sql" class="function"><a href="../generator.html#Generator.userdefinedfunction_sql">userdefinedfunction_sql</a></dd>
+ <dd id="Spark2.Generator.joinhint_sql" class="function"><a href="../generator.html#Generator.joinhint_sql">joinhint_sql</a></dd>
+ <dd id="Spark2.Generator.kwarg_sql" class="function"><a href="../generator.html#Generator.kwarg_sql">kwarg_sql</a></dd>
+ <dd id="Spark2.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
+ <dd id="Spark2.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
+ <dd id="Spark2.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
+
+ </div>
+ <div><dt><a href="hive.html#Hive.Generator">sqlglot.dialects.hive.Hive.Generator</a></dt>
+ <dd id="Spark2.Generator.arrayagg_sql" class="function"><a href="hive.html#Hive.Generator.arrayagg_sql">arrayagg_sql</a></dd>
+ <dd id="Spark2.Generator.with_properties" class="function"><a href="hive.html#Hive.Generator.with_properties">with_properties</a></dd>
+ <dd id="Spark2.Generator.datatype_sql" class="function"><a href="hive.html#Hive.Generator.datatype_sql">datatype_sql</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="Spark2.Tokenizer">
+ <input id="Spark2.Tokenizer-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr class">
+
+ <span class="def">class</span>
+ <span class="name">Spark2.Tokenizer</span><wbr>(<span class="base"><a href="hive.html#Hive.Tokenizer">sqlglot.dialects.hive.Hive.Tokenizer</a></span>):
+
+ <label class="view-source-button" for="Spark2.Tokenizer-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Spark2.Tokenizer"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Tokenizer-225"><a href="#Spark2.Tokenizer-225"><span class="linenos">225</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
+</span><span id="Spark2.Tokenizer-226"><a href="#Spark2.Tokenizer-226"><span class="linenos">226</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></pre></div>
+
+
+
+
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="../tokens.html#Tokenizer">sqlglot.tokens.Tokenizer</a></dt>
+ <dd id="Spark2.Tokenizer.reset" class="function"><a href="../tokens.html#Tokenizer.reset">reset</a></dd>
+ <dd id="Spark2.Tokenizer.tokenize" class="function"><a href="../tokens.html#Tokenizer.tokenize">tokenize</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ </main>
+<script>
+ function escapeHTML(html) {
+ return document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML;
+ }
+
+ const originalContent = document.querySelector("main.pdoc");
+ let currentContent = originalContent;
+
+ function setContent(innerHTML) {
+ let elem;
+ if (innerHTML) {
+ elem = document.createElement("main");
+ elem.classList.add("pdoc");
+ elem.innerHTML = innerHTML;
+ } else {
+ elem = originalContent;
+ }
+ if (currentContent !== elem) {
+ currentContent.replaceWith(elem);
+ currentContent = elem;
+ }
+ }
+
+ function getSearchTerm() {
+ return (new URL(window.location)).searchParams.get("search");
+ }
+
+ const searchBox = document.querySelector(".pdoc input[type=search]");
+ searchBox.addEventListener("input", function () {
+ let url = new URL(window.location);
+ if (searchBox.value.trim()) {
+ url.hash = "";
+ url.searchParams.set("search", searchBox.value);
+ } else {
+ url.searchParams.delete("search");
+ }
+ history.replaceState("", "", url.toString());
+ onInput();
+ });
+ window.addEventListener("popstate", onInput);
+
+
+ let search, searchErr;
+
+ async function initialize() {
+ try {
+ search = await new Promise((resolve, reject) => {
+ const script = document.createElement("script");
+ script.type = "text/javascript";
+ script.async = true;
+ script.onload = () => resolve(window.pdocSearch);
+ script.onerror = (e) => reject(e);
+ script.src = "../../search.js";
+ document.getElementsByTagName("head")[0].appendChild(script);
+ });
+ } catch (e) {
+ console.error("Cannot fetch pdoc search index");
+ searchErr = "Cannot fetch search index.";
+ }
+ onInput();
+
+ document.querySelector("nav.pdoc").addEventListener("click", e => {
+ if (e.target.hash) {
+ searchBox.value = "";
+ searchBox.dispatchEvent(new Event("input"));
+ }
+ });
+ }
+
+ function onInput() {
+ setContent((() => {
+ const term = getSearchTerm();
+ if (!term) {
+ return null
+ }
+ if (searchErr) {
+ return `<h3>Error: ${searchErr}</h3>`
+ }
+ if (!search) {
+ return "<h3>Searching...</h3>"
+ }
+
+ window.scrollTo({top: 0, left: 0, behavior: 'auto'});
+
+ const results = search(term);
+
+ let html;
+ if (results.length === 0) {
+ html = `No search results for '${escapeHTML(term)}'.`
+ } else {
+ html = `<h4>${results.length} search result${results.length > 1 ? "s" : ""} for '${escapeHTML(term)}'.</h4>`;
+ }
+ for (let result of results.slice(0, 10)) {
+ let doc = result.doc;
+ let url = `../../${doc.modulename.replaceAll(".", "/")}.html`;
+ if (doc.qualname) {
+ url += `#${doc.qualname}`;
+ }
+
+ let heading;
+ switch (result.doc.kind) {
+ case "function":
+ if (doc.fullname.endsWith(".__init__")) {
+ heading = `<span class="name">${doc.fullname.replace(/\.__init__$/, "")}</span>${doc.signature}`;
+ } else {
+ heading = `<span class="def">${doc.funcdef}</span> <span class="name">${doc.fullname}</span>${doc.signature}`;
+ }
+ break;
+ case "class":
+ heading = `<span class="def">class</span> <span class="name">${doc.fullname}</span>`;
+ if (doc.bases)
+ heading += `<wbr>(<span class="base">${doc.bases}</span>)`;
+ heading += `:`;
+ break;
+ case "variable":
+ heading = `<span class="name">${doc.fullname}</span>`;
+ if (doc.annotation)
+ heading += `<span class="annotation">${doc.annotation}</span>`;
+ if (doc.default_value)
+ heading += `<span class="default_value"> = ${doc.default_value}</span>`;
+ break;
+ default:
+ heading = `<span class="name">${doc.fullname}</span>`;
+ break;
+ }
+ html += `
+ <section class="search-result">
+ <a href="${url}" class="attr ${doc.kind}">${heading}</a>
+ <div class="docstring">${doc.doc}</div>
+ </section>
+ `;
+
+ }
+ return html;
+ })());
+ }
+
+ if (getSearchTerm()) {
+ initialize();
+ searchBox.value = getSearchTerm();
+ onInput();
+ } else {
+ searchBox.addEventListener("focus", initialize, {once: true});
+ }
+
+ searchBox.addEventListener("keydown", e => {
+ if (["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) {
+ let focused = currentContent.querySelector(".search-result.focused");
+ if (!focused) {
+ currentContent.querySelector(".search-result").classList.add("focused");
+ } else if (
+ e.key === "ArrowDown"
+ && focused.nextElementSibling
+ && focused.nextElementSibling.classList.contains("search-result")
+ ) {
+ focused.classList.remove("focused");
+ focused.nextElementSibling.classList.add("focused");
+ focused.nextElementSibling.scrollIntoView({
+ behavior: "smooth",
+ block: "nearest",
+ inline: "nearest"
+ });
+ } else if (
+ e.key === "ArrowUp"
+ && focused.previousElementSibling
+ && focused.previousElementSibling.classList.contains("search-result")
+ ) {
+ focused.classList.remove("focused");
+ focused.previousElementSibling.classList.add("focused");
+ focused.previousElementSibling.scrollIntoView({
+ behavior: "smooth",
+ block: "nearest",
+ inline: "nearest"
+ });
+ } else if (
+ e.key === "Enter"
+ ) {
+ focused.querySelector("a").click();
+ }
+ }
+ });
+</script></body>
+</html> \ No newline at end of file
diff --git a/docs/sqlglot/dialects/sqlite.html b/docs/sqlglot/dialects/sqlite.html
index 187ace6..36079f8 100644
--- a/docs/sqlglot/dialects/sqlite.html
+++ b/docs/sqlglot/dialects/sqlite.html
@@ -159,92 +159,94 @@
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="p">}</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="p">}</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</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-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</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-75"><a href="#L-75"><span class="linenos"> 75</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-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">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</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-83"><a href="#L-83"><span class="linenos"> 83</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_qualify</span><span class="p">]</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="p">),</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="p">}</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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">k</span><span class="p">:</span> <span class="n">exp</span><span 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-92"><a href="#L-92"><span class="linenos"> 92</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="o">.</span><span class="n">items</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="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</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-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">else</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="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="L-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="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+</span><span id="L-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="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</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="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-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="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-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">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-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@@ -303,92 +305,94 @@
</span><span id="SQLite-66"><a href="#SQLite-66"><span class="linenos"> 66</span></a>
</span><span id="SQLite-67"><a href="#SQLite-67"><span class="linenos"> 67</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite-68"><a href="#SQLite-68"><span class="linenos"> 68</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="SQLite-69"><a href="#SQLite-69"><span class="linenos"> 69</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="SQLite-70"><a href="#SQLite-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
-</span><span id="SQLite-71"><a href="#SQLite-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
-</span><span id="SQLite-72"><a href="#SQLite-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
-</span><span id="SQLite-73"><a href="#SQLite-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="SQLite-74"><a href="#SQLite-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
-</span><span id="SQLite-75"><a href="#SQLite-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="SQLite-76"><a href="#SQLite-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="SQLite-77"><a href="#SQLite-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="SQLite-78"><a href="#SQLite-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="SQLite-79"><a href="#SQLite-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="SQLite-80"><a href="#SQLite-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="SQLite-81"><a href="#SQLite-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
-</span><span id="SQLite-82"><a href="#SQLite-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
-</span><span id="SQLite-83"><a href="#SQLite-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
-</span><span id="SQLite-84"><a href="#SQLite-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="SQLite-85"><a href="#SQLite-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="SQLite-86"><a href="#SQLite-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="SQLite-87"><a href="#SQLite-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
-</span><span id="SQLite-88"><a href="#SQLite-88"><span class="linenos"> 88</span></a>
-</span><span id="SQLite-89"><a href="#SQLite-89"><span class="linenos"> 89</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite-90"><a href="#SQLite-90"><span class="linenos"> 90</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="SQLite-91"><a href="#SQLite-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="SQLite-92"><a href="#SQLite-92"><span class="linenos"> 92</span></a> <span class="p">}</span>
-</span><span id="SQLite-93"><a href="#SQLite-93"><span class="linenos"> 93</span></a>
-</span><span id="SQLite-94"><a href="#SQLite-94"><span class="linenos"> 94</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="SQLite-69"><a href="#SQLite-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
+</span><span id="SQLite-70"><a href="#SQLite-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
+</span><span id="SQLite-71"><a href="#SQLite-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
+</span><span id="SQLite-72"><a href="#SQLite-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="SQLite-73"><a href="#SQLite-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
+</span><span id="SQLite-74"><a href="#SQLite-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="SQLite-75"><a href="#SQLite-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="SQLite-76"><a href="#SQLite-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="SQLite-77"><a href="#SQLite-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="SQLite-78"><a href="#SQLite-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="SQLite-79"><a href="#SQLite-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="SQLite-80"><a href="#SQLite-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
+</span><span id="SQLite-81"><a href="#SQLite-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
+</span><span id="SQLite-82"><a href="#SQLite-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
+</span><span id="SQLite-83"><a href="#SQLite-83"><span class="linenos"> 83</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="SQLite-84"><a href="#SQLite-84"><span class="linenos"> 84</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_qualify</span><span class="p">]</span>
+</span><span id="SQLite-85"><a href="#SQLite-85"><span class="linenos"> 85</span></a> <span class="p">),</span>
+</span><span id="SQLite-86"><a href="#SQLite-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="SQLite-87"><a href="#SQLite-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="SQLite-88"><a href="#SQLite-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="SQLite-89"><a href="#SQLite-89"><span class="linenos"> 89</span></a> <span class="p">}</span>
+</span><span id="SQLite-90"><a href="#SQLite-90"><span class="linenos"> 90</span></a>
+</span><span id="SQLite-91"><a href="#SQLite-91"><span class="linenos"> 91</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite-92"><a href="#SQLite-92"><span class="linenos"> 92</span></a> <span class="n">k</span><span class="p">:</span> <span class="n">exp</span><span 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="SQLite-93"><a href="#SQLite-93"><span class="linenos"> 93</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="SQLite-94"><a href="#SQLite-94"><span class="linenos"> 94</span></a> <span class="p">}</span>
</span><span id="SQLite-95"><a href="#SQLite-95"><span class="linenos"> 95</span></a>
-</span><span id="SQLite-96"><a href="#SQLite-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite-97"><a href="#SQLite-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="SQLite-98"><a href="#SQLite-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="SQLite-99"><a href="#SQLite-99"><span class="linenos"> 99</span></a>
-</span><span id="SQLite-100"><a href="#SQLite-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite-96"><a href="#SQLite-96"><span class="linenos"> 96</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="SQLite-97"><a href="#SQLite-97"><span class="linenos"> 97</span></a>
+</span><span id="SQLite-98"><a href="#SQLite-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite-99"><a href="#SQLite-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="SQLite-100"><a href="#SQLite-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite-101"><a href="#SQLite-101"><span class="linenos">101</span></a>
-</span><span id="SQLite-102"><a href="#SQLite-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite-103"><a href="#SQLite-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="SQLite-104"><a href="#SQLite-104"><span class="linenos">104</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
-</span><span id="SQLite-105"><a href="#SQLite-105"><span class="linenos">105</span></a>
-</span><span id="SQLite-106"><a href="#SQLite-106"><span class="linenos">106</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="SQLite-102"><a href="#SQLite-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite-103"><a href="#SQLite-103"><span class="linenos">103</span></a>
+</span><span id="SQLite-104"><a href="#SQLite-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite-105"><a href="#SQLite-105"><span class="linenos">105</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="SQLite-106"><a href="#SQLite-106"><span class="linenos">106</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite-107"><a href="#SQLite-107"><span class="linenos">107</span></a>
-</span><span id="SQLite-108"><a href="#SQLite-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="SQLite-109"><a href="#SQLite-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
-</span><span id="SQLite-110"><a href="#SQLite-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
-</span><span id="SQLite-111"><a href="#SQLite-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
-</span><span id="SQLite-112"><a href="#SQLite-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
-</span><span id="SQLite-113"><a href="#SQLite-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
-</span><span id="SQLite-114"><a href="#SQLite-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
-</span><span id="SQLite-115"><a href="#SQLite-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
-</span><span id="SQLite-116"><a href="#SQLite-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite-117"><a href="#SQLite-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
-</span><span id="SQLite-118"><a href="#SQLite-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite-119"><a href="#SQLite-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
-</span><span id="SQLite-120"><a href="#SQLite-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite-121"><a href="#SQLite-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
-</span><span id="SQLite-122"><a href="#SQLite-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite-123"><a href="#SQLite-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
-</span><span id="SQLite-124"><a href="#SQLite-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite-125"><a href="#SQLite-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
-</span><span id="SQLite-126"><a href="#SQLite-126"><span class="linenos">126</span></a>
-</span><span id="SQLite-127"><a href="#SQLite-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+</span><span id="SQLite-108"><a href="#SQLite-108"><span class="linenos">108</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="SQLite-109"><a href="#SQLite-109"><span class="linenos">109</span></a>
+</span><span id="SQLite-110"><a href="#SQLite-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="SQLite-111"><a href="#SQLite-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
+</span><span id="SQLite-112"><a href="#SQLite-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
+</span><span id="SQLite-113"><a href="#SQLite-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
+</span><span id="SQLite-114"><a href="#SQLite-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
+</span><span id="SQLite-115"><a href="#SQLite-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
+</span><span id="SQLite-116"><a href="#SQLite-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
+</span><span id="SQLite-117"><a href="#SQLite-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
+</span><span id="SQLite-118"><a href="#SQLite-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite-119"><a href="#SQLite-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
+</span><span id="SQLite-120"><a href="#SQLite-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite-121"><a href="#SQLite-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
+</span><span id="SQLite-122"><a href="#SQLite-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite-123"><a href="#SQLite-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
+</span><span id="SQLite-124"><a href="#SQLite-124"><span class="linenos">124</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite-125"><a href="#SQLite-125"><span class="linenos">125</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
+</span><span id="SQLite-126"><a href="#SQLite-126"><span class="linenos">126</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite-127"><a href="#SQLite-127"><span class="linenos">127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite-128"><a href="#SQLite-128"><span class="linenos">128</span></a>
-</span><span id="SQLite-129"><a href="#SQLite-129"><span class="linenos">129</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
-</span><span id="SQLite-130"><a href="#SQLite-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
-</span><span id="SQLite-131"><a href="#SQLite-131"><span class="linenos">131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite-132"><a href="#SQLite-132"><span class="linenos">132</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
-</span><span id="SQLite-133"><a href="#SQLite-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite-134"><a href="#SQLite-134"><span class="linenos">134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="SQLite-135"><a href="#SQLite-135"><span class="linenos">135</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="SQLite-136"><a href="#SQLite-136"><span class="linenos">136</span></a>
-</span><span id="SQLite-137"><a href="#SQLite-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="SQLite-138"><a href="#SQLite-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
-</span><span id="SQLite-139"><a href="#SQLite-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite-140"><a href="#SQLite-140"><span class="linenos">140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite-141"><a href="#SQLite-141"><span class="linenos">141</span></a>
-</span><span id="SQLite-142"><a href="#SQLite-142"><span class="linenos">142</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
-</span><span id="SQLite-143"><a href="#SQLite-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="SQLite-144"><a href="#SQLite-144"><span class="linenos">144</span></a>
-</span><span id="SQLite-145"><a href="#SQLite-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite-146"><a href="#SQLite-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="SQLite-147"><a href="#SQLite-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="SQLite-148"><a href="#SQLite-148"><span class="linenos">148</span></a>
-</span><span id="SQLite-149"><a href="#SQLite-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite-129"><a href="#SQLite-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+</span><span id="SQLite-130"><a href="#SQLite-130"><span class="linenos">130</span></a>
+</span><span id="SQLite-131"><a href="#SQLite-131"><span class="linenos">131</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
+</span><span id="SQLite-132"><a href="#SQLite-132"><span class="linenos">132</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
+</span><span id="SQLite-133"><a href="#SQLite-133"><span class="linenos">133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite-134"><a href="#SQLite-134"><span class="linenos">134</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
+</span><span id="SQLite-135"><a href="#SQLite-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite-136"><a href="#SQLite-136"><span class="linenos">136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="SQLite-137"><a href="#SQLite-137"><span class="linenos">137</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
+</span><span id="SQLite-138"><a href="#SQLite-138"><span class="linenos">138</span></a>
+</span><span id="SQLite-139"><a href="#SQLite-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="SQLite-140"><a href="#SQLite-140"><span class="linenos">140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
+</span><span id="SQLite-141"><a href="#SQLite-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite-142"><a href="#SQLite-142"><span class="linenos">142</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite-143"><a href="#SQLite-143"><span class="linenos">143</span></a>
+</span><span id="SQLite-144"><a href="#SQLite-144"><span class="linenos">144</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
+</span><span id="SQLite-145"><a href="#SQLite-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="SQLite-146"><a href="#SQLite-146"><span class="linenos">146</span></a>
+</span><span id="SQLite-147"><a href="#SQLite-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite-148"><a href="#SQLite-148"><span class="linenos">148</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="SQLite-149"><a href="#SQLite-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite-150"><a href="#SQLite-150"><span class="linenos">150</span></a>
-</span><span id="SQLite-151"><a href="#SQLite-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite-152"><a href="#SQLite-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite-153"><a href="#SQLite-153"><span class="linenos">153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="SQLite-154"><a href="#SQLite-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
+</span><span id="SQLite-151"><a href="#SQLite-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite-152"><a href="#SQLite-152"><span class="linenos">152</span></a>
+</span><span id="SQLite-153"><a href="#SQLite-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite-154"><a href="#SQLite-154"><span class="linenos">154</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite-155"><a href="#SQLite-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="SQLite-156"><a href="#SQLite-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@@ -546,92 +550,94 @@ Default: "nulls_are_small"</li>
</span><span id="SQLite.Generator-66"><a href="#SQLite.Generator-66"><span class="linenos"> 66</span></a>
</span><span id="SQLite.Generator-67"><a href="#SQLite.Generator-67"><span class="linenos"> 67</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="SQLite.Generator-68"><a href="#SQLite.Generator-68"><span class="linenos"> 68</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="SQLite.Generator-69"><a href="#SQLite.Generator-69"><span class="linenos"> 69</span></a> <span class="o">**</span><span class="n">transforms</span><span class="o">.</span><span class="n">ELIMINATE_QUALIFY</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="SQLite.Generator-70"><a href="#SQLite.Generator-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
-</span><span id="SQLite.Generator-71"><a href="#SQLite.Generator-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-72"><a href="#SQLite.Generator-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-73"><a href="#SQLite.Generator-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
-</span><span id="SQLite.Generator-74"><a href="#SQLite.Generator-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-75"><a href="#SQLite.Generator-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="SQLite.Generator-76"><a href="#SQLite.Generator-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-77"><a href="#SQLite.Generator-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-78"><a href="#SQLite.Generator-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-79"><a href="#SQLite.Generator-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-80"><a href="#SQLite.Generator-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-81"><a href="#SQLite.Generator-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
-</span><span id="SQLite.Generator-82"><a href="#SQLite.Generator-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
-</span><span id="SQLite.Generator-83"><a href="#SQLite.Generator-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
-</span><span id="SQLite.Generator-84"><a href="#SQLite.Generator-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-85"><a href="#SQLite.Generator-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
-</span><span id="SQLite.Generator-86"><a href="#SQLite.Generator-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
-</span><span id="SQLite.Generator-87"><a href="#SQLite.Generator-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
-</span><span id="SQLite.Generator-88"><a href="#SQLite.Generator-88"><span class="linenos"> 88</span></a>
-</span><span id="SQLite.Generator-89"><a href="#SQLite.Generator-89"><span class="linenos"> 89</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SQLite.Generator-90"><a href="#SQLite.Generator-90"><span class="linenos"> 90</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="SQLite.Generator-91"><a href="#SQLite.Generator-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="SQLite.Generator-92"><a href="#SQLite.Generator-92"><span class="linenos"> 92</span></a> <span class="p">}</span>
-</span><span id="SQLite.Generator-93"><a href="#SQLite.Generator-93"><span class="linenos"> 93</span></a>
-</span><span id="SQLite.Generator-94"><a href="#SQLite.Generator-94"><span class="linenos"> 94</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="SQLite.Generator-69"><a href="#SQLite.Generator-69"><span class="linenos"> 69</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CountIf</span><span class="p">:</span> <span class="n">count_if_to_sum</span><span class="p">,</span>
+</span><span id="SQLite.Generator-70"><a href="#SQLite.Generator-70"><span class="linenos"> 70</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_DATE&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-71"><a href="#SQLite.Generator-71"><span class="linenos"> 71</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIME&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-72"><a href="#SQLite.Generator-72"><span class="linenos"> 72</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">_</span><span class="p">:</span> <span class="s2">&quot;CURRENT_TIMESTAMP&quot;</span><span class="p">,</span>
+</span><span id="SQLite.Generator-73"><a href="#SQLite.Generator-73"><span class="linenos"> 73</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="n">_date_add_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-74"><a href="#SQLite.Generator-74"><span class="linenos"> 74</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateStrToDate</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="SQLite.Generator-75"><a href="#SQLite.Generator-75"><span class="linenos"> 75</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">:</span> <span class="n">no_ilike_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-76"><a href="#SQLite.Generator-76"><span class="linenos"> 76</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-77"><a href="#SQLite.Generator-77"><span class="linenos"> 77</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-78"><a href="#SQLite.Generator-78"><span class="linenos"> 78</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-79"><a href="#SQLite.Generator-79"><span class="linenos"> 79</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_scalar_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-80"><a href="#SQLite.Generator-80"><span class="linenos"> 80</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Levenshtein</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;EDITDIST3&quot;</span><span class="p">),</span>
+</span><span id="SQLite.Generator-81"><a href="#SQLite.Generator-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">),</span>
+</span><span id="SQLite.Generator-82"><a href="#SQLite.Generator-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">),</span>
+</span><span id="SQLite.Generator-83"><a href="#SQLite.Generator-83"><span class="linenos"> 83</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="SQLite.Generator-84"><a href="#SQLite.Generator-84"><span class="linenos"> 84</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_qualify</span><span class="p">]</span>
+</span><span id="SQLite.Generator-85"><a href="#SQLite.Generator-85"><span class="linenos"> 85</span></a> <span class="p">),</span>
+</span><span id="SQLite.Generator-86"><a href="#SQLite.Generator-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">:</span> <span class="n">no_tablesample_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-87"><a href="#SQLite.Generator-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">),</span>
+</span><span id="SQLite.Generator-88"><a href="#SQLite.Generator-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">:</span> <span class="n">no_trycast_sql</span><span class="p">,</span>
+</span><span id="SQLite.Generator-89"><a href="#SQLite.Generator-89"><span class="linenos"> 89</span></a> <span class="p">}</span>
+</span><span id="SQLite.Generator-90"><a href="#SQLite.Generator-90"><span class="linenos"> 90</span></a>
+</span><span id="SQLite.Generator-91"><a href="#SQLite.Generator-91"><span class="linenos"> 91</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SQLite.Generator-92"><a href="#SQLite.Generator-92"><span class="linenos"> 92</span></a> <span class="n">k</span><span class="p">:</span> <span class="n">exp</span><span 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="SQLite.Generator-93"><a href="#SQLite.Generator-93"><span class="linenos"> 93</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">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="SQLite.Generator-94"><a href="#SQLite.Generator-94"><span class="linenos"> 94</span></a> <span class="p">}</span>
</span><span id="SQLite.Generator-95"><a href="#SQLite.Generator-95"><span class="linenos"> 95</span></a>
-</span><span id="SQLite.Generator-96"><a href="#SQLite.Generator-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator-97"><a href="#SQLite.Generator-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="SQLite.Generator-98"><a href="#SQLite.Generator-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="SQLite.Generator-99"><a href="#SQLite.Generator-99"><span class="linenos"> 99</span></a>
-</span><span id="SQLite.Generator-100"><a href="#SQLite.Generator-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite.Generator-96"><a href="#SQLite.Generator-96"><span class="linenos"> 96</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
+</span><span id="SQLite.Generator-97"><a href="#SQLite.Generator-97"><span class="linenos"> 97</span></a>
+</span><span id="SQLite.Generator-98"><a href="#SQLite.Generator-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator-99"><a href="#SQLite.Generator-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="SQLite.Generator-100"><a href="#SQLite.Generator-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite.Generator-101"><a href="#SQLite.Generator-101"><span class="linenos">101</span></a>
-</span><span id="SQLite.Generator-102"><a href="#SQLite.Generator-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator-103"><a href="#SQLite.Generator-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator-104"><a href="#SQLite.Generator-104"><span class="linenos">104</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
-</span><span id="SQLite.Generator-105"><a href="#SQLite.Generator-105"><span class="linenos">105</span></a>
-</span><span id="SQLite.Generator-106"><a href="#SQLite.Generator-106"><span class="linenos">106</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="SQLite.Generator-102"><a href="#SQLite.Generator-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite.Generator-103"><a href="#SQLite.Generator-103"><span class="linenos">103</span></a>
+</span><span id="SQLite.Generator-104"><a href="#SQLite.Generator-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator-105"><a href="#SQLite.Generator-105"><span class="linenos">105</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator-106"><a href="#SQLite.Generator-106"><span class="linenos">106</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite.Generator-107"><a href="#SQLite.Generator-107"><span class="linenos">107</span></a>
-</span><span id="SQLite.Generator-108"><a href="#SQLite.Generator-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-109"><a href="#SQLite.Generator-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
-</span><span id="SQLite.Generator-110"><a href="#SQLite.Generator-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-111"><a href="#SQLite.Generator-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
-</span><span id="SQLite.Generator-112"><a href="#SQLite.Generator-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-113"><a href="#SQLite.Generator-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
-</span><span id="SQLite.Generator-114"><a href="#SQLite.Generator-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-115"><a href="#SQLite.Generator-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
-</span><span id="SQLite.Generator-116"><a href="#SQLite.Generator-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-117"><a href="#SQLite.Generator-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
-</span><span id="SQLite.Generator-118"><a href="#SQLite.Generator-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-119"><a href="#SQLite.Generator-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
-</span><span id="SQLite.Generator-120"><a href="#SQLite.Generator-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-121"><a href="#SQLite.Generator-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
-</span><span id="SQLite.Generator-122"><a href="#SQLite.Generator-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator-123"><a href="#SQLite.Generator-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
-</span><span id="SQLite.Generator-124"><a href="#SQLite.Generator-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite.Generator-125"><a href="#SQLite.Generator-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator-126"><a href="#SQLite.Generator-126"><span class="linenos">126</span></a>
-</span><span id="SQLite.Generator-127"><a href="#SQLite.Generator-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+</span><span id="SQLite.Generator-108"><a href="#SQLite.Generator-108"><span class="linenos">108</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="SQLite.Generator-109"><a href="#SQLite.Generator-109"><span class="linenos">109</span></a>
+</span><span id="SQLite.Generator-110"><a href="#SQLite.Generator-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-111"><a href="#SQLite.Generator-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
+</span><span id="SQLite.Generator-112"><a href="#SQLite.Generator-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-113"><a href="#SQLite.Generator-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
+</span><span id="SQLite.Generator-114"><a href="#SQLite.Generator-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-115"><a href="#SQLite.Generator-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
+</span><span id="SQLite.Generator-116"><a href="#SQLite.Generator-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-117"><a href="#SQLite.Generator-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
+</span><span id="SQLite.Generator-118"><a href="#SQLite.Generator-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-119"><a href="#SQLite.Generator-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
+</span><span id="SQLite.Generator-120"><a href="#SQLite.Generator-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-121"><a href="#SQLite.Generator-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
+</span><span id="SQLite.Generator-122"><a href="#SQLite.Generator-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-123"><a href="#SQLite.Generator-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
+</span><span id="SQLite.Generator-124"><a href="#SQLite.Generator-124"><span class="linenos">124</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator-125"><a href="#SQLite.Generator-125"><span class="linenos">125</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
+</span><span id="SQLite.Generator-126"><a href="#SQLite.Generator-126"><span class="linenos">126</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite.Generator-127"><a href="#SQLite.Generator-127"><span class="linenos">127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
</span><span id="SQLite.Generator-128"><a href="#SQLite.Generator-128"><span class="linenos">128</span></a>
-</span><span id="SQLite.Generator-129"><a href="#SQLite.Generator-129"><span class="linenos">129</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
-</span><span id="SQLite.Generator-130"><a href="#SQLite.Generator-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
-</span><span id="SQLite.Generator-131"><a href="#SQLite.Generator-131"><span class="linenos">131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite.Generator-132"><a href="#SQLite.Generator-132"><span class="linenos">132</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
-</span><span id="SQLite.Generator-133"><a href="#SQLite.Generator-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite.Generator-134"><a href="#SQLite.Generator-134"><span class="linenos">134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="SQLite.Generator-135"><a href="#SQLite.Generator-135"><span class="linenos">135</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="SQLite.Generator-136"><a href="#SQLite.Generator-136"><span class="linenos">136</span></a>
-</span><span id="SQLite.Generator-137"><a href="#SQLite.Generator-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="SQLite.Generator-138"><a href="#SQLite.Generator-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator-139"><a href="#SQLite.Generator-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite.Generator-140"><a href="#SQLite.Generator-140"><span class="linenos">140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite.Generator-141"><a href="#SQLite.Generator-141"><span class="linenos">141</span></a>
-</span><span id="SQLite.Generator-142"><a href="#SQLite.Generator-142"><span class="linenos">142</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator-143"><a href="#SQLite.Generator-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="SQLite.Generator-144"><a href="#SQLite.Generator-144"><span class="linenos">144</span></a>
-</span><span id="SQLite.Generator-145"><a href="#SQLite.Generator-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator-146"><a href="#SQLite.Generator-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="SQLite.Generator-147"><a href="#SQLite.Generator-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="SQLite.Generator-148"><a href="#SQLite.Generator-148"><span class="linenos">148</span></a>
-</span><span id="SQLite.Generator-149"><a href="#SQLite.Generator-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite.Generator-129"><a href="#SQLite.Generator-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+</span><span id="SQLite.Generator-130"><a href="#SQLite.Generator-130"><span class="linenos">130</span></a>
+</span><span id="SQLite.Generator-131"><a href="#SQLite.Generator-131"><span class="linenos">131</span></a> <span class="c1"># https://www.sqlite.org/lang_aggfunc.html#group_concat</span>
+</span><span id="SQLite.Generator-132"><a href="#SQLite.Generator-132"><span class="linenos">132</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
+</span><span id="SQLite.Generator-133"><a href="#SQLite.Generator-133"><span class="linenos">133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite.Generator-134"><a href="#SQLite.Generator-134"><span class="linenos">134</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
+</span><span id="SQLite.Generator-135"><a href="#SQLite.Generator-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite.Generator-136"><a href="#SQLite.Generator-136"><span class="linenos">136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="SQLite.Generator-137"><a href="#SQLite.Generator-137"><span class="linenos">137</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
+</span><span id="SQLite.Generator-138"><a href="#SQLite.Generator-138"><span class="linenos">138</span></a>
+</span><span id="SQLite.Generator-139"><a href="#SQLite.Generator-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="SQLite.Generator-140"><a href="#SQLite.Generator-140"><span class="linenos">140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator-141"><a href="#SQLite.Generator-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite.Generator-142"><a href="#SQLite.Generator-142"><span class="linenos">142</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite.Generator-143"><a href="#SQLite.Generator-143"><span class="linenos">143</span></a>
+</span><span id="SQLite.Generator-144"><a href="#SQLite.Generator-144"><span class="linenos">144</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator-145"><a href="#SQLite.Generator-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="SQLite.Generator-146"><a href="#SQLite.Generator-146"><span class="linenos">146</span></a>
+</span><span id="SQLite.Generator-147"><a href="#SQLite.Generator-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator-148"><a href="#SQLite.Generator-148"><span class="linenos">148</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="SQLite.Generator-149"><a href="#SQLite.Generator-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="SQLite.Generator-150"><a href="#SQLite.Generator-150"><span class="linenos">150</span></a>
-</span><span id="SQLite.Generator-151"><a href="#SQLite.Generator-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator-152"><a href="#SQLite.Generator-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite.Generator-153"><a href="#SQLite.Generator-153"><span class="linenos">153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="SQLite.Generator-154"><a href="#SQLite.Generator-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
+</span><span id="SQLite.Generator-151"><a href="#SQLite.Generator-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite.Generator-152"><a href="#SQLite.Generator-152"><span class="linenos">152</span></a>
+</span><span id="SQLite.Generator-153"><a href="#SQLite.Generator-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator-154"><a href="#SQLite.Generator-154"><span class="linenos">154</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite.Generator-155"><a href="#SQLite.Generator-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="SQLite.Generator-156"><a href="#SQLite.Generator-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@@ -690,11 +696,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.cast_sql-96"><a href="#SQLite.Generator.cast_sql-96"><span class="linenos"> 96</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator.cast_sql-97"><a href="#SQLite.Generator.cast_sql-97"><span class="linenos"> 97</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="SQLite.Generator.cast_sql-98"><a href="#SQLite.Generator.cast_sql-98"><span class="linenos"> 98</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="SQLite.Generator.cast_sql-99"><a href="#SQLite.Generator.cast_sql-99"><span class="linenos"> 99</span></a>
-</span><span id="SQLite.Generator.cast_sql-100"><a href="#SQLite.Generator.cast_sql-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.cast_sql-98"><a href="#SQLite.Generator.cast_sql-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator.cast_sql-99"><a href="#SQLite.Generator.cast_sql-99"><span class="linenos"> 99</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="SQLite.Generator.cast_sql-100"><a href="#SQLite.Generator.cast_sql-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="SQLite.Generator.cast_sql-101"><a href="#SQLite.Generator.cast_sql-101"><span class="linenos">101</span></a>
+</span><span id="SQLite.Generator.cast_sql-102"><a href="#SQLite.Generator.cast_sql-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -712,32 +718,32 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.datediff_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.datediff_sql-102"><a href="#SQLite.Generator.datediff_sql-102"><span class="linenos">102</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-103"><a href="#SQLite.Generator.datediff_sql-103"><span class="linenos">103</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator.datediff_sql-104"><a href="#SQLite.Generator.datediff_sql-104"><span class="linenos">104</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-105"><a href="#SQLite.Generator.datediff_sql-105"><span class="linenos">105</span></a>
-</span><span id="SQLite.Generator.datediff_sql-106"><a href="#SQLite.Generator.datediff_sql-106"><span class="linenos">106</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.datediff_sql-104"><a href="#SQLite.Generator.datediff_sql-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">datediff_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-105"><a href="#SQLite.Generator.datediff_sql-105"><span class="linenos">105</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator.datediff_sql-106"><a href="#SQLite.Generator.datediff_sql-106"><span class="linenos">106</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">unit</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">unit</span> <span class="k">else</span> <span class="s2">&quot;DAY&quot;</span>
</span><span id="SQLite.Generator.datediff_sql-107"><a href="#SQLite.Generator.datediff_sql-107"><span class="linenos">107</span></a>
-</span><span id="SQLite.Generator.datediff_sql-108"><a href="#SQLite.Generator.datediff_sql-108"><span class="linenos">108</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-109"><a href="#SQLite.Generator.datediff_sql-109"><span class="linenos">109</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-110"><a href="#SQLite.Generator.datediff_sql-110"><span class="linenos">110</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-111"><a href="#SQLite.Generator.datediff_sql-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-112"><a href="#SQLite.Generator.datediff_sql-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-113"><a href="#SQLite.Generator.datediff_sql-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-114"><a href="#SQLite.Generator.datediff_sql-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-115"><a href="#SQLite.Generator.datediff_sql-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-116"><a href="#SQLite.Generator.datediff_sql-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-117"><a href="#SQLite.Generator.datediff_sql-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-118"><a href="#SQLite.Generator.datediff_sql-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-119"><a href="#SQLite.Generator.datediff_sql-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-120"><a href="#SQLite.Generator.datediff_sql-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-121"><a href="#SQLite.Generator.datediff_sql-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-122"><a href="#SQLite.Generator.datediff_sql-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-123"><a href="#SQLite.Generator.datediff_sql-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
-</span><span id="SQLite.Generator.datediff_sql-124"><a href="#SQLite.Generator.datediff_sql-124"><span class="linenos">124</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="SQLite.Generator.datediff_sql-125"><a href="#SQLite.Generator.datediff_sql-125"><span class="linenos">125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator.datediff_sql-126"><a href="#SQLite.Generator.datediff_sql-126"><span class="linenos">126</span></a>
-</span><span id="SQLite.Generator.datediff_sql-127"><a href="#SQLite.Generator.datediff_sql-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-108"><a href="#SQLite.Generator.datediff_sql-108"><span class="linenos">108</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">) - JULIANDAY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">))&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-109"><a href="#SQLite.Generator.datediff_sql-109"><span class="linenos">109</span></a>
+</span><span id="SQLite.Generator.datediff_sql-110"><a href="#SQLite.Generator.datediff_sql-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MONTH&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-111"><a href="#SQLite.Generator.datediff_sql-111"><span class="linenos">111</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 30.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-112"><a href="#SQLite.Generator.datediff_sql-112"><span class="linenos">112</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;YEAR&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-113"><a href="#SQLite.Generator.datediff_sql-113"><span class="linenos">113</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> / 365.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-114"><a href="#SQLite.Generator.datediff_sql-114"><span class="linenos">114</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;HOUR&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-115"><a href="#SQLite.Generator.datediff_sql-115"><span class="linenos">115</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 24.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-116"><a href="#SQLite.Generator.datediff_sql-116"><span class="linenos">116</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MINUTE&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-117"><a href="#SQLite.Generator.datediff_sql-117"><span class="linenos">117</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 1440.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-118"><a href="#SQLite.Generator.datediff_sql-118"><span class="linenos">118</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;SECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-119"><a href="#SQLite.Generator.datediff_sql-119"><span class="linenos">119</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-120"><a href="#SQLite.Generator.datediff_sql-120"><span class="linenos">120</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MILLISECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-121"><a href="#SQLite.Generator.datediff_sql-121"><span class="linenos">121</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-122"><a href="#SQLite.Generator.datediff_sql-122"><span class="linenos">122</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;MICROSECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-123"><a href="#SQLite.Generator.datediff_sql-123"><span class="linenos">123</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 86400000000.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-124"><a href="#SQLite.Generator.datediff_sql-124"><span class="linenos">124</span></a> <span class="k">elif</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;NANOSECOND&quot;</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-125"><a href="#SQLite.Generator.datediff_sql-125"><span class="linenos">125</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> * 8640000000000.0&quot;</span>
+</span><span id="SQLite.Generator.datediff_sql-126"><a href="#SQLite.Generator.datediff_sql-126"><span class="linenos">126</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="SQLite.Generator.datediff_sql-127"><a href="#SQLite.Generator.datediff_sql-127"><span class="linenos">127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;DATEDIFF unsupported for &#39;</span><span class="si">{unit}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator.datediff_sql-128"><a href="#SQLite.Generator.datediff_sql-128"><span class="linenos">128</span></a>
+</span><span id="SQLite.Generator.datediff_sql-129"><a href="#SQLite.Generator.datediff_sql-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2"> AS INTEGER)&quot;</span>
</span></pre></div>
@@ -755,20 +761,20 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.groupconcat_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.groupconcat_sql-130"><a href="#SQLite.Generator.groupconcat_sql-130"><span class="linenos">130</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
-</span><span id="SQLite.Generator.groupconcat_sql-131"><a href="#SQLite.Generator.groupconcat_sql-131"><span class="linenos">131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite.Generator.groupconcat_sql-132"><a href="#SQLite.Generator.groupconcat_sql-132"><span class="linenos">132</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
-</span><span id="SQLite.Generator.groupconcat_sql-133"><a href="#SQLite.Generator.groupconcat_sql-133"><span class="linenos">133</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite.Generator.groupconcat_sql-134"><a href="#SQLite.Generator.groupconcat_sql-134"><span class="linenos">134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="SQLite.Generator.groupconcat_sql-135"><a href="#SQLite.Generator.groupconcat_sql-135"><span class="linenos">135</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
-</span><span id="SQLite.Generator.groupconcat_sql-136"><a href="#SQLite.Generator.groupconcat_sql-136"><span class="linenos">136</span></a>
-</span><span id="SQLite.Generator.groupconcat_sql-137"><a href="#SQLite.Generator.groupconcat_sql-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="SQLite.Generator.groupconcat_sql-138"><a href="#SQLite.Generator.groupconcat_sql-138"><span class="linenos">138</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator.groupconcat_sql-139"><a href="#SQLite.Generator.groupconcat_sql-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="SQLite.Generator.groupconcat_sql-140"><a href="#SQLite.Generator.groupconcat_sql-140"><span class="linenos">140</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite.Generator.groupconcat_sql-141"><a href="#SQLite.Generator.groupconcat_sql-141"><span class="linenos">141</span></a>
-</span><span id="SQLite.Generator.groupconcat_sql-142"><a href="#SQLite.Generator.groupconcat_sql-142"><span class="linenos">142</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
-</span><span id="SQLite.Generator.groupconcat_sql-143"><a href="#SQLite.Generator.groupconcat_sql-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.groupconcat_sql-132"><a href="#SQLite.Generator.groupconcat_sql-132"><span class="linenos">132</span></a> <span class="k">def</span> <span class="nf">groupconcat_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">):</span>
+</span><span id="SQLite.Generator.groupconcat_sql-133"><a href="#SQLite.Generator.groupconcat_sql-133"><span class="linenos">133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite.Generator.groupconcat_sql-134"><a href="#SQLite.Generator.groupconcat_sql-134"><span class="linenos">134</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">)</span>
+</span><span id="SQLite.Generator.groupconcat_sql-135"><a href="#SQLite.Generator.groupconcat_sql-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite.Generator.groupconcat_sql-136"><a href="#SQLite.Generator.groupconcat_sql-136"><span class="linenos">136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">distinct</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="SQLite.Generator.groupconcat_sql-137"><a href="#SQLite.Generator.groupconcat_sql-137"><span class="linenos">137</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="s2">&quot;DISTINCT &quot;</span>
+</span><span id="SQLite.Generator.groupconcat_sql-138"><a href="#SQLite.Generator.groupconcat_sql-138"><span class="linenos">138</span></a>
+</span><span id="SQLite.Generator.groupconcat_sql-139"><a href="#SQLite.Generator.groupconcat_sql-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="SQLite.Generator.groupconcat_sql-140"><a href="#SQLite.Generator.groupconcat_sql-140"><span class="linenos">140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span><span class="s2">&quot;SQLite GROUP_CONCAT doesn&#39;t support ORDER BY.&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator.groupconcat_sql-141"><a href="#SQLite.Generator.groupconcat_sql-141"><span class="linenos">141</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="SQLite.Generator.groupconcat_sql-142"><a href="#SQLite.Generator.groupconcat_sql-142"><span class="linenos">142</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite.Generator.groupconcat_sql-143"><a href="#SQLite.Generator.groupconcat_sql-143"><span class="linenos">143</span></a>
+</span><span id="SQLite.Generator.groupconcat_sql-144"><a href="#SQLite.Generator.groupconcat_sql-144"><span class="linenos">144</span></a> <span class="n">separator</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;separator&quot;</span><span class="p">)</span>
+</span><span id="SQLite.Generator.groupconcat_sql-145"><a href="#SQLite.Generator.groupconcat_sql-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;GROUP_CONCAT(</span><span class="si">{</span><span class="n">distinct</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">separator</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -786,11 +792,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.least_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.least_sql-145"><a href="#SQLite.Generator.least_sql-145"><span class="linenos">145</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator.least_sql-146"><a href="#SQLite.Generator.least_sql-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="SQLite.Generator.least_sql-147"><a href="#SQLite.Generator.least_sql-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="SQLite.Generator.least_sql-148"><a href="#SQLite.Generator.least_sql-148"><span class="linenos">148</span></a>
-</span><span id="SQLite.Generator.least_sql-149"><a href="#SQLite.Generator.least_sql-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.least_sql-147"><a href="#SQLite.Generator.least_sql-147"><span class="linenos">147</span></a> <span class="k">def</span> <span class="nf">least_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Least</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator.least_sql-148"><a href="#SQLite.Generator.least_sql-148"><span class="linenos">148</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="SQLite.Generator.least_sql-149"><a href="#SQLite.Generator.least_sql-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="SQLite.Generator.least_sql-150"><a href="#SQLite.Generator.least_sql-150"><span class="linenos">150</span></a>
+</span><span id="SQLite.Generator.least_sql-151"><a href="#SQLite.Generator.least_sql-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -808,10 +814,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.transaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.transaction_sql-151"><a href="#SQLite.Generator.transaction_sql-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="SQLite.Generator.transaction_sql-152"><a href="#SQLite.Generator.transaction_sql-152"><span class="linenos">152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="SQLite.Generator.transaction_sql-153"><a href="#SQLite.Generator.transaction_sql-153"><span class="linenos">153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="SQLite.Generator.transaction_sql-154"><a href="#SQLite.Generator.transaction_sql-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.transaction_sql-153"><a href="#SQLite.Generator.transaction_sql-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">transaction_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="SQLite.Generator.transaction_sql-154"><a href="#SQLite.Generator.transaction_sql-154"><span class="linenos">154</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="SQLite.Generator.transaction_sql-155"><a href="#SQLite.Generator.transaction_sql-155"><span class="linenos">155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="SQLite.Generator.transaction_sql-156"><a href="#SQLite.Generator.transaction_sql-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;BEGIN</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2"> TRANSACTION&quot;</span>
</span></pre></div>
@@ -942,7 +948,7 @@ Default: True</li>
<dd id="SQLite.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="SQLite.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="SQLite.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="SQLite.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="SQLite.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="SQLite.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="SQLite.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="SQLite.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -951,6 +957,7 @@ Default: True</li>
<dd id="SQLite.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="SQLite.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="SQLite.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="SQLite.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="SQLite.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="SQLite.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="SQLite.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/starrocks.html b/docs/sqlglot/dialects/starrocks.html
index 7ea6da5..a947798 100644
--- a/docs/sqlglot/dialects/starrocks.html
+++ b/docs/sqlglot/dialects/starrocks.html
@@ -107,15 +107,16 @@
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="p">),</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="p">}</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP&quot;</span><span class="p">),</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="p">),</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="p">}</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
</span></pre></div>
@@ -155,15 +156,16 @@
</span><span id="StarRocks-35"><a href="#StarRocks-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks-36"><a href="#StarRocks-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks-37"><a href="#StarRocks-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="StarRocks-38"><a href="#StarRocks-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="StarRocks-39"><a href="#StarRocks-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="StarRocks-40"><a href="#StarRocks-40"><span class="linenos">40</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="StarRocks-41"><a href="#StarRocks-41"><span class="linenos">41</span></a> <span class="p">),</span>
-</span><span id="StarRocks-42"><a href="#StarRocks-42"><span class="linenos">42</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="StarRocks-43"><a href="#StarRocks-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="StarRocks-44"><a href="#StarRocks-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="StarRocks-45"><a href="#StarRocks-45"><span class="linenos">45</span></a> <span class="p">}</span>
-</span><span id="StarRocks-46"><a href="#StarRocks-46"><span class="linenos">46</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
+</span><span id="StarRocks-38"><a href="#StarRocks-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP&quot;</span><span class="p">),</span>
+</span><span id="StarRocks-39"><a href="#StarRocks-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="StarRocks-40"><a href="#StarRocks-40"><span class="linenos">40</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="StarRocks-41"><a href="#StarRocks-41"><span class="linenos">41</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="StarRocks-42"><a href="#StarRocks-42"><span class="linenos">42</span></a> <span class="p">),</span>
+</span><span id="StarRocks-43"><a href="#StarRocks-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="StarRocks-44"><a href="#StarRocks-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="StarRocks-45"><a href="#StarRocks-45"><span class="linenos">45</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="StarRocks-46"><a href="#StarRocks-46"><span class="linenos">46</span></a> <span class="p">}</span>
+</span><span id="StarRocks-47"><a href="#StarRocks-47"><span class="linenos">47</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
</span></pre></div>
@@ -280,15 +282,16 @@ Default: "nulls_are_small"</li>
</span><span id="StarRocks.Generator-35"><a href="#StarRocks.Generator-35"><span class="linenos">35</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks.Generator-36"><a href="#StarRocks.Generator-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">arrow_json_extract_sql</span><span class="p">,</span>
</span><span id="StarRocks.Generator-37"><a href="#StarRocks.Generator-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">),</span>
-</span><span id="StarRocks.Generator-38"><a href="#StarRocks.Generator-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="StarRocks.Generator-39"><a href="#StarRocks.Generator-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
-</span><span id="StarRocks.Generator-40"><a href="#StarRocks.Generator-40"><span class="linenos">40</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
-</span><span id="StarRocks.Generator-41"><a href="#StarRocks.Generator-41"><span class="linenos">41</span></a> <span class="p">),</span>
-</span><span id="StarRocks.Generator-42"><a href="#StarRocks.Generator-42"><span class="linenos">42</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
-</span><span id="StarRocks.Generator-43"><a href="#StarRocks.Generator-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
-</span><span id="StarRocks.Generator-44"><a href="#StarRocks.Generator-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
-</span><span id="StarRocks.Generator-45"><a href="#StarRocks.Generator-45"><span class="linenos">45</span></a> <span class="p">}</span>
-</span><span id="StarRocks.Generator-46"><a href="#StarRocks.Generator-46"><span class="linenos">46</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
+</span><span id="StarRocks.Generator-38"><a href="#StarRocks.Generator-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;REGEXP&quot;</span><span class="p">),</span>
+</span><span id="StarRocks.Generator-39"><a href="#StarRocks.Generator-39"><span class="linenos">39</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;UNIX_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-40"><a href="#StarRocks.Generator-40"><span class="linenos">40</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
+</span><span id="StarRocks.Generator-41"><a href="#StarRocks.Generator-41"><span class="linenos">41</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
+</span><span id="StarRocks.Generator-42"><a href="#StarRocks.Generator-42"><span class="linenos">42</span></a> <span class="p">),</span>
+</span><span id="StarRocks.Generator-43"><a href="#StarRocks.Generator-43"><span class="linenos">43</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeStrToDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;TO_DATE&quot;</span><span class="p">),</span>
+</span><span id="StarRocks.Generator-44"><a href="#StarRocks.Generator-44"><span class="linenos">44</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UNIXTIME(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="StarRocks.Generator-45"><a href="#StarRocks.Generator-45"><span class="linenos">45</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;FROM_UNIXTIME&quot;</span><span class="p">),</span>
+</span><span id="StarRocks.Generator-46"><a href="#StarRocks.Generator-46"><span class="linenos">46</span></a> <span class="p">}</span>
+</span><span id="StarRocks.Generator-47"><a href="#StarRocks.Generator-47"><span class="linenos">47</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">)</span>
</span></pre></div>
@@ -460,7 +463,7 @@ Default: True</li>
<dd id="StarRocks.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="StarRocks.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="StarRocks.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="StarRocks.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="StarRocks.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="StarRocks.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="StarRocks.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="StarRocks.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -469,6 +472,7 @@ Default: True</li>
<dd id="StarRocks.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="StarRocks.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="StarRocks.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="StarRocks.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="StarRocks.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="StarRocks.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="StarRocks.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/tableau.html b/docs/sqlglot/dialects/tableau.html
index af176af..bce76c0 100644
--- a/docs/sqlglot/dialects/tableau.html
+++ b/docs/sqlglot/dialects/tableau.html
@@ -73,7 +73,7 @@
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
-</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">Dialect</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a>
@@ -102,18 +102,19 @@
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="p">}</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a>
-</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="p">}</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a>
-</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="p">}</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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_distinct_on</span><span class="p">]),</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="p">}</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="p">}</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="k">class</span> <span class="nc">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-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="p">}</span>
</span></pre></div>
@@ -139,18 +140,19 @@
</span><span id="Tableau-30"><a href="#Tableau-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="Tableau-31"><a href="#Tableau-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="Tableau-32"><a href="#Tableau-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
-</span><span id="Tableau-33"><a href="#Tableau-33"><span class="linenos">33</span></a> <span class="p">}</span>
-</span><span id="Tableau-34"><a href="#Tableau-34"><span class="linenos">34</span></a>
-</span><span id="Tableau-35"><a href="#Tableau-35"><span class="linenos">35</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tableau-36"><a href="#Tableau-36"><span class="linenos">36</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Tableau-37"><a href="#Tableau-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Tableau-38"><a href="#Tableau-38"><span class="linenos">38</span></a> <span class="p">}</span>
-</span><span id="Tableau-39"><a href="#Tableau-39"><span class="linenos">39</span></a>
-</span><span id="Tableau-40"><a href="#Tableau-40"><span class="linenos">40</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Tableau-41"><a href="#Tableau-41"><span class="linenos">41</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tableau-42"><a href="#Tableau-42"><span class="linenos">42</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Tableau-43"><a href="#Tableau-43"><span class="linenos">43</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
-</span><span id="Tableau-44"><a href="#Tableau-44"><span class="linenos">44</span></a> <span class="p">}</span>
+</span><span id="Tableau-33"><a href="#Tableau-33"><span class="linenos">33</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Tableau-34"><a href="#Tableau-34"><span class="linenos">34</span></a> <span class="p">}</span>
+</span><span id="Tableau-35"><a href="#Tableau-35"><span class="linenos">35</span></a>
+</span><span id="Tableau-36"><a href="#Tableau-36"><span class="linenos">36</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tableau-37"><a href="#Tableau-37"><span class="linenos">37</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Tableau-38"><a href="#Tableau-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Tableau-39"><a href="#Tableau-39"><span class="linenos">39</span></a> <span class="p">}</span>
+</span><span id="Tableau-40"><a href="#Tableau-40"><span class="linenos">40</span></a>
+</span><span id="Tableau-41"><a href="#Tableau-41"><span class="linenos">41</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Tableau-42"><a href="#Tableau-42"><span class="linenos">42</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tableau-43"><a href="#Tableau-43"><span class="linenos">43</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Tableau-44"><a href="#Tableau-44"><span class="linenos">44</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
+</span><span id="Tableau-45"><a href="#Tableau-45"><span class="linenos">45</span></a> <span class="p">}</span>
</span></pre></div>
@@ -194,12 +196,13 @@
</span><span id="Tableau.Generator-30"><a href="#Tableau.Generator-30"><span class="linenos">30</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">_if_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-31"><a href="#Tableau.Generator-31"><span class="linenos">31</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span> <span class="n">_coalesce_sql</span><span class="p">,</span>
</span><span id="Tableau.Generator-32"><a href="#Tableau.Generator-32"><span class="linenos">32</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">:</span> <span class="n">_count_sql</span><span class="p">,</span>
-</span><span id="Tableau.Generator-33"><a href="#Tableau.Generator-33"><span class="linenos">33</span></a> <span class="p">}</span>
-</span><span id="Tableau.Generator-34"><a href="#Tableau.Generator-34"><span class="linenos">34</span></a>
-</span><span id="Tableau.Generator-35"><a href="#Tableau.Generator-35"><span class="linenos">35</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tableau.Generator-36"><a href="#Tableau.Generator-36"><span class="linenos">36</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Tableau.Generator-37"><a href="#Tableau.Generator-37"><span class="linenos">37</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="Tableau.Generator-38"><a href="#Tableau.Generator-38"><span class="linenos">38</span></a> <span class="p">}</span>
+</span><span id="Tableau.Generator-33"><a href="#Tableau.Generator-33"><span class="linenos">33</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Tableau.Generator-34"><a href="#Tableau.Generator-34"><span class="linenos">34</span></a> <span class="p">}</span>
+</span><span id="Tableau.Generator-35"><a href="#Tableau.Generator-35"><span class="linenos">35</span></a>
+</span><span id="Tableau.Generator-36"><a href="#Tableau.Generator-36"><span class="linenos">36</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tableau.Generator-37"><a href="#Tableau.Generator-37"><span class="linenos">37</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Tableau.Generator-38"><a href="#Tableau.Generator-38"><span class="linenos">38</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="Tableau.Generator-39"><a href="#Tableau.Generator-39"><span class="linenos">39</span></a> <span class="p">}</span>
</span></pre></div>
@@ -371,7 +374,7 @@ Default: True</li>
<dd id="Tableau.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Tableau.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Tableau.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Tableau.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Tableau.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Tableau.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Tableau.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Tableau.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -380,6 +383,7 @@ Default: True</li>
<dd id="Tableau.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Tableau.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Tableau.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Tableau.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Tableau.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Tableau.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Tableau.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
@@ -491,11 +495,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Tableau.Parser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tableau.Parser-40"><a href="#Tableau.Parser-40"><span class="linenos">40</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
-</span><span id="Tableau.Parser-41"><a href="#Tableau.Parser-41"><span class="linenos">41</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tableau.Parser-42"><a href="#Tableau.Parser-42"><span class="linenos">42</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Tableau.Parser-43"><a href="#Tableau.Parser-43"><span class="linenos">43</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
-</span><span id="Tableau.Parser-44"><a href="#Tableau.Parser-44"><span class="linenos">44</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tableau.Parser-41"><a href="#Tableau.Parser-41"><span class="linenos">41</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
+</span><span id="Tableau.Parser-42"><a href="#Tableau.Parser-42"><span class="linenos">42</span></a> <span class="n">FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tableau.Parser-43"><a href="#Tableau.Parser-43"><span class="linenos">43</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Tableau.Parser-44"><a href="#Tableau.Parser-44"><span class="linenos">44</span></a> <span class="s2">&quot;COUNTD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)),</span>
+</span><span id="Tableau.Parser-45"><a href="#Tableau.Parser-45"><span class="linenos">45</span></a> <span class="p">}</span>
</span></pre></div>
diff --git a/docs/sqlglot/dialects/teradata.html b/docs/sqlglot/dialects/teradata.html
index 0666ea1..60948e2 100644
--- a/docs/sqlglot/dialects/teradata.html
+++ b/docs/sqlglot/dialects/teradata.html
@@ -96,7 +96,7 @@
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a>
-</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a> <span class="n">Dialect</span><span class="p">,</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">format_time_lambda</span><span class="p">,</span>
@@ -242,38 +242,39 @@
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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;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 FORMAT </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-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="p">}</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="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">expression</span><span class="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-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="c1"># FROM before SET in Teradata UPDATE syntax</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="c1"># https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/Teradata-VantageTM-SQL-Data-Manipulation-Language-17.20/Statement-Syntax/UPDATE/UPDATE-Syntax-Basic-Form-FROM-Clause</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</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-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-162"><a href="#L-162"><span class="linenos">162</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</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-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="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-169"><a href="#L-169"><span class="linenos">169</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;MOD&quot;</span><span class="p">)</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="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-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">type_sql</span> <span class="o">=</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-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</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="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</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">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-178"><a href="#L-178"><span class="linenos">178</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><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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_distinct_on</span><span class="p">]),</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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 FORMAT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">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-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="p">}</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</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="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">expression</span><span class="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-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="c1"># FROM before SET in Teradata UPDATE syntax</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="c1"># https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/Teradata-VantageTM-SQL-Data-Manipulation-Language-17.20/Statement-Syntax/UPDATE/UPDATE-Syntax-Basic-Form-FROM-Clause</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</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-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-163"><a href="#L-163"><span class="linenos">163</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-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</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-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">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-170"><a href="#L-170"><span class="linenos">170</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;MOD&quot;</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">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-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">type_sql</span> <span class="o">=</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-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</span><span class="p">)</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</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="k">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-179"><a href="#L-179"><span class="linenos">179</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><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&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="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -425,38 +426,39 @@
</span><span id="Teradata-149"><a href="#Teradata-149"><span class="linenos">149</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Teradata-150"><a href="#Teradata-150"><span class="linenos">150</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="Teradata-151"><a href="#Teradata-151"><span class="linenos">151</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="Teradata-152"><a href="#Teradata-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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 FORMAT </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="Teradata-153"><a href="#Teradata-153"><span class="linenos">153</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="Teradata-154"><a href="#Teradata-154"><span class="linenos">154</span></a> <span class="p">}</span>
-</span><span id="Teradata-155"><a href="#Teradata-155"><span class="linenos">155</span></a>
-</span><span id="Teradata-156"><a href="#Teradata-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Teradata-157"><a href="#Teradata-157"><span class="linenos">157</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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="Teradata-158"><a href="#Teradata-158"><span class="linenos">158</span></a>
-</span><span id="Teradata-159"><a href="#Teradata-159"><span class="linenos">159</span></a> <span class="c1"># FROM before SET in Teradata UPDATE syntax</span>
-</span><span id="Teradata-160"><a href="#Teradata-160"><span class="linenos">160</span></a> <span class="c1"># https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/Teradata-VantageTM-SQL-Data-Manipulation-Language-17.20/Statement-Syntax/UPDATE/UPDATE-Syntax-Basic-Form-FROM-Clause</span>
-</span><span id="Teradata-161"><a href="#Teradata-161"><span class="linenos">161</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="Teradata-162"><a href="#Teradata-162"><span class="linenos">162</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Teradata-163"><a href="#Teradata-163"><span class="linenos">163</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="Teradata-164"><a href="#Teradata-164"><span class="linenos">164</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="Teradata-165"><a href="#Teradata-165"><span class="linenos">165</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="Teradata-166"><a href="#Teradata-166"><span class="linenos">166</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Teradata-167"><a href="#Teradata-167"><span class="linenos">167</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="Teradata-168"><a href="#Teradata-168"><span class="linenos">168</span></a>
-</span><span id="Teradata-169"><a href="#Teradata-169"><span class="linenos">169</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="Teradata-170"><a href="#Teradata-170"><span class="linenos">170</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;MOD&quot;</span><span class="p">)</span>
-</span><span id="Teradata-171"><a href="#Teradata-171"><span class="linenos">171</span></a>
-</span><span id="Teradata-172"><a href="#Teradata-172"><span class="linenos">172</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="Teradata-173"><a href="#Teradata-173"><span class="linenos">173</span></a> <span class="n">type_sql</span> <span class="o">=</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="Teradata-174"><a href="#Teradata-174"><span class="linenos">174</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</span><span class="p">)</span>
-</span><span id="Teradata-175"><a href="#Teradata-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</span>
-</span><span id="Teradata-176"><a href="#Teradata-176"><span class="linenos">176</span></a>
-</span><span id="Teradata-177"><a href="#Teradata-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Teradata-178"><a href="#Teradata-178"><span class="linenos">178</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Teradata-179"><a href="#Teradata-179"><span class="linenos">179</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><span id="Teradata-180"><a href="#Teradata-180"><span class="linenos">180</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
-</span><span id="Teradata-181"><a href="#Teradata-181"><span class="linenos">181</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Teradata-182"><a href="#Teradata-182"><span class="linenos">182</span></a>
-</span><span id="Teradata-183"><a href="#Teradata-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Teradata-152"><a href="#Teradata-152"><span class="linenos">152</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Teradata-153"><a href="#Teradata-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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 FORMAT </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="Teradata-154"><a href="#Teradata-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Teradata-155"><a href="#Teradata-155"><span class="linenos">155</span></a> <span class="p">}</span>
+</span><span id="Teradata-156"><a href="#Teradata-156"><span class="linenos">156</span></a>
+</span><span id="Teradata-157"><a href="#Teradata-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Teradata-158"><a href="#Teradata-158"><span class="linenos">158</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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="Teradata-159"><a href="#Teradata-159"><span class="linenos">159</span></a>
+</span><span id="Teradata-160"><a href="#Teradata-160"><span class="linenos">160</span></a> <span class="c1"># FROM before SET in Teradata UPDATE syntax</span>
+</span><span id="Teradata-161"><a href="#Teradata-161"><span class="linenos">161</span></a> <span class="c1"># https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/Teradata-VantageTM-SQL-Data-Manipulation-Language-17.20/Statement-Syntax/UPDATE/UPDATE-Syntax-Basic-Form-FROM-Clause</span>
+</span><span id="Teradata-162"><a href="#Teradata-162"><span class="linenos">162</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="Teradata-163"><a href="#Teradata-163"><span class="linenos">163</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Teradata-164"><a href="#Teradata-164"><span class="linenos">164</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="Teradata-165"><a href="#Teradata-165"><span class="linenos">165</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="Teradata-166"><a href="#Teradata-166"><span class="linenos">166</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="Teradata-167"><a href="#Teradata-167"><span class="linenos">167</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Teradata-168"><a href="#Teradata-168"><span class="linenos">168</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="Teradata-169"><a href="#Teradata-169"><span class="linenos">169</span></a>
+</span><span id="Teradata-170"><a href="#Teradata-170"><span class="linenos">170</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="Teradata-171"><a href="#Teradata-171"><span class="linenos">171</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;MOD&quot;</span><span class="p">)</span>
+</span><span id="Teradata-172"><a href="#Teradata-172"><span class="linenos">172</span></a>
+</span><span id="Teradata-173"><a href="#Teradata-173"><span class="linenos">173</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="Teradata-174"><a href="#Teradata-174"><span class="linenos">174</span></a> <span class="n">type_sql</span> <span class="o">=</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="Teradata-175"><a href="#Teradata-175"><span class="linenos">175</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</span><span class="p">)</span>
+</span><span id="Teradata-176"><a href="#Teradata-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</span>
+</span><span id="Teradata-177"><a href="#Teradata-177"><span class="linenos">177</span></a>
+</span><span id="Teradata-178"><a href="#Teradata-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Teradata-179"><a href="#Teradata-179"><span class="linenos">179</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Teradata-180"><a href="#Teradata-180"><span class="linenos">180</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><span id="Teradata-181"><a href="#Teradata-181"><span class="linenos">181</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
+</span><span id="Teradata-182"><a href="#Teradata-182"><span class="linenos">182</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Teradata-183"><a href="#Teradata-183"><span class="linenos">183</span></a>
+</span><span id="Teradata-184"><a href="#Teradata-184"><span class="linenos">184</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -707,38 +709,39 @@ Default: "nulls_are_small"</li>
</span><span id="Teradata.Generator-149"><a href="#Teradata.Generator-149"><span class="linenos">149</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Teradata.Generator-150"><a href="#Teradata.Generator-150"><span class="linenos">150</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="Teradata.Generator-151"><a href="#Teradata.Generator-151"><span class="linenos">151</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="Teradata.Generator-152"><a href="#Teradata.Generator-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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 FORMAT </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="Teradata.Generator-153"><a href="#Teradata.Generator-153"><span class="linenos">153</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="Teradata.Generator-154"><a href="#Teradata.Generator-154"><span class="linenos">154</span></a> <span class="p">}</span>
-</span><span id="Teradata.Generator-155"><a href="#Teradata.Generator-155"><span class="linenos">155</span></a>
-</span><span id="Teradata.Generator-156"><a href="#Teradata.Generator-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Teradata.Generator-157"><a href="#Teradata.Generator-157"><span class="linenos">157</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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="Teradata.Generator-158"><a href="#Teradata.Generator-158"><span class="linenos">158</span></a>
-</span><span id="Teradata.Generator-159"><a href="#Teradata.Generator-159"><span class="linenos">159</span></a> <span class="c1"># FROM before SET in Teradata UPDATE syntax</span>
-</span><span id="Teradata.Generator-160"><a href="#Teradata.Generator-160"><span class="linenos">160</span></a> <span class="c1"># https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/Teradata-VantageTM-SQL-Data-Manipulation-Language-17.20/Statement-Syntax/UPDATE/UPDATE-Syntax-Basic-Form-FROM-Clause</span>
-</span><span id="Teradata.Generator-161"><a href="#Teradata.Generator-161"><span class="linenos">161</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="Teradata.Generator-162"><a href="#Teradata.Generator-162"><span class="linenos">162</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator-163"><a href="#Teradata.Generator-163"><span class="linenos">163</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="Teradata.Generator-164"><a href="#Teradata.Generator-164"><span class="linenos">164</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="Teradata.Generator-165"><a href="#Teradata.Generator-165"><span class="linenos">165</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="Teradata.Generator-166"><a href="#Teradata.Generator-166"><span class="linenos">166</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Teradata.Generator-167"><a href="#Teradata.Generator-167"><span class="linenos">167</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="Teradata.Generator-168"><a href="#Teradata.Generator-168"><span class="linenos">168</span></a>
-</span><span id="Teradata.Generator-169"><a href="#Teradata.Generator-169"><span class="linenos">169</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="Teradata.Generator-170"><a href="#Teradata.Generator-170"><span class="linenos">170</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;MOD&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator-171"><a href="#Teradata.Generator-171"><span class="linenos">171</span></a>
-</span><span id="Teradata.Generator-172"><a href="#Teradata.Generator-172"><span class="linenos">172</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="Teradata.Generator-173"><a href="#Teradata.Generator-173"><span class="linenos">173</span></a> <span class="n">type_sql</span> <span class="o">=</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="Teradata.Generator-174"><a href="#Teradata.Generator-174"><span class="linenos">174</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator-175"><a href="#Teradata.Generator-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</span>
-</span><span id="Teradata.Generator-176"><a href="#Teradata.Generator-176"><span class="linenos">176</span></a>
-</span><span id="Teradata.Generator-177"><a href="#Teradata.Generator-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Teradata.Generator-178"><a href="#Teradata.Generator-178"><span class="linenos">178</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator-179"><a href="#Teradata.Generator-179"><span class="linenos">179</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><span id="Teradata.Generator-180"><a href="#Teradata.Generator-180"><span class="linenos">180</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator-181"><a href="#Teradata.Generator-181"><span class="linenos">181</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Teradata.Generator-182"><a href="#Teradata.Generator-182"><span class="linenos">182</span></a>
-</span><span id="Teradata.Generator-183"><a href="#Teradata.Generator-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Teradata.Generator-152"><a href="#Teradata.Generator-152"><span class="linenos">152</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_distinct_on</span><span class="p">]),</span>
+</span><span id="Teradata.Generator-153"><a href="#Teradata.Generator-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;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 FORMAT </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="Teradata.Generator-154"><a href="#Teradata.Generator-154"><span class="linenos">154</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ToChar</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
+</span><span id="Teradata.Generator-155"><a href="#Teradata.Generator-155"><span class="linenos">155</span></a> <span class="p">}</span>
+</span><span id="Teradata.Generator-156"><a href="#Teradata.Generator-156"><span class="linenos">156</span></a>
+</span><span id="Teradata.Generator-157"><a href="#Teradata.Generator-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Teradata.Generator-158"><a href="#Teradata.Generator-158"><span class="linenos">158</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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="Teradata.Generator-159"><a href="#Teradata.Generator-159"><span class="linenos">159</span></a>
+</span><span id="Teradata.Generator-160"><a href="#Teradata.Generator-160"><span class="linenos">160</span></a> <span class="c1"># FROM before SET in Teradata UPDATE syntax</span>
+</span><span id="Teradata.Generator-161"><a href="#Teradata.Generator-161"><span class="linenos">161</span></a> <span class="c1"># https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/Teradata-VantageTM-SQL-Data-Manipulation-Language-17.20/Statement-Syntax/UPDATE/UPDATE-Syntax-Basic-Form-FROM-Clause</span>
+</span><span id="Teradata.Generator-162"><a href="#Teradata.Generator-162"><span class="linenos">162</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="Teradata.Generator-163"><a href="#Teradata.Generator-163"><span class="linenos">163</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator-164"><a href="#Teradata.Generator-164"><span class="linenos">164</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="Teradata.Generator-165"><a href="#Teradata.Generator-165"><span class="linenos">165</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="Teradata.Generator-166"><a href="#Teradata.Generator-166"><span class="linenos">166</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="Teradata.Generator-167"><a href="#Teradata.Generator-167"><span class="linenos">167</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Teradata.Generator-168"><a href="#Teradata.Generator-168"><span class="linenos">168</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="Teradata.Generator-169"><a href="#Teradata.Generator-169"><span class="linenos">169</span></a>
+</span><span id="Teradata.Generator-170"><a href="#Teradata.Generator-170"><span class="linenos">170</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="Teradata.Generator-171"><a href="#Teradata.Generator-171"><span class="linenos">171</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;MOD&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator-172"><a href="#Teradata.Generator-172"><span class="linenos">172</span></a>
+</span><span id="Teradata.Generator-173"><a href="#Teradata.Generator-173"><span class="linenos">173</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="Teradata.Generator-174"><a href="#Teradata.Generator-174"><span class="linenos">174</span></a> <span class="n">type_sql</span> <span class="o">=</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="Teradata.Generator-175"><a href="#Teradata.Generator-175"><span class="linenos">175</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator-176"><a href="#Teradata.Generator-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</span>
+</span><span id="Teradata.Generator-177"><a href="#Teradata.Generator-177"><span class="linenos">177</span></a>
+</span><span id="Teradata.Generator-178"><a href="#Teradata.Generator-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Teradata.Generator-179"><a href="#Teradata.Generator-179"><span class="linenos">179</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator-180"><a href="#Teradata.Generator-180"><span class="linenos">180</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><span id="Teradata.Generator-181"><a href="#Teradata.Generator-181"><span class="linenos">181</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator-182"><a href="#Teradata.Generator-182"><span class="linenos">182</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Teradata.Generator-183"><a href="#Teradata.Generator-183"><span class="linenos">183</span></a>
+</span><span id="Teradata.Generator-184"><a href="#Teradata.Generator-184"><span class="linenos">184</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -797,8 +800,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Teradata.Generator.partitionedbyproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.partitionedbyproperty_sql-156"><a href="#Teradata.Generator.partitionedbyproperty_sql-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Teradata.Generator.partitionedbyproperty_sql-157"><a href="#Teradata.Generator.partitionedbyproperty_sql-157"><span class="linenos">157</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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="Teradata.Generator.partitionedbyproperty_sql-157"><a href="#Teradata.Generator.partitionedbyproperty_sql-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">partitionedbyproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Teradata.Generator.partitionedbyproperty_sql-158"><a href="#Teradata.Generator.partitionedbyproperty_sql-158"><span class="linenos">158</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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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>
@@ -816,13 +819,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Teradata.Generator.update_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.update_sql-161"><a href="#Teradata.Generator.update_sql-161"><span class="linenos">161</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="Teradata.Generator.update_sql-162"><a href="#Teradata.Generator.update_sql-162"><span class="linenos">162</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator.update_sql-163"><a href="#Teradata.Generator.update_sql-163"><span class="linenos">163</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="Teradata.Generator.update_sql-164"><a href="#Teradata.Generator.update_sql-164"><span class="linenos">164</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="Teradata.Generator.update_sql-165"><a href="#Teradata.Generator.update_sql-165"><span class="linenos">165</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="Teradata.Generator.update_sql-166"><a href="#Teradata.Generator.update_sql-166"><span class="linenos">166</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Teradata.Generator.update_sql-167"><a href="#Teradata.Generator.update_sql-167"><span class="linenos">167</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="Teradata.Generator.update_sql-162"><a href="#Teradata.Generator.update_sql-162"><span class="linenos">162</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="Teradata.Generator.update_sql-163"><a href="#Teradata.Generator.update_sql-163"><span class="linenos">163</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator.update_sql-164"><a href="#Teradata.Generator.update_sql-164"><span class="linenos">164</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="Teradata.Generator.update_sql-165"><a href="#Teradata.Generator.update_sql-165"><span class="linenos">165</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="Teradata.Generator.update_sql-166"><a href="#Teradata.Generator.update_sql-166"><span class="linenos">166</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="Teradata.Generator.update_sql-167"><a href="#Teradata.Generator.update_sql-167"><span class="linenos">167</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="n">from_sql</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">where_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Teradata.Generator.update_sql-168"><a href="#Teradata.Generator.update_sql-168"><span class="linenos">168</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>
@@ -840,8 +843,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Teradata.Generator.mod_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.mod_sql-169"><a href="#Teradata.Generator.mod_sql-169"><span class="linenos">169</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="Teradata.Generator.mod_sql-170"><a href="#Teradata.Generator.mod_sql-170"><span class="linenos">170</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;MOD&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.mod_sql-170"><a href="#Teradata.Generator.mod_sql-170"><span class="linenos">170</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="Teradata.Generator.mod_sql-171"><a href="#Teradata.Generator.mod_sql-171"><span class="linenos">171</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;MOD&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -859,10 +862,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Teradata.Generator.datatype_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.datatype_sql-172"><a href="#Teradata.Generator.datatype_sql-172"><span class="linenos">172</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="Teradata.Generator.datatype_sql-173"><a href="#Teradata.Generator.datatype_sql-173"><span class="linenos">173</span></a> <span class="n">type_sql</span> <span class="o">=</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="Teradata.Generator.datatype_sql-174"><a href="#Teradata.Generator.datatype_sql-174"><span class="linenos">174</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator.datatype_sql-175"><a href="#Teradata.Generator.datatype_sql-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.datatype_sql-173"><a href="#Teradata.Generator.datatype_sql-173"><span class="linenos">173</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="Teradata.Generator.datatype_sql-174"><a href="#Teradata.Generator.datatype_sql-174"><span class="linenos">174</span></a> <span class="n">type_sql</span> <span class="o">=</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="Teradata.Generator.datatype_sql-175"><a href="#Teradata.Generator.datatype_sql-175"><span class="linenos">175</span></a> <span class="n">prefix_sql</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prefix&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator.datatype_sql-176"><a href="#Teradata.Generator.datatype_sql-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SYSUDTLIB.</span><span class="si">{</span><span class="n">type_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">prefix_sql</span> <span class="k">else</span> <span class="n">type_sql</span>
</span></pre></div>
@@ -880,13 +883,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Teradata.Generator.rangen_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.rangen_sql-177"><a href="#Teradata.Generator.rangen_sql-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Teradata.Generator.rangen_sql-178"><a href="#Teradata.Generator.rangen_sql-178"><span class="linenos">178</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator.rangen_sql-179"><a href="#Teradata.Generator.rangen_sql-179"><span class="linenos">179</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><span id="Teradata.Generator.rangen_sql-180"><a href="#Teradata.Generator.rangen_sql-180"><span class="linenos">180</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
-</span><span id="Teradata.Generator.rangen_sql-181"><a href="#Teradata.Generator.rangen_sql-181"><span class="linenos">181</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Teradata.Generator.rangen_sql-182"><a href="#Teradata.Generator.rangen_sql-182"><span class="linenos">182</span></a>
-</span><span id="Teradata.Generator.rangen_sql-183"><a href="#Teradata.Generator.rangen_sql-183"><span class="linenos">183</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Teradata.Generator.rangen_sql-178"><a href="#Teradata.Generator.rangen_sql-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">rangen_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">RangeN</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Teradata.Generator.rangen_sql-179"><a href="#Teradata.Generator.rangen_sql-179"><span class="linenos">179</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator.rangen_sql-180"><a href="#Teradata.Generator.rangen_sql-180"><span class="linenos">180</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><span id="Teradata.Generator.rangen_sql-181"><a href="#Teradata.Generator.rangen_sql-181"><span class="linenos">181</span></a> <span class="n">each_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;each&quot;</span><span class="p">)</span>
+</span><span id="Teradata.Generator.rangen_sql-182"><a href="#Teradata.Generator.rangen_sql-182"><span class="linenos">182</span></a> <span class="n">each_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; EACH </span><span class="si">{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">each_sql</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Teradata.Generator.rangen_sql-183"><a href="#Teradata.Generator.rangen_sql-183"><span class="linenos">183</span></a>
+</span><span id="Teradata.Generator.rangen_sql-184"><a href="#Teradata.Generator.rangen_sql-184"><span class="linenos">184</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RANGE_N(</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">expressions_sql</span><span class="si">}{</span><span class="n">each_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -1015,7 +1018,7 @@ Default: True</li>
<dd id="Teradata.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Teradata.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Teradata.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Teradata.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Teradata.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Teradata.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Teradata.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Teradata.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1024,6 +1027,7 @@ Default: True</li>
<dd id="Teradata.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Teradata.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Teradata.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Teradata.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Teradata.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Teradata.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Teradata.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/trino.html b/docs/sqlglot/dialects/trino.html
index 3baa74c..dbf148e 100644
--- a/docs/sqlglot/dialects/trino.html
+++ b/docs/sqlglot/dialects/trino.html
@@ -324,7 +324,7 @@ Default: True</li>
<dd id="Trino.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Trino.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Trino.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Trino.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Trino.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Trino.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Trino.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Trino.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -333,6 +333,7 @@ Default: True</li>
<dd id="Trino.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Trino.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Trino.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Trino.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Trino.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Trino.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Trino.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/dialects/tsql.html b/docs/sqlglot/dialects/tsql.html
index d1c2096..dedf090 100644
--- a/docs/sqlglot/dialects/tsql.html
+++ b/docs/sqlglot/dialects/tsql.html
@@ -94,7 +94,7 @@
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="kn">import</span> <span class="nn">re</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a>
-</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">exp</span><span class="p">,</span> <span class="n">generator</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">tokens</span><span class="p">,</span> <span class="n">transforms</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="p">(</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a> <span class="n">Dialect</span><span class="p">,</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a> <span class="n">max_or_greatest</span><span class="p">,</span>
@@ -554,52 +554,53 @@
</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</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-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</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-469"><a href="#L-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</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-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</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_distinct_on</span><span class="p">]),</span>
</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;SHA1&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SHA2_</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;length&#39;</span><span class="p">,</span><span class="w"> </span><span class="mi">256</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="p">),</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="p">}</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="p">}</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="k">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><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">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <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="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span>
+</span><span id="L-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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <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="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</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">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-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</span><span id="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">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="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="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="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">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-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">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -951,52 +952,53 @@
</span><span id="TSQL-464"><a href="#TSQL-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="TSQL-465"><a href="#TSQL-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
</span><span id="TSQL-466"><a href="#TSQL-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="TSQL-467"><a href="#TSQL-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
-</span><span id="TSQL-468"><a href="#TSQL-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL-469"><a href="#TSQL-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL-470"><a href="#TSQL-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="TSQL-471"><a href="#TSQL-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="TSQL-472"><a href="#TSQL-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="TSQL-473"><a href="#TSQL-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="TSQL-467"><a href="#TSQL-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="TSQL-468"><a href="#TSQL-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
+</span><span id="TSQL-469"><a href="#TSQL-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="TSQL-470"><a href="#TSQL-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="TSQL-471"><a href="#TSQL-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="TSQL-472"><a href="#TSQL-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL-473"><a href="#TSQL-473"><span class="linenos">473</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_distinct_on</span><span class="p">]),</span>
</span><span id="TSQL-474"><a href="#TSQL-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;SHA1&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
</span><span id="TSQL-475"><a href="#TSQL-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="TSQL-476"><a href="#TSQL-476"><span class="linenos">476</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SHA2_</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;length&#39;</span><span class="p">,</span><span class="w"> </span><span class="mi">256</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="TSQL-477"><a href="#TSQL-477"><span class="linenos">477</span></a> <span class="p">),</span>
-</span><span id="TSQL-478"><a href="#TSQL-478"><span class="linenos">478</span></a> <span class="p">}</span>
-</span><span id="TSQL-479"><a href="#TSQL-479"><span class="linenos">479</span></a>
-</span><span id="TSQL-480"><a href="#TSQL-480"><span class="linenos">480</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span>
-</span><span id="TSQL-481"><a href="#TSQL-481"><span class="linenos">481</span></a>
-</span><span id="TSQL-482"><a href="#TSQL-482"><span class="linenos">482</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL-483"><a href="#TSQL-483"><span class="linenos">483</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL-484"><a href="#TSQL-484"><span class="linenos">484</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="TSQL-485"><a href="#TSQL-485"><span class="linenos">485</span></a> <span class="p">}</span>
-</span><span id="TSQL-486"><a href="#TSQL-486"><span class="linenos">486</span></a>
-</span><span id="TSQL-487"><a href="#TSQL-487"><span class="linenos">487</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="TSQL-488"><a href="#TSQL-488"><span class="linenos">488</span></a>
-</span><span id="TSQL-489"><a href="#TSQL-489"><span class="linenos">489</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-490"><a href="#TSQL-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
-</span><span id="TSQL-491"><a href="#TSQL-491"><span class="linenos">491</span></a>
-</span><span id="TSQL-492"><a href="#TSQL-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-493"><a href="#TSQL-493"><span class="linenos">493</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
-</span><span id="TSQL-494"><a href="#TSQL-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="TSQL-495"><a href="#TSQL-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL-496"><a href="#TSQL-496"><span class="linenos">496</span></a>
-</span><span id="TSQL-497"><a href="#TSQL-497"><span class="linenos">497</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="TSQL-498"><a href="#TSQL-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="TSQL-499"><a href="#TSQL-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-500"><a href="#TSQL-500"><span class="linenos">500</span></a>
-</span><span id="TSQL-501"><a href="#TSQL-501"><span class="linenos">501</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="TSQL-502"><a href="#TSQL-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="TSQL-503"><a href="#TSQL-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-504"><a href="#TSQL-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="TSQL-505"><a href="#TSQL-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL-506"><a href="#TSQL-506"><span class="linenos">506</span></a>
-</span><span id="TSQL-507"><a href="#TSQL-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="TSQL-508"><a href="#TSQL-508"><span class="linenos">508</span></a>
-</span><span id="TSQL-509"><a href="#TSQL-509"><span class="linenos">509</span></a> <span class="k">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL-510"><a href="#TSQL-510"><span class="linenos">510</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="TSQL-511"><a href="#TSQL-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL-512"><a href="#TSQL-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-478"><a href="#TSQL-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL-479"><a href="#TSQL-479"><span class="linenos">479</span></a> <span class="p">}</span>
+</span><span id="TSQL-480"><a href="#TSQL-480"><span class="linenos">480</span></a>
+</span><span id="TSQL-481"><a href="#TSQL-481"><span class="linenos">481</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span>
+</span><span id="TSQL-482"><a href="#TSQL-482"><span class="linenos">482</span></a>
+</span><span id="TSQL-483"><a href="#TSQL-483"><span class="linenos">483</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL-484"><a href="#TSQL-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 class="c1"># type: ignore</span>
+</span><span id="TSQL-485"><a href="#TSQL-485"><span class="linenos">485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="TSQL-486"><a href="#TSQL-486"><span class="linenos">486</span></a> <span class="p">}</span>
+</span><span id="TSQL-487"><a href="#TSQL-487"><span class="linenos">487</span></a>
+</span><span id="TSQL-488"><a href="#TSQL-488"><span class="linenos">488</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="TSQL-489"><a href="#TSQL-489"><span class="linenos">489</span></a>
+</span><span id="TSQL-490"><a href="#TSQL-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-491"><a href="#TSQL-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="TSQL-492"><a href="#TSQL-492"><span class="linenos">492</span></a>
+</span><span id="TSQL-493"><a href="#TSQL-493"><span class="linenos">493</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-494"><a href="#TSQL-494"><span class="linenos">494</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
+</span><span id="TSQL-495"><a href="#TSQL-495"><span class="linenos">495</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="TSQL-496"><a href="#TSQL-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</span><span id="TSQL-497"><a href="#TSQL-497"><span class="linenos">497</span></a>
+</span><span id="TSQL-498"><a href="#TSQL-498"><span class="linenos">498</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="TSQL-499"><a href="#TSQL-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="TSQL-500"><a href="#TSQL-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-501"><a href="#TSQL-501"><span class="linenos">501</span></a>
+</span><span id="TSQL-502"><a href="#TSQL-502"><span class="linenos">502</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="TSQL-503"><a href="#TSQL-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
+</span><span id="TSQL-504"><a href="#TSQL-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-505"><a href="#TSQL-505"><span class="linenos">505</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="TSQL-506"><a href="#TSQL-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL-507"><a href="#TSQL-507"><span class="linenos">507</span></a>
+</span><span id="TSQL-508"><a href="#TSQL-508"><span class="linenos">508</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="TSQL-509"><a href="#TSQL-509"><span class="linenos">509</span></a>
+</span><span id="TSQL-510"><a href="#TSQL-510"><span class="linenos">510</span></a> <span class="k">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL-511"><a href="#TSQL-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="TSQL-512"><a href="#TSQL-512"><span class="linenos">512</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL-513"><a href="#TSQL-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -1318,52 +1320,53 @@ Default: "nulls_are_small"</li>
</span><span id="TSQL.Generator-464"><a href="#TSQL.Generator-464"><span class="linenos">464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="n">generate_date_delta_with_unit_sql</span><span class="p">,</span>
</span><span id="TSQL.Generator-465"><a href="#TSQL.Generator-465"><span class="linenos">465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
</span><span id="TSQL.Generator-466"><a href="#TSQL.Generator-466"><span class="linenos">466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;GETDATE&quot;</span><span class="p">),</span>
-</span><span id="TSQL.Generator-467"><a href="#TSQL.Generator-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
-</span><span id="TSQL.Generator-468"><a href="#TSQL.Generator-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL.Generator-469"><a href="#TSQL.Generator-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
-</span><span id="TSQL.Generator-470"><a href="#TSQL.Generator-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
-</span><span id="TSQL.Generator-471"><a href="#TSQL.Generator-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
-</span><span id="TSQL.Generator-472"><a href="#TSQL.Generator-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
-</span><span id="TSQL.Generator-473"><a href="#TSQL.Generator-473"><span class="linenos">473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="TSQL.Generator-467"><a href="#TSQL.Generator-467"><span class="linenos">467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span> <span class="n">_string_agg_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-468"><a href="#TSQL.Generator-468"><span class="linenos">468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;IIF&quot;</span><span class="p">),</span>
+</span><span id="TSQL.Generator-469"><a href="#TSQL.Generator-469"><span class="linenos">469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Max</span><span class="p">:</span> <span class="n">max_or_greatest</span><span class="p">,</span>
+</span><span id="TSQL.Generator-470"><a href="#TSQL.Generator-470"><span class="linenos">470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MD5</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;MD5&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
+</span><span id="TSQL.Generator-471"><a href="#TSQL.Generator-471"><span class="linenos">471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Min</span><span class="p">:</span> <span class="n">min_or_least</span><span class="p">,</span>
+</span><span id="TSQL.Generator-472"><a href="#TSQL.Generator-472"><span class="linenos">472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NumberToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-473"><a href="#TSQL.Generator-473"><span class="linenos">473</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_distinct_on</span><span class="p">]),</span>
</span><span id="TSQL.Generator-474"><a href="#TSQL.Generator-474"><span class="linenos">474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;SHA1&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">),</span>
</span><span id="TSQL.Generator-475"><a href="#TSQL.Generator-475"><span class="linenos">475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SHA2</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="TSQL.Generator-476"><a href="#TSQL.Generator-476"><span class="linenos">476</span></a> <span class="s2">&quot;HASHBYTES&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SHA2_</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;length&#39;</span><span class="p">,</span><span class="w"> </span><span class="mi">256</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="TSQL.Generator-477"><a href="#TSQL.Generator-477"><span class="linenos">477</span></a> <span class="p">),</span>
-</span><span id="TSQL.Generator-478"><a href="#TSQL.Generator-478"><span class="linenos">478</span></a> <span class="p">}</span>
-</span><span id="TSQL.Generator-479"><a href="#TSQL.Generator-479"><span class="linenos">479</span></a>
-</span><span id="TSQL.Generator-480"><a href="#TSQL.Generator-480"><span class="linenos">480</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span>
-</span><span id="TSQL.Generator-481"><a href="#TSQL.Generator-481"><span class="linenos">481</span></a>
-</span><span id="TSQL.Generator-482"><a href="#TSQL.Generator-482"><span class="linenos">482</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TSQL.Generator-483"><a href="#TSQL.Generator-483"><span class="linenos">483</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="TSQL.Generator-484"><a href="#TSQL.Generator-484"><span class="linenos">484</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
-</span><span id="TSQL.Generator-485"><a href="#TSQL.Generator-485"><span class="linenos">485</span></a> <span class="p">}</span>
-</span><span id="TSQL.Generator-486"><a href="#TSQL.Generator-486"><span class="linenos">486</span></a>
-</span><span id="TSQL.Generator-487"><a href="#TSQL.Generator-487"><span class="linenos">487</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
-</span><span id="TSQL.Generator-488"><a href="#TSQL.Generator-488"><span class="linenos">488</span></a>
-</span><span id="TSQL.Generator-489"><a href="#TSQL.Generator-489"><span class="linenos">489</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-490"><a href="#TSQL.Generator-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
-</span><span id="TSQL.Generator-491"><a href="#TSQL.Generator-491"><span class="linenos">491</span></a>
-</span><span id="TSQL.Generator-492"><a href="#TSQL.Generator-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-493"><a href="#TSQL.Generator-493"><span class="linenos">493</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
-</span><span id="TSQL.Generator-494"><a href="#TSQL.Generator-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-495"><a href="#TSQL.Generator-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL.Generator-496"><a href="#TSQL.Generator-496"><span class="linenos">496</span></a>
-</span><span id="TSQL.Generator-497"><a href="#TSQL.Generator-497"><span class="linenos">497</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator-498"><a href="#TSQL.Generator-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-499"><a href="#TSQL.Generator-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-500"><a href="#TSQL.Generator-500"><span class="linenos">500</span></a>
-</span><span id="TSQL.Generator-501"><a href="#TSQL.Generator-501"><span class="linenos">501</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator-502"><a href="#TSQL.Generator-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-503"><a href="#TSQL.Generator-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-504"><a href="#TSQL.Generator-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator-505"><a href="#TSQL.Generator-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator-506"><a href="#TSQL.Generator-506"><span class="linenos">506</span></a>
-</span><span id="TSQL.Generator-507"><a href="#TSQL.Generator-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="TSQL.Generator-508"><a href="#TSQL.Generator-508"><span class="linenos">508</span></a>
-</span><span id="TSQL.Generator-509"><a href="#TSQL.Generator-509"><span class="linenos">509</span></a> <span class="k">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator-510"><a href="#TSQL.Generator-510"><span class="linenos">510</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator-511"><a href="#TSQL.Generator-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator-512"><a href="#TSQL.Generator-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-478"><a href="#TSQL.Generator-478"><span class="linenos">478</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimeToStr</span><span class="p">:</span> <span class="n">_format_sql</span><span class="p">,</span>
+</span><span id="TSQL.Generator-479"><a href="#TSQL.Generator-479"><span class="linenos">479</span></a> <span class="p">}</span>
+</span><span id="TSQL.Generator-480"><a href="#TSQL.Generator-480"><span class="linenos">480</span></a>
+</span><span id="TSQL.Generator-481"><a href="#TSQL.Generator-481"><span class="linenos">481</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span>
+</span><span id="TSQL.Generator-482"><a href="#TSQL.Generator-482"><span class="linenos">482</span></a>
+</span><span id="TSQL.Generator-483"><a href="#TSQL.Generator-483"><span class="linenos">483</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TSQL.Generator-484"><a href="#TSQL.Generator-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 class="c1"># type: ignore</span>
+</span><span id="TSQL.Generator-485"><a href="#TSQL.Generator-485"><span class="linenos">485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
+</span><span id="TSQL.Generator-486"><a href="#TSQL.Generator-486"><span class="linenos">486</span></a> <span class="p">}</span>
+</span><span id="TSQL.Generator-487"><a href="#TSQL.Generator-487"><span class="linenos">487</span></a>
+</span><span id="TSQL.Generator-488"><a href="#TSQL.Generator-488"><span class="linenos">488</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;FETCH&quot;</span>
+</span><span id="TSQL.Generator-489"><a href="#TSQL.Generator-489"><span class="linenos">489</span></a>
+</span><span id="TSQL.Generator-490"><a href="#TSQL.Generator-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-491"><a href="#TSQL.Generator-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+</span><span id="TSQL.Generator-492"><a href="#TSQL.Generator-492"><span class="linenos">492</span></a>
+</span><span id="TSQL.Generator-493"><a href="#TSQL.Generator-493"><span class="linenos">493</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-494"><a href="#TSQL.Generator-494"><span class="linenos">494</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
+</span><span id="TSQL.Generator-495"><a href="#TSQL.Generator-495"><span class="linenos">495</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-496"><a href="#TSQL.Generator-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</span><span id="TSQL.Generator-497"><a href="#TSQL.Generator-497"><span class="linenos">497</span></a>
+</span><span id="TSQL.Generator-498"><a href="#TSQL.Generator-498"><span class="linenos">498</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-499"><a href="#TSQL.Generator-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-500"><a href="#TSQL.Generator-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-501"><a href="#TSQL.Generator-501"><span class="linenos">501</span></a>
+</span><span id="TSQL.Generator-502"><a href="#TSQL.Generator-502"><span class="linenos">502</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-503"><a href="#TSQL.Generator-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-504"><a href="#TSQL.Generator-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-505"><a href="#TSQL.Generator-505"><span class="linenos">505</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator-506"><a href="#TSQL.Generator-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator-507"><a href="#TSQL.Generator-507"><span class="linenos">507</span></a>
+</span><span id="TSQL.Generator-508"><a href="#TSQL.Generator-508"><span class="linenos">508</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="TSQL.Generator-509"><a href="#TSQL.Generator-509"><span class="linenos">509</span></a>
+</span><span id="TSQL.Generator-510"><a href="#TSQL.Generator-510"><span class="linenos">510</span></a> <span class="k">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator-511"><a href="#TSQL.Generator-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator-512"><a href="#TSQL.Generator-512"><span class="linenos">512</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator-513"><a href="#TSQL.Generator-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -1422,8 +1425,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.offset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.offset_sql-489"><a href="#TSQL.Generator.offset_sql-489"><span class="linenos">489</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.offset_sql-490"><a href="#TSQL.Generator.offset_sql-490"><span class="linenos">490</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.offset_sql-490"><a href="#TSQL.Generator.offset_sql-490"><span class="linenos">490</span></a> <span class="k">def</span> <span class="nf">offset_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.offset_sql-491"><a href="#TSQL.Generator.offset_sql-491"><span class="linenos">491</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">offset_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="si">}</span><span class="s2"> ROWS&quot;</span>
</span></pre></div>
@@ -1441,22 +1444,22 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.systemtime_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.systemtime_sql-492"><a href="#TSQL.Generator.systemtime_sql-492"><span class="linenos">492</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-493"><a href="#TSQL.Generator.systemtime_sql-493"><span class="linenos">493</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
-</span><span id="TSQL.Generator.systemtime_sql-494"><a href="#TSQL.Generator.systemtime_sql-494"><span class="linenos">494</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-495"><a href="#TSQL.Generator.systemtime_sql-495"><span class="linenos">495</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-496"><a href="#TSQL.Generator.systemtime_sql-496"><span class="linenos">496</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-497"><a href="#TSQL.Generator.systemtime_sql-497"><span class="linenos">497</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.systemtime_sql-498"><a href="#TSQL.Generator.systemtime_sql-498"><span class="linenos">498</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-499"><a href="#TSQL.Generator.systemtime_sql-499"><span class="linenos">499</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-500"><a href="#TSQL.Generator.systemtime_sql-500"><span class="linenos">500</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-501"><a href="#TSQL.Generator.systemtime_sql-501"><span class="linenos">501</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.systemtime_sql-502"><a href="#TSQL.Generator.systemtime_sql-502"><span class="linenos">502</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-503"><a href="#TSQL.Generator.systemtime_sql-503"><span class="linenos">503</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-504"><a href="#TSQL.Generator.systemtime_sql-504"><span class="linenos">504</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
-</span><span id="TSQL.Generator.systemtime_sql-505"><a href="#TSQL.Generator.systemtime_sql-505"><span class="linenos">505</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="TSQL.Generator.systemtime_sql-506"><a href="#TSQL.Generator.systemtime_sql-506"><span class="linenos">506</span></a>
-</span><span id="TSQL.Generator.systemtime_sql-507"><a href="#TSQL.Generator.systemtime_sql-507"><span class="linenos">507</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.systemtime_sql-493"><a href="#TSQL.Generator.systemtime_sql-493"><span class="linenos">493</span></a> <span class="k">def</span> <span class="nf">systemtime_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">SystemTime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-494"><a href="#TSQL.Generator.systemtime_sql-494"><span class="linenos">494</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span>
+</span><span id="TSQL.Generator.systemtime_sql-495"><a href="#TSQL.Generator.systemtime_sql-495"><span class="linenos">495</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-496"><a href="#TSQL.Generator.systemtime_sql-496"><span class="linenos">496</span></a> <span class="k">return</span> <span class="s2">&quot;FOR SYSTEM_TIME ALL&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-497"><a href="#TSQL.Generator.systemtime_sql-497"><span class="linenos">497</span></a>
+</span><span id="TSQL.Generator.systemtime_sql-498"><a href="#TSQL.Generator.systemtime_sql-498"><span class="linenos">498</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.systemtime_sql-499"><a href="#TSQL.Generator.systemtime_sql-499"><span class="linenos">499</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;AS OF&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-500"><a href="#TSQL.Generator.systemtime_sql-500"><span class="linenos">500</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME AS OF </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-501"><a href="#TSQL.Generator.systemtime_sql-501"><span class="linenos">501</span></a>
+</span><span id="TSQL.Generator.systemtime_sql-502"><a href="#TSQL.Generator.systemtime_sql-502"><span class="linenos">502</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;expression&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.systemtime_sql-503"><a href="#TSQL.Generator.systemtime_sql-503"><span class="linenos">503</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;FROM&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-504"><a href="#TSQL.Generator.systemtime_sql-504"><span class="linenos">504</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME FROM </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> TO </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-505"><a href="#TSQL.Generator.systemtime_sql-505"><span class="linenos">505</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;BETWEEN&quot;</span><span class="p">:</span>
+</span><span id="TSQL.Generator.systemtime_sql-506"><a href="#TSQL.Generator.systemtime_sql-506"><span class="linenos">506</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME BETWEEN </span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2"> AND </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="TSQL.Generator.systemtime_sql-507"><a href="#TSQL.Generator.systemtime_sql-507"><span class="linenos">507</span></a>
+</span><span id="TSQL.Generator.systemtime_sql-508"><a href="#TSQL.Generator.systemtime_sql-508"><span class="linenos">508</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;FOR SYSTEM_TIME CONTAINED IN (</span><span class="si">{</span><span class="n">start</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">end</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -1474,10 +1477,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#TSQL.Generator.returnsproperty_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.returnsproperty_sql-509"><a href="#TSQL.Generator.returnsproperty_sql-509"><span class="linenos">509</span></a> <span class="k">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="TSQL.Generator.returnsproperty_sql-510"><a href="#TSQL.Generator.returnsproperty_sql-510"><span class="linenos">510</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="TSQL.Generator.returnsproperty_sql-511"><a href="#TSQL.Generator.returnsproperty_sql-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="TSQL.Generator.returnsproperty_sql-512"><a href="#TSQL.Generator.returnsproperty_sql-512"><span class="linenos">512</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TSQL.Generator.returnsproperty_sql-510"><a href="#TSQL.Generator.returnsproperty_sql-510"><span class="linenos">510</span></a> <span class="k">def</span> <span class="nf">returnsproperty_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="TSQL.Generator.returnsproperty_sql-511"><a href="#TSQL.Generator.returnsproperty_sql-511"><span class="linenos">511</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="TSQL.Generator.returnsproperty_sql-512"><a href="#TSQL.Generator.returnsproperty_sql-512"><span class="linenos">512</span></a> <span class="n">table</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="TSQL.Generator.returnsproperty_sql-513"><a href="#TSQL.Generator.returnsproperty_sql-513"><span class="linenos">513</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;RETURNS </span><span class="si">{</span><span class="n">table</span><span class="si">}{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -1607,7 +1610,7 @@ Default: True</li>
<dd id="TSQL.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="TSQL.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="TSQL.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="TSQL.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="TSQL.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="TSQL.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="TSQL.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="TSQL.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1616,6 +1619,7 @@ Default: True</li>
<dd id="TSQL.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="TSQL.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="TSQL.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="TSQL.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="TSQL.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="TSQL.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="TSQL.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/executor/python.html b/docs/sqlglot/executor/python.html
index 176df2e..a93e0b6 100644
--- a/docs/sqlglot/executor/python.html
+++ b/docs/sqlglot/executor/python.html
@@ -1778,7 +1778,7 @@ Default: True</li>
<dd id="Python.Generator.where_sql" class="function"><a href="../generator.html#Generator.where_sql">where_sql</a></dd>
<dd id="Python.Generator.window_sql" class="function"><a href="../generator.html#Generator.window_sql">window_sql</a></dd>
<dd id="Python.Generator.partition_by_sql" class="function"><a href="../generator.html#Generator.partition_by_sql">partition_by_sql</a></dd>
- <dd id="Python.Generator.window_spec_sql" class="function"><a href="../generator.html#Generator.window_spec_sql">window_spec_sql</a></dd>
+ <dd id="Python.Generator.windowspec_sql" class="function"><a href="../generator.html#Generator.windowspec_sql">windowspec_sql</a></dd>
<dd id="Python.Generator.withingroup_sql" class="function"><a href="../generator.html#Generator.withingroup_sql">withingroup_sql</a></dd>
<dd id="Python.Generator.between_sql" class="function"><a href="../generator.html#Generator.between_sql">between_sql</a></dd>
<dd id="Python.Generator.bracket_sql" class="function"><a href="../generator.html#Generator.bracket_sql">bracket_sql</a></dd>
@@ -1787,6 +1787,7 @@ Default: True</li>
<dd id="Python.Generator.exists_sql" class="function"><a href="../generator.html#Generator.exists_sql">exists_sql</a></dd>
<dd id="Python.Generator.case_sql" class="function"><a href="../generator.html#Generator.case_sql">case_sql</a></dd>
<dd id="Python.Generator.constraint_sql" class="function"><a href="../generator.html#Generator.constraint_sql">constraint_sql</a></dd>
+ <dd id="Python.Generator.nextvaluefor_sql" class="function"><a href="../generator.html#Generator.nextvaluefor_sql">nextvaluefor_sql</a></dd>
<dd id="Python.Generator.extract_sql" class="function"><a href="../generator.html#Generator.extract_sql">extract_sql</a></dd>
<dd id="Python.Generator.trim_sql" class="function"><a href="../generator.html#Generator.trim_sql">trim_sql</a></dd>
<dd id="Python.Generator.concat_sql" class="function"><a href="../generator.html#Generator.concat_sql">concat_sql</a></dd>
diff --git a/docs/sqlglot/expressions.html b/docs/sqlglot/expressions.html
index a4b82fc..e4c3a7b 100644
--- a/docs/sqlglot/expressions.html
+++ b/docs/sqlglot/expressions.html
@@ -164,6 +164,27 @@
<li>
<a class="function" href="#Condition.not_">not_</a>
</li>
+ <li>
+ <a class="function" href="#Condition.isin">isin</a>
+ </li>
+ <li>
+ <a class="function" href="#Condition.between">between</a>
+ </li>
+ <li>
+ <a class="function" href="#Condition.like">like</a>
+ </li>
+ <li>
+ <a class="function" href="#Condition.ilike">ilike</a>
+ </li>
+ <li>
+ <a class="function" href="#Condition.eq">eq</a>
+ </li>
+ <li>
+ <a class="function" href="#Condition.neq">neq</a>
+ </li>
+ <li>
+ <a class="function" href="#Condition.rlike">rlike</a>
+ </li>
</ul>
</li>
@@ -2075,6 +2096,12 @@
<li>
<a class="class" href="#Case">Case</a>
<ul class="memberlist">
+ <li>
+ <a class="function" href="#Case.when">when</a>
+ </li>
+ <li>
+ <a class="function" href="#Case.else_">else_</a>
+ </li>
</ul>
</li>
@@ -2949,6 +2976,12 @@
</li>
<li>
+ <a class="class" href="#NextValueFor">NextValueFor</a>
+ <ul class="memberlist">
+ </ul>
+
+ </li>
+ <li>
<a class="function" href="#maybe_parse">maybe_parse</a>
</li>
<li>
@@ -3739,7 +3772,7 @@ SQL expressions, such as <code><a href="#select">sqlglot.expressions.select</a><
</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a>
</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="k">class</span> <span class="nc">Condition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a><span class="sd"> AND this condition with one or multiple expressions.</span>
</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a>
@@ -3751,4567 +3784,4713 @@ SQL expressions, such as <code><a href="#select">sqlglot.expressions.select</a><
</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a><span class="sd"> And: the new condition.</span>
-</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="k">return</span> <span class="n">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a>
-</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a> <span class="k">def</span> <span class="nf">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a><span class="sd"> OR this condition with one or multiple expressions.</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="sd"> Example:</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).or_(&quot;y=1&quot;).sql()</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a><span class="sd"> &#39;x = 1 OR y = 1&#39;</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="sd"> Args:</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a><span class="sd"> Or: the new condition.</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="k">return</span> <span class="n">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a>
-</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="k">def</span> <span class="nf">not_</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a><span class="sd"> Wrap this condition with NOT.</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="sd"> Example:</span>
-</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).not_().sql()</span>
-</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a><span class="sd"> &#39;NOT x = 1&#39;</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="sd"> Returns:</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a><span class="sd"> Not: the new condition.</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a><span class="sd"> copy (bool): whether or not to copy the involved expressions (only applies to Expressions).</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a><span class="sd"> And: the new condition.</span>
+</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="k">return</span> <span class="n">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</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">def</span> <span class="nf">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a><span class="sd"> OR this condition with one or multiple expressions.</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="sd"> Example:</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).or_(&quot;y=1&quot;).sql()</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a><span class="sd"> &#39;x = 1 OR y = 1&#39;</span>
+</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a>
+</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a><span class="sd"> Args:</span>
+</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a><span class="sd"> copy (bool): whether or not to copy the involved expressions (only applies to Expressions).</span>
+</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a><span class="sd"> Or: the new condition.</span>
+</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="k">return</span> <span class="n">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</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">def</span> <span class="nf">not_</span><span class="p">(</span><span class="bp">self</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-694"><a href="#L-694"><span class="linenos"> 694</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a><span class="sd"> Wrap this condition with NOT.</span>
+</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a>
+</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a><span class="sd"> Example:</span>
+</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).not_().sql()</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a><span class="sd"> &#39;NOT x = 1&#39;</span>
+</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a>
+</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a><span class="sd"> Args:</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a><span class="sd"> copy (bool): whether or not to copy this object.</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><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a><span class="k">class</span> <span class="nc">Predicate</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Relationships like x = y, x &gt; 1, x &gt;= y.&quot;&quot;&quot;</span>
-</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a>
+</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a><span class="sd"> Returns:</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a><span class="sd"> Not: the new condition.</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</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-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">class</span> <span class="nc">DerivedTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="nd">@property</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="k">def</span> <span class="nf">alias_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_alias</span><span class="p">:</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="n">column_list</span> <span class="o">=</span> <span class="n">table_alias</span><span class="o">.</span><span class="n">assert_is</span><span class="p">(</span><span class="n">TableAlias</span><span class="p">)</span><span class="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-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">column_list</span><span class="p">]</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="nd">@property</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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-721"><a href="#L-721"><span class="linenos"> 721</span></a>
-</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="k">if</span> <span class="n">alias</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="n">alias</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="k">return</span> <span class="p">[]</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="nd">@property</span>
-</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selects</span><span class="p">]</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><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a><span class="k">class</span> <span class="nc">Unionable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a><span class="sd"> Builds a UNION expression.</span>
-</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a>
-</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a><span class="sd"> Example:</span>
-</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).union(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</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="sd"> Args:</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a><span class="sd"> Returns:</span>
-</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a><span class="sd"> Union: the Union expression.</span>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="k">return</span> <span class="n">union</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="k">def</span> <span class="nf">_binop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">klass</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">other</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">convert</span><span class="p">(</span><span class="n">other</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-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">klass</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">other</span><span class="p">,</span> <span class="n">klass</span><span class="p">):</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_wrap</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">Binary</span><span class="p">)</span>
+</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">_wrap</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Binary</span><span class="p">)</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="k">if</span> <span class="n">reverse</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="n">klass</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">other</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-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="k">return</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="n">other</span><span class="p">)</span>
+</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a>
+</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="k">def</span> <span class="fm">__getitem__</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">ExpOrStr</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="n">ExpOrStr</span><span class="p">]):</span>
+</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="k">return</span> <span class="n">Bracket</span><span class="p">(</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">other</span><span class="p">)]</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="p">)</span>
+</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a>
+</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="n">query</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">),</span>
+</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</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-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="n">query</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</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">query</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="p">)</span>
+</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a>
+</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="k">def</span> <span class="nf">between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">low</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="n">high</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="n">copy</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="n">Between</span><span class="p">:</span>
+</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="k">return</span> <span class="n">Between</span><span class="p">(</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">),</span>
+</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="n">low</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="n">high</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">high</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="p">)</span>
+</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a>
+</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="k">def</span> <span class="nf">like</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Like</span><span class="p">:</span>
+</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Like</span><span class="p">,</span> <span class="n">other</span><span class="p">)</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">ilike</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ILike</span><span class="p">:</span>
+</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">ILike</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a>
+</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="k">def</span> <span class="nf">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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">EQ</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="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">EQ</span><span class="p">,</span> <span class="n">other</span><span class="p">)</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">neq</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NEQ</span><span class="p">:</span>
+</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">NEQ</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a>
-</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a><span class="sd"> Builds an INTERSECT expression.</span>
-</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a>
-</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a><span class="sd"> Example:</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).intersect(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
+</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="k">def</span> <span class="nf">rlike</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RegexpLike</span><span class="p">:</span>
+</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">RegexpLike</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a>
+</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="k">def</span> <span class="fm">__lt__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">LT</span><span class="p">:</span>
+</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">LT</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>
+</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="k">def</span> <span class="fm">__le__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">LTE</span><span class="p">:</span>
+</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">LTE</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a><span class="sd"> Args:</span>
-</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a><span class="sd"> Returns:</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a><span class="sd"> Intersect: the Intersect expression</span>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="k">return</span> <span class="n">intersect</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a><span class="sd"> Builds an EXCEPT expression.</span>
+</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="k">def</span> <span class="fm">__gt__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">GT</span><span class="p">:</span>
+</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">GT</span><span class="p">,</span> <span class="n">other</span><span class="p">)</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="fm">__ge__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">GTE</span><span class="p">:</span>
+</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">GTE</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="k">def</span> <span class="fm">__add__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Add</span><span class="p">:</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Add</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="k">def</span> <span class="fm">__radd__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Add</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="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Add</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="fm">__sub__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Sub</span><span class="p">:</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Sub</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a>
-</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a><span class="sd"> Example:</span>
-</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).except_(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
-</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a>
-</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a><span class="sd"> Args:</span>
-</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a><span class="sd"> Returns:</span>
-</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a><span class="sd"> Except: the Except expression</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="k">return</span> <span class="n">except_</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</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><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a><span class="k">class</span> <span class="nc">UDTF</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
-</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="k">pass</span>
-</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a>
+</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="k">def</span> <span class="fm">__rsub__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Sub</span><span class="p">:</span>
+</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Sub</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="fm">__mul__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mul</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">_binop</span><span class="p">(</span><span class="n">Mul</span><span class="p">,</span> <span class="n">other</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="fm">__rmul__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mul</span><span class="p">:</span>
+</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Mul</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a>
+</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="k">def</span> <span class="fm">__truediv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Div</span><span class="p">:</span>
+</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Div</span><span class="p">,</span> <span class="n">other</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">def</span> <span class="fm">__rtruediv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Div</span><span class="p">:</span>
+</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Div</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a>
+</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="k">def</span> <span class="fm">__floordiv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">IntDiv</span><span class="p">:</span>
+</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">IntDiv</span><span class="p">,</span> <span class="n">other</span><span class="p">)</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="fm">__rfloordiv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">IntDiv</span><span class="p">:</span>
+</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">IntDiv</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a>
-</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a><span class="k">class</span> <span class="nc">Cache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="s2">&quot;lazy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="p">}</span>
+</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="k">def</span> <span class="fm">__mod__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mod</span><span class="p">:</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Mod</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a>
+</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="k">def</span> <span class="fm">__rmod__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mod</span><span class="p">:</span>
+</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Mod</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a>
+</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="k">def</span> <span class="fm">__pow__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Pow</span><span class="p">:</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Pow</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a>
-</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a>
-</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a><span class="k">class</span> <span class="nc">Uncache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a>
-</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a>
-</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a><span class="k">class</span> <span class="nc">Create</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="s2">&quot;properties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="s2">&quot;indexes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="s2">&quot;no_schema_binding&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="s2">&quot;begin&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="p">}</span>
-</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a>
+</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="k">def</span> <span class="fm">__rpow__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Pow</span><span class="p">:</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Pow</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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">def</span> <span class="fm">__and__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">And</span><span class="p">:</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">And</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a>
+</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="k">def</span> <span class="fm">__rand__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">And</span><span class="p">:</span>
+</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">And</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a>
+</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="k">def</span> <span class="fm">__or__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Or</span><span class="p">:</span>
+</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Or</span><span class="p">,</span> <span class="n">other</span><span class="p">)</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="k">def</span> <span class="fm">__ror__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Or</span><span class="p">:</span>
+</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Or</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Neg</span><span class="p">:</span>
+</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="k">return</span> <span class="n">Neg</span><span class="p">(</span><span class="n">this</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">copy</span><span class="p">(),</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><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="k">def</span> <span class="fm">__invert__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Not</span><span class="p">:</span>
+</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">())</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">class</span> <span class="nc">Describe</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a>
+</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a>
+</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a><span class="k">class</span> <span class="nc">Predicate</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Relationships like x = y, x &gt; 1, x &gt;= y.&quot;&quot;&quot;</span>
</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a>
-</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a><span class="k">class</span> <span class="nc">Pragma</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="k">pass</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><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a><span class="k">class</span> <span class="nc">Set</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">arg_types</span> <span class="o">=</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-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><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a><span class="k">class</span> <span class="nc">SetItem</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># MySQL SET NAMES statement</span>
-</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="p">}</span>
-</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a>
+</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a>
+</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a><span class="k">class</span> <span class="nc">DerivedTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="nd">@property</span>
+</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="k">def</span> <span class="nf">alias_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_alias</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="p">[]</span>
+</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="n">column_list</span> <span class="o">=</span> <span class="n">table_alias</span><span class="o">.</span><span class="n">assert_is</span><span class="p">(</span><span class="n">TableAlias</span><span class="p">)</span><span class="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-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">column_list</span><span class="p">]</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="nd">@property</span>
+</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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-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">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="k">return</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="k">return</span> <span class="p">[]</span>
</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a>
-</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a><span class="k">class</span> <span class="nc">Show</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="s2">&quot;like&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="s2">&quot;full&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="s2">&quot;mutex&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="s2">&quot;channel&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="s2">&quot;log&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="s2">&quot;types&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <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><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a><span class="k">class</span> <span class="nc">UserDefinedFunction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a>
-</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="k">class</span> <span class="nc">CharacterSet</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</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;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a>
-</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="k">class</span> <span class="nc">With</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="kc">False</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="nd">@property</span>
-</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="k">def</span> <span class="nf">recursive</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-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="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-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="nd">@property</span>
+</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selects</span><span class="p">]</span>
+</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a>
+</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">class</span> <span class="nc">Unionable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a><span class="sd"> Builds a UNION expression.</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="sd"> Example:</span>
+</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).union(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</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="sd"> Args:</span>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a><span class="sd"> Returns:</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a><span class="sd"> Union: the Union expression.</span>
+</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="k">return</span> <span class="n">union</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</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="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a><span class="sd"> Builds an INTERSECT expression.</span>
+</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a>
+</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a><span class="sd"> Example:</span>
+</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).intersect(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</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><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a><span class="k">class</span> <span class="nc">WithinGroup</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</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">False</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><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a><span class="k">class</span> <span class="nc">CTE</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">):</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</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;alias&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a>
-</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a><span class="k">class</span> <span class="nc">TableAlias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</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;columns&quot;</span><span class="p">:</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><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="nd">@property</span>
-</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a><span class="k">class</span> <span class="nc">BitString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="k">pass</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a><span class="sd"> Args:</span>
+</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a><span class="sd"> Returns:</span>
+</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a><span class="sd"> Intersect: the Intersect expression</span>
+</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="k">return</span> <span class="n">intersect</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a>
+</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a><span class="sd"> Builds an EXCEPT expression.</span>
+</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a><span class="sd"> Example:</span>
+</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).except_(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</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><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a><span class="k">class</span> <span class="nc">HexString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="k">pass</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><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a><span class="k">class</span> <span class="nc">ByteString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="k">pass</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><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a><span class="k">class</span> <span class="nc">Column</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</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;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;join_mark&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a><span class="sd"> Args:</span>
+</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a><span class="sd"> Returns:</span>
+</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a><span class="sd"> Except: the Except expression</span>
+</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="k">return</span> <span class="n">except_</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</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><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="nd">@property</span>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="k">def</span> <span class="nf">table</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-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a><span class="k">class</span> <span class="nc">UDTF</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="k">pass</span>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a>
</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="nd">@property</span>
-</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="k">def</span> <span class="nf">db</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-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><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="nd">@property</span>
-</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="k">def</span> <span class="nf">catalog</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-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</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="nd">@property</span>
-</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</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-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a>
-</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="nd">@property</span>
-</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="k">def</span> <span class="nf">parts</span><span class="p">(</span><span class="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">Identifier</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;Return the parts of a column in order catalog, db, table, name.&quot;&quot;&quot;</span>
-</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">part</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span> <span class="k">if</span> <span class="n">part</span><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="k">def</span> <span class="nf">to_dot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
-</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts the column into a dot expression.&quot;&quot;&quot;</span>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parts</span>
-</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</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">while</span> <span class="n">parent</span><span class="p">:</span>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</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-946"><a href="#L-946"><span class="linenos"> 946</span></a>
-</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="k">return</span> <span class="n">Dot</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
+</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a><span class="k">class</span> <span class="nc">Cache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="n">arg_types</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="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="s2">&quot;lazy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</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><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="k">class</span> <span class="nc">Uncache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><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><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a><span class="k">class</span> <span class="nc">Create</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="s2">&quot;properties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="s2">&quot;indexes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="s2">&quot;no_schema_binding&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="s2">&quot;begin&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="p">}</span>
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a>
</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">class</span> <span class="nc">ColumnPosition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</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;position&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a><span class="k">class</span> <span class="nc">Describe</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a><span class="k">class</span> <span class="nc">ColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="p">}</span>
-</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a>
-</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">class</span> <span class="nc">AlterColumn</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="s2">&quot;dtype&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="s2">&quot;drop&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="p">}</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><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a><span class="k">class</span> <span class="nc">RenameTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="k">pass</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><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a><span class="k">class</span> <span class="nc">SetTag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;unset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a><span class="k">class</span> <span class="nc">Comment</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</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;kind&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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a><span class="k">class</span> <span class="nc">ColumnConstraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</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;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a><span class="k">class</span> <span class="nc">Pragma</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="k">pass</span>
+</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a>
+</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">class</span> <span class="nc">Set</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="n">arg_types</span> <span class="o">=</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-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><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a><span class="k">class</span> <span class="nc">SetItem</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># MySQL SET NAMES statement</span>
+</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="p">}</span>
+</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a>
+</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">class</span> <span class="nc">Show</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="s2">&quot;like&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="s2">&quot;full&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="s2">&quot;mutex&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="s2">&quot;channel&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="s2">&quot;log&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="s2">&quot;types&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <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">class</span> <span class="nc">ColumnConstraintKind</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="k">pass</span>
-</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a>
+</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">class</span> <span class="nc">UserDefinedFunction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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="k">class</span> <span class="nc">AutoIncrementColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="k">pass</span>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a>
+</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">class</span> <span class="nc">CharacterSet</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</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;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a>
-</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a><span class="k">class</span> <span class="nc">CaseSpecificColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;not_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a>
+</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="k">class</span> <span class="nc">With</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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="k">class</span> <span class="nc">CharacterSetColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</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><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a>
+</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="nd">@property</span>
+</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="k">def</span> <span class="nf">recursive</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-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="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-1006"><a href="#L-1006"><span class="linenos">1006</span></a>
-</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a><span class="k">class</span> <span class="nc">CheckColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="k">pass</span>
-</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a>
+</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">class</span> <span class="nc">WithinGroup</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</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">False</span><span class="p">}</span>
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a>
-</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a><span class="k">class</span> <span class="nc">CollateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="k">pass</span>
-</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a>
+</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">class</span> <span class="nc">CTE</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">):</span>
+</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</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;alias&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a><span class="k">class</span> <span class="nc">CommentColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="k">pass</span>
-</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a>
+</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a><span class="k">class</span> <span class="nc">TableAlias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</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;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a><span class="k">class</span> <span class="nc">CompressColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="k">pass</span>
-</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a>
+</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="nd">@property</span>
+</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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-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="k">class</span> <span class="nc">DateFormatColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</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><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a>
+</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="k">class</span> <span class="nc">BitString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="k">pass</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="k">class</span> <span class="nc">DefaultColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="k">pass</span>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a>
+</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">class</span> <span class="nc">HexString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="k">pass</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="k">class</span> <span class="nc">EncodeColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="k">pass</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
+</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="k">class</span> <span class="nc">ByteString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="k">pass</span>
</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a>
-</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a><span class="k">class</span> <span class="nc">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="s2">&quot;increment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="s2">&quot;minvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="s2">&quot;maxvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="s2">&quot;cycle&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="p">}</span>
-</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a>
+</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">class</span> <span class="nc">Column</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</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;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;join_mark&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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="nd">@property</span>
+</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="k">def</span> <span class="nf">table</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-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</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="nd">@property</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">def</span> <span class="nf">db</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-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</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="k">class</span> <span class="nc">InlineLengthColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="k">pass</span>
-</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a>
+</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="nd">@property</span>
+</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="k">def</span> <span class="nf">catalog</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-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">)</span>
</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a>
-</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a><span class="k">class</span> <span class="nc">NotNullColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;allow_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a>
+</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="nd">@property</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</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-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a><span class="c1"># https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a><span class="k">class</span> <span class="nc">OnUpdateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="k">pass</span>
-</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a>
+</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="nd">@property</span>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="k">def</span> <span class="nf">parts</span><span class="p">(</span><span class="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">Identifier</span><span class="p">]:</span>
+</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the parts of a column in order catalog, db, table, name.&quot;&quot;&quot;</span>
+</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">part</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span> <span class="k">if</span> <span class="n">part</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">class</span> <span class="nc">PrimaryKeyColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</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><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a><span class="k">class</span> <span class="nc">TitleColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">pass</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><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a><span class="k">class</span> <span class="nc">UniqueColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="n">arg_types</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><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a>
+</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="k">def</span> <span class="nf">to_dot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts the column into a dot expression.&quot;&quot;&quot;</span>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parts</span>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a>
+</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">while</span> <span class="n">parent</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="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</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-1069"><a href="#L-1069"><span class="linenos">1069</span></a>
+</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="k">return</span> <span class="n">Dot</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a>
-</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a><span class="k">class</span> <span class="nc">UppercaseColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="n">arg_types</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><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a>
+</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">class</span> <span class="nc">ColumnPosition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</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;position&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a>
-</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a><span class="k">class</span> <span class="nc">PathColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="k">pass</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><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a><span class="k">class</span> <span class="nc">Constraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a><span class="k">class</span> <span class="nc">Delete</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</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;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</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">class</span> <span class="nc">ColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="p">}</span>
+</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a>
</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">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</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-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <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><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
+</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a><span class="k">class</span> <span class="nc">AlterColumn</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="s2">&quot;dtype&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="s2">&quot;drop&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="p">}</span>
</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a>
-</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a><span class="sd"> Example:</span>
-</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
-</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</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">class</span> <span class="nc">RenameTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="k">pass</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="sd"> Args:</span>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a><span class="sd"> table: the table from which to delete.</span>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a>
-</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="p">)</span>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="n">append</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-1124"><a href="#L-1124"><span class="linenos">1124</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-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <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><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a><span class="sd"> Append to or set the WHERE expressions.</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="sd"> Example:</span>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a><span class="sd"> &quot;DELETE FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</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="sd"> Args:</span>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a>
+</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a><span class="k">class</span> <span class="nc">SetTag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;unset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a>
+</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">class</span> <span class="nc">Comment</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</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;kind&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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a>
+</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">class</span> <span class="nc">ColumnConstraint</span><span class="p">(</span><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="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;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a>
+</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">class</span> <span class="nc">ColumnConstraintKind</span><span class="p">(</span><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="k">pass</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><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a><span class="k">class</span> <span class="nc">AutoIncrementColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="k">pass</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><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a><span class="k">class</span> <span class="nc">CaseSpecificColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;not_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a><span class="k">class</span> <span class="nc">CharacterSetColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</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><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><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a><span class="k">class</span> <span class="nc">CheckColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="k">pass</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><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a><span class="k">class</span> <span class="nc">CollateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="k">pass</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><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a><span class="k">class</span> <span class="nc">CommentColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="k">pass</span>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a>
+</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a><span class="k">class</span> <span class="nc">CompressColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="k">pass</span>
</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="p">)</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">returning</span><span class="p">(</span>
-</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <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><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</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">class</span> <span class="nc">DateFormatColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</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><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a>
+</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">class</span> <span class="nc">DefaultColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="k">pass</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a>
+</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a>
+</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a><span class="k">class</span> <span class="nc">EncodeColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="k">pass</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><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a><span class="k">class</span> <span class="nc">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="s2">&quot;increment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="s2">&quot;minvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="s2">&quot;maxvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="s2">&quot;cycle&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="p">}</span>
</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a>
-</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a><span class="sd"> Example:</span>
-</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).returning(&quot;*&quot;, dialect=&quot;postgres&quot;).sql()</span>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</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">class</span> <span class="nc">InlineLengthColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="k">pass</span>
</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a>
-</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a><span class="sd"> Args:</span>
-</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a>
-</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a><span class="sd"> &quot;&quot;&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">_apply_builder</span><span class="p">(</span>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;returning&quot;</span><span class="p">,</span>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
-</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="p">)</span>
+</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a>
+</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a><span class="k">class</span> <span class="nc">NotNullColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;allow_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a>
+</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="c1"># https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html</span>
+</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a><span class="k">class</span> <span class="nc">OnUpdateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="k">pass</span>
+</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a>
+</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a>
+</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a><span class="k">class</span> <span class="nc">PrimaryKeyColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a>
+</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a>
+</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a><span class="k">class</span> <span class="nc">TitleColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="k">pass</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><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a><span class="k">class</span> <span class="nc">UniqueColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="n">arg_types</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><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><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a><span class="k">class</span> <span class="nc">Drop</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="n">arg_types</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="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="s2">&quot;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="s2">&quot;materialized&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a> <span class="s2">&quot;cascade&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="s2">&quot;purge&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="p">}</span>
+</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a><span class="k">class</span> <span class="nc">UppercaseColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="n">arg_types</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><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><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a><span class="k">class</span> <span class="nc">PathColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="k">pass</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><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a><span class="k">class</span> <span class="nc">Constraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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><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">class</span> <span class="nc">Filter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</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><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><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a><span class="k">class</span> <span class="nc">Check</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="k">pass</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><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a><span class="k">class</span> <span class="nc">Directory</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a> <span class="c1"># https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-dml-insert-overwrite-directory-hive.html</span>
-</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</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;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a><span class="k">class</span> <span class="nc">Delete</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</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;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</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">delete</span><span class="p">(</span>
+</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</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-1214"><a href="#L-1214"><span class="linenos">1214</span></a> <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><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a>
-</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a>
-</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a><span class="k">class</span> <span class="nc">ForeignKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a> <span class="s2">&quot;reference&quot;</span><span class="p">:</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="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="p">}</span>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a>
+</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a><span class="sd"> Example:</span>
+</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
+</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
+</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a>
+</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a><span class="sd"> Args:</span>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a><span class="sd"> table: the table from which to delete.</span>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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">class</span> <span class="nc">PrimaryKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a><span class="k">class</span> <span class="nc">Unique</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a><span class="c1"># https://www.postgresql.org/docs/9.1/sql-selectinto.html</span>
-</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a><span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_INTO.html#r_SELECT_INTO-examples</span>
-</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a><span class="k">class</span> <span class="nc">Into</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</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;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;unlogged&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="p">)</span>
</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a>
-</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">class</span> <span class="nc">From</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a><span class="k">class</span> <span class="nc">Having</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="k">pass</span>
-</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a>
-</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a>
-</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a><span class="k">class</span> <span class="nc">Hint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a><span class="k">class</span> <span class="nc">JoinHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a>
-</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">class</span> <span class="nc">Identifier</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</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;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a>
-</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="nd">@property</span>
-</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="k">def</span> <span class="nf">quoted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;quoted&quot;</span><span class="p">))</span>
-</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a>
-</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="nd">@property</span>
-</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
-</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">isupper</span><span class="p">()</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</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="p">(</span><span class="bp">self</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">quoted</span><span class="p">)</span>
-</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a> <span class="k">return</span> <span class="bp">self</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-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="nd">@property</span>
-</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</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><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</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><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a><span class="k">class</span> <span class="nc">Index</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a> <span class="s2">&quot;primary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="s2">&quot;amp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</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><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="s2">&quot;conflict&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="s2">&quot;alternative&quot;</span><span class="p">:</span> <span class="kc">False</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-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="k">def</span> <span class="nf">where</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="p">,</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="n">append</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-1247"><a href="#L-1247"><span class="linenos">1247</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-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <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><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a><span class="sd"> Append to or set the WHERE expressions.</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="sd"> Example:</span>
+</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
+</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a><span class="sd"> &quot;DELETE FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&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="sd"> Args:</span>
+</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a>
+</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="p">)</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">returning</span><span class="p">(</span>
+</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</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-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <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><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</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="sd"> Example:</span>
+</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).returning(&quot;*&quot;, dialect=&quot;postgres&quot;).sql()</span>
+</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</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="sd"> Args:</span>
+</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a>
-</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a>
-</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a><span class="k">class</span> <span class="nc">OnConflict</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="s2">&quot;duplicate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a> <span class="s2">&quot;nothing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a> <span class="s2">&quot;constraint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="p">}</span>
-</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a>
-</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">class</span> <span class="nc">Returning</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;returning&quot;</span><span class="p">,</span>
+</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span>
+</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
+</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="p">)</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><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/charset-introducer.html</span>
-</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a><span class="k">class</span> <span class="nc">Introducer</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</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><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a>
-</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a>
-</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a><span class="c1"># national char, like n&#39;utf8&#39;</span>
-</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a><span class="k">class</span> <span class="nc">National</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="k">pass</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><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a><span class="k">class</span> <span class="nc">LoadData</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="s2">&quot;inpath&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a> <span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="p">}</span>
+</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a><span class="k">class</span> <span class="nc">Drop</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="s2">&quot;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="s2">&quot;materialized&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="s2">&quot;cascade&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="s2">&quot;purge&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="p">}</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><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a><span class="k">class</span> <span class="nc">Filter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</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><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><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a><span class="k">class</span> <span class="nc">Check</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="k">pass</span>
+</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a>
</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a>
-</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">class</span> <span class="nc">Partition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a><span class="k">class</span> <span class="nc">Directory</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="c1"># https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-dml-insert-overwrite-directory-hive.html</span>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</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;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a>
</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a>
-</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a><span class="k">class</span> <span class="nc">Fetch</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a><span class="k">class</span> <span class="nc">ForeignKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="s2">&quot;direction&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a> <span class="s2">&quot;with_ties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="s2">&quot;reference&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a> <span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a> <span class="p">}</span>
</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a>
</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">class</span> <span class="nc">Group</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a> <span class="s2">&quot;grouping_sets&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="p">}</span>
+</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a><span class="k">class</span> <span class="nc">PrimaryKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a>
+</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">class</span> <span class="nc">Unique</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a>
</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><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a><span class="k">class</span> <span class="nc">Lambda</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a>
+</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a><span class="c1"># https://www.postgresql.org/docs/9.1/sql-selectinto.html</span>
+</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a><span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_INTO.html#r_SELECT_INTO-examples</span>
+</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a><span class="k">class</span> <span class="nc">Into</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</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;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;unlogged&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a>
-</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</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-1367"><a href="#L-1367"><span class="linenos">1367</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-1368"><a href="#L-1368"><span class="linenos">1368</span></a>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a>
+</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a><span class="k">class</span> <span class="nc">From</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</span></a>
-</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</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>
-</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</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;is_string&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a>
-</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a> <span class="nd">@property</span>
-</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
-</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_string&quot;</span><span class="p">))</span>
-</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a>
-</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
-</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a>
-</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
-</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="nd">@property</span>
-</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</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><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a>
+</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a>
+</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a><span class="k">class</span> <span class="nc">Having</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a> <span class="k">pass</span>
+</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a>
+</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</span></a>
+</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a><span class="k">class</span> <span class="nc">Hint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</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><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="k">class</span> <span class="nc">JoinHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a>
+</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="k">class</span> <span class="nc">Identifier</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</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;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a>
+</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a> <span class="nd">@property</span>
+</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="k">def</span> <span class="nf">quoted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;quoted&quot;</span><span class="p">))</span>
</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a>
-</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a><span class="k">class</span> <span class="nc">Join</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a> <span class="p">}</span>
+</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a> <span class="nd">@property</span>
+</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
+</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">isupper</span><span class="p">()</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
+</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</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">quoted</span><span class="p">)</span>
+</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="k">return</span> <span class="bp">self</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-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="nd">@property</span>
+</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</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><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</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><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a> <span class="nd">@property</span>
-</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="k">def</span> <span class="nf">kind</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="k">return</span> <span class="bp">self</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a>
-</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="nd">@property</span>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="k">def</span> <span class="nf">side</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a>
-</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="nd">@property</span>
-</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="k">def</span> <span class="nf">hint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;hint&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a><span class="k">class</span> <span class="nc">Index</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="s2">&quot;primary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="s2">&quot;amp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</span>
+</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="p">}</span>
+</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a>
</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a>
-</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</span></a> <span class="nd">@property</span>
-</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a> <span class="k">def</span> <span class="nf">alias_or_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias_or_name</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">def</span> <span class="nf">on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a><span class="sd"> Append to or set the ON expressions.</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="sd"> Example:</span>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).on(&quot;y = 1&quot;).sql()</span>
-</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
+</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</span></a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a> <span class="s2">&quot;conflict&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a> <span class="s2">&quot;alternative&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <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="sd"> Args:</span>
-</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="k">class</span> <span class="nc">OnConflict</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="s2">&quot;duplicate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a> <span class="s2">&quot;nothing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a> <span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a> <span class="s2">&quot;constraint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a> <span class="p">}</span>
</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a>
-</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a><span class="sd"> Join: the modified join expression.</span>
-</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;on&quot;</span><span class="p">,</span>
-</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="p">)</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="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
-</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a> <span class="n">join</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="kc">None</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">return</span> <span class="n">join</span>
-</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</span></a>
-</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a><span class="sd"> Append to or set the USING expressions.</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="sd"> Example:</span>
-</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).using(&quot;foo&quot;, &quot;bla&quot;).sql()</span>
-</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</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="k">class</span> <span class="nc">Returning</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a>
+</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a>
+</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/charset-introducer.html</span>
+</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a><span class="k">class</span> <span class="nc">Introducer</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</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><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a>
+</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a>
+</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a><span class="c1"># national char, like n&#39;utf8&#39;</span>
+</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a><span class="k">class</span> <span class="nc">National</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a> <span class="k">pass</span>
+</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</span></a>
+</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a>
+</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</span></a><span class="k">class</span> <span class="nc">LoadData</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="s2">&quot;inpath&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1458"><a href="#L-1458"><span class="linenos">1458</span></a> <span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a> <span class="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a><span class="sd"> Args:</span>
-</span><span id="L-1464"><a href="#L-1464"><span class="linenos">1464</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a><span class="sd"> append (bool): if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
-</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</span></a>
-</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a><span class="sd"> Returns:</span>
-</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</span></a><span class="sd"> Join: the modified join expression.</span>
-</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="p">)</span>
+</span><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a><span class="k">class</span> <span class="nc">Partition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1464"><a href="#L-1464"><span class="linenos">1464</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a>
+</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a>
+</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</span></a><span class="k">class</span> <span class="nc">Fetch</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a> <span class="s2">&quot;direction&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a> <span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a> <span class="s2">&quot;with_ties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</span></a> <span class="p">}</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><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a><span class="k">class</span> <span class="nc">Group</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="s2">&quot;grouping_sets&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <span class="p">}</span>
+</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</span></a>
</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a>
-</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
-</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
+</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</span></a><span class="k">class</span> <span class="nc">Lambda</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</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;expressions&quot;</span><span class="p">:</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><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="k">return</span> <span class="n">join</span>
-</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a>
-</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">class</span> <span class="nc">Lateral</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</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;view&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;outer&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-1495"><a href="#L-1495"><span class="linenos">1495</span></a><span class="k">class</span> <span class="nc">MatchRecognize</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1498"><a href="#L-1498"><span class="linenos">1498</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="s2">&quot;measures&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a> <span class="s2">&quot;pattern&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="s2">&quot;define&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <span class="p">}</span>
-</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a>
+</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a>
+</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</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-1490"><a href="#L-1490"><span class="linenos">1490</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-1491"><a href="#L-1491"><span class="linenos">1491</span></a>
+</span><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</span></a>
+</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</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>
+</span><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</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;is_string&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1495"><a href="#L-1495"><span class="linenos">1495</span></a>
+</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</span></a> <span class="nd">@property</span>
+</span><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
+</span><span id="L-1498"><a href="#L-1498"><span class="linenos">1498</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_string&quot;</span><span class="p">))</span>
+</span><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</span></a>
+</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
+</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1503"><a href="#L-1503"><span class="linenos">1503</span></a>
+</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
+</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</span></a>
-</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a><span class="c1"># Clickhouse FROM FINAL modifier</span>
-</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/from/#final-modifier</span>
-</span><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a><span class="k">class</span> <span class="nc">Final</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</span></a> <span class="k">pass</span>
+</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="nd">@property</span>
+</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</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><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</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><span id="L-1513"><a href="#L-1513"><span class="linenos">1513</span></a>
-</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</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-1515"><a href="#L-1515"><span class="linenos">1515</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-1516"><a href="#L-1516"><span class="linenos">1516</span></a>
-</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">class</span> <span class="nc">Order</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a>
-</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="c1"># hive specific sorts</span>
-</span><span id="L-1523"><a href="#L-1523"><span class="linenos">1523</span></a><span class="c1"># https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy</span>
-</span><span id="L-1524"><a href="#L-1524"><span class="linenos">1524</span></a><span class="k">class</span> <span class="nc">Cluster</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</span></a> <span class="k">pass</span>
-</span><span id="L-1526"><a href="#L-1526"><span class="linenos">1526</span></a>
+</span><span id="L-1513"><a href="#L-1513"><span class="linenos">1513</span></a><span class="k">class</span> <span class="nc">Join</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a> <span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1517"><a href="#L-1517"><span class="linenos">1517</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1521"><a href="#L-1521"><span class="linenos">1521</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1522"><a href="#L-1522"><span class="linenos">1522</span></a> <span class="p">}</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="nd">@property</span>
+</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</span></a> <span class="k">def</span> <span class="nf">kind</span><span class="p">(</span><span class="bp">self</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="bp">self</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 class="o">.</span><span class="n">upper</span><span class="p">()</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">class</span> <span class="nc">Distribute</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="k">pass</span>
-</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</span></a>
+</span><span id="L-1528"><a href="#L-1528"><span class="linenos">1528</span></a> <span class="nd">@property</span>
+</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="k">def</span> <span class="nf">side</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a>
-</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a><span class="k">class</span> <span class="nc">Sort</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="k">pass</span>
-</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a>
+</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <span class="nd">@property</span>
+</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="k">def</span> <span class="nf">hint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;hint&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</span></a>
-</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a><span class="k">class</span> <span class="nc">Ordered</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</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;desc&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;nulls_first&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a>
+</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="nd">@property</span>
+</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="k">def</span> <span class="nf">alias_or_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias_or_name</span>
</span><span id="L-1539"><a href="#L-1539"><span class="linenos">1539</span></a>
-</span><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</span></a><span class="k">class</span> <span class="nc">Property</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</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;value&quot;</span><span class="p">:</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><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</span></a><span class="sd"> Append to or set the ON expressions.</span>
</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</span></a>
-</span><span id="L-1544"><a href="#L-1544"><span class="linenos">1544</span></a><span class="k">class</span> <span class="nc">AfterJournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1545"><a href="#L-1545"><span class="linenos">1545</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1546"><a href="#L-1546"><span class="linenos">1546</span></a>
-</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</span></a>
-</span><span id="L-1548"><a href="#L-1548"><span class="linenos">1548</span></a><span class="k">class</span> <span class="nc">AlgorithmProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</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><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</span></a>
-</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="k">class</span> <span class="nc">AutoIncrementProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</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><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a>
-</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="k">class</span> <span class="nc">BlockCompressionProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;autotemp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;manual&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;never&quot;</span><span class="p">:</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="sd"> Example:</span>
+</span><span id="L-1545"><a href="#L-1545"><span class="linenos">1545</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-1546"><a href="#L-1546"><span class="linenos">1546</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).on(&quot;y = 1&quot;).sql()</span>
+</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
+</span><span id="L-1548"><a href="#L-1548"><span class="linenos">1548</span></a>
+</span><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</span></a><span class="sd"> Args:</span>
+</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-1551"><a href="#L-1551"><span class="linenos">1551</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1552"><a href="#L-1552"><span class="linenos">1552</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-1555"><a href="#L-1555"><span class="linenos">1555</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="L-1556"><a href="#L-1556"><span class="linenos">1556</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
</span><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</span></a>
-</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</span></a>
-</span><span id="L-1560"><a href="#L-1560"><span class="linenos">1560</span></a><span class="k">class</span> <span class="nc">CharacterSetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1561"><a href="#L-1561"><span class="linenos">1561</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;default&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><span id="L-1564"><a href="#L-1564"><span class="linenos">1564</span></a><span class="k">class</span> <span class="nc">ChecksumProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1565"><a href="#L-1565"><span class="linenos">1565</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-1568"><a href="#L-1568"><span class="linenos">1568</span></a><span class="k">class</span> <span class="nc">CollateProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</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><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a>
+</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1560"><a href="#L-1560"><span class="linenos">1560</span></a><span class="sd"> Join: the modified join expression.</span>
+</span><span id="L-1561"><a href="#L-1561"><span class="linenos">1561</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-1563"><a href="#L-1563"><span class="linenos">1563</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1564"><a href="#L-1564"><span class="linenos">1564</span></a> <span class="n">instance</span><span class="o">=</span><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">arg</span><span class="o">=</span><span class="s2">&quot;on&quot;</span><span class="p">,</span>
+</span><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1568"><a href="#L-1568"><span class="linenos">1568</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a> <span class="p">)</span>
</span><span id="L-1571"><a href="#L-1571"><span class="linenos">1571</span></a>
-</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</span></a><span class="k">class</span> <span class="nc">DataBlocksizeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
+</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
</span><span id="L-1574"><a href="#L-1574"><span class="linenos">1574</span></a>
-</span><span id="L-1575"><a href="#L-1575"><span class="linenos">1575</span></a>
-</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a><span class="k">class</span> <span class="nc">DefinerProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</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><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a>
-</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a>
-</span><span id="L-1580"><a href="#L-1580"><span class="linenos">1580</span></a><span class="k">class</span> <span class="nc">DistKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</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><span id="L-1582"><a href="#L-1582"><span class="linenos">1582</span></a>
-</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</span></a>
-</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a><span class="k">class</span> <span class="nc">DistStyleProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</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><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</span></a>
-</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="k">class</span> <span class="nc">EngineProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</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><span id="L-1590"><a href="#L-1590"><span class="linenos">1590</span></a>
-</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="k">class</span> <span class="nc">ExecuteAsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</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><span id="L-1575"><a href="#L-1575"><span class="linenos">1575</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a>
+</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a><span class="sd"> Append to or set the USING expressions.</span>
+</span><span id="L-1580"><a href="#L-1580"><span class="linenos">1580</span></a>
+</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</span></a><span class="sd"> Example:</span>
+</span><span id="L-1582"><a href="#L-1582"><span class="linenos">1582</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).using(&quot;foo&quot;, &quot;bla&quot;).sql()</span>
+</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
+</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</span></a>
+</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</span></a><span class="sd"> Args:</span>
+</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-1588"><a href="#L-1588"><span class="linenos">1588</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</span></a><span class="sd"> append (bool): if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
+</span><span id="L-1590"><a href="#L-1590"><span class="linenos">1590</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="L-1592"><a href="#L-1592"><span class="linenos">1592</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a>
-</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="k">class</span> <span class="nc">ExternalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</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><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a>
-</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">class</span> <span class="nc">FallbackProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;protection&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</span></a>
-</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">class</span> <span class="nc">FileFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</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><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</span></a>
+</span><span id="L-1595"><a href="#L-1595"><span class="linenos">1595</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1596"><a href="#L-1596"><span class="linenos">1596</span></a><span class="sd"> Join: the modified join expression.</span>
+</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-1599"><a href="#L-1599"><span class="linenos">1599</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-1603"><a href="#L-1603"><span class="linenos">1603</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-1604"><a href="#L-1604"><span class="linenos">1604</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</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">class</span> <span class="nc">FreespaceProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1609"><a href="#L-1609"><span class="linenos">1609</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;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1608"><a href="#L-1608"><span class="linenos">1608</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
+</span><span id="L-1609"><a href="#L-1609"><span class="linenos">1609</span></a> <span class="n">join</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="kc">None</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><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a><span class="k">class</span> <span class="nc">InputOutputFormat</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a>
-</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="k">class</span> <span class="nc">IsolatedLoadingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="s2">&quot;concurrent&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="s2">&quot;for_all&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</span></a> <span class="s2">&quot;for_insert&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</span></a> <span class="s2">&quot;for_none&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</span></a> <span class="p">}</span>
-</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</span></a>
-</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a>
-</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a><span class="k">class</span> <span class="nc">JournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a>
+</span><span id="L-1611"><a href="#L-1611"><span class="linenos">1611</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a>
+</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a>
+</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a><span class="k">class</span> <span class="nc">Lateral</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="L-1615"><a href="#L-1615"><span class="linenos">1615</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;view&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;outer&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1616"><a href="#L-1616"><span class="linenos">1616</span></a>
+</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="k">class</span> <span class="nc">MatchRecognize</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</span></a> <span class="s2">&quot;measures&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="s2">&quot;pattern&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a> <span class="s2">&quot;define&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a> <span class="p">}</span>
</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a>
-</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a><span class="k">class</span> <span class="nc">LanguageProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1631"><a href="#L-1631"><span class="linenos">1631</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><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><span id="L-1634"><a href="#L-1634"><span class="linenos">1634</span></a><span class="k">class</span> <span class="nc">LikeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a>
+</span><span id="L-1631"><a href="#L-1631"><span class="linenos">1631</span></a><span class="c1"># Clickhouse FROM FINAL modifier</span>
+</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/statements/select/from/#final-modifier</span>
+</span><span id="L-1633"><a href="#L-1633"><span class="linenos">1633</span></a><span class="k">class</span> <span class="nc">Final</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1634"><a href="#L-1634"><span class="linenos">1634</span></a> <span class="k">pass</span>
+</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</span></a>
</span><span id="L-1636"><a href="#L-1636"><span class="linenos">1636</span></a>
-</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">class</span> <span class="nc">LocationProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</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><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</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-1638"><a href="#L-1638"><span class="linenos">1638</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-1639"><a href="#L-1639"><span class="linenos">1639</span></a>
</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</span></a>
-</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">class</span> <span class="nc">LockingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</span></a> <span class="s2">&quot;for_or_in&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="s2">&quot;lock_type&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <span class="s2">&quot;override&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</span></a> <span class="p">}</span>
+</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</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>
+</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a>
+</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a>
+</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</span></a><span class="c1"># hive specific sorts</span>
+</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</span></a><span class="c1"># https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy</span>
+</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a><span class="k">class</span> <span class="nc">Cluster</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <span class="k">pass</span>
+</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</span></a>
</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a>
-</span><span id="L-1651"><a href="#L-1651"><span class="linenos">1651</span></a>
-</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</span></a><span class="k">class</span> <span class="nc">LogProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1651"><a href="#L-1651"><span class="linenos">1651</span></a><span class="k">class</span> <span class="nc">Distribute</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</span></a> <span class="k">pass</span>
+</span><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</span></a>
</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a>
-</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</span></a>
-</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</span></a><span class="k">class</span> <span class="nc">MaterializedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1657"><a href="#L-1657"><span class="linenos">1657</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><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</span></a><span class="k">class</span> <span class="nc">Sort</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</span></a> <span class="k">pass</span>
+</span><span id="L-1657"><a href="#L-1657"><span class="linenos">1657</span></a>
</span><span id="L-1658"><a href="#L-1658"><span class="linenos">1658</span></a>
-</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a>
-</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</span></a><span class="k">class</span> <span class="nc">MergeBlockRatioProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</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;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a><span class="k">class</span> <span class="nc">Ordered</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</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;desc&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;nulls_first&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a>
</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</span></a>
-</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</span></a>
-</span><span id="L-1664"><a href="#L-1664"><span class="linenos">1664</span></a><span class="k">class</span> <span class="nc">NoPrimaryIndexProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1665"><a href="#L-1665"><span class="linenos">1665</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><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</span></a><span class="k">class</span> <span class="nc">Property</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1664"><a href="#L-1664"><span class="linenos">1664</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;value&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a>
-</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</span></a><span class="k">class</span> <span class="nc">OnCommitProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1669"><a href="#L-1669"><span class="linenos">1669</span></a> <span class="n">arg_type</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><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a><span class="k">class</span> <span class="nc">AfterJournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><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">class</span> <span class="nc">PartitionedByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</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><span id="L-1671"><a href="#L-1671"><span class="linenos">1671</span></a><span class="k">class</span> <span class="nc">AlgorithmProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</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><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><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">class</span> <span class="nc">ReturnsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</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;is_table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1675"><a href="#L-1675"><span class="linenos">1675</span></a><span class="k">class</span> <span class="nc">AutoIncrementProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1676"><a href="#L-1676"><span class="linenos">1676</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><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</span></a>
</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><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a><span class="k">class</span> <span class="nc">RowFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</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><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</span></a><span class="k">class</span> <span class="nc">BlockCompressionProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;autotemp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;manual&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;never&quot;</span><span class="p">:</span> <span class="kc">True</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><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="k">class</span> <span class="nc">RowFormatDelimitedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</span>
-</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="s2">&quot;fields&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="s2">&quot;escaped&quot;</span><span class="p">:</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="s2">&quot;collection_items&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a> <span class="s2">&quot;map_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="s2">&quot;lines&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <span class="s2">&quot;null&quot;</span><span class="p">:</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="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1694"><a href="#L-1694"><span class="linenos">1694</span></a> <span class="p">}</span>
-</span><span id="L-1695"><a href="#L-1695"><span class="linenos">1695</span></a>
-</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</span></a>
-</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a><span class="k">class</span> <span class="nc">RowFormatSerdeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</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><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a>
-</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</span></a>
-</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a><span class="k">class</span> <span class="nc">SchemaCommentProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1702"><a href="#L-1702"><span class="linenos">1702</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><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</span></a>
-</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</span></a>
-</span><span id="L-1705"><a href="#L-1705"><span class="linenos">1705</span></a><span class="k">class</span> <span class="nc">SerdeProperties</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1706"><a href="#L-1706"><span class="linenos">1706</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a>
-</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">class</span> <span class="nc">SetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1710"><a href="#L-1710"><span class="linenos">1710</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;multi&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</span></a><span class="k">class</span> <span class="nc">SortKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</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;compound&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</span></a><span class="k">class</span> <span class="nc">SqlSecurityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;definer&quot;</span><span class="p">:</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><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="k">class</span> <span class="nc">StabilityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</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><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><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</span></a><span class="k">class</span> <span class="nc">TableFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</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><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><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</span></a><span class="k">class</span> <span class="nc">TemporaryProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;global_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a>
-</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</span></a>
-</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</span></a><span class="k">class</span> <span class="nc">TransientProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</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><span id="L-1735"><a href="#L-1735"><span class="linenos">1735</span></a>
-</span><span id="L-1736"><a href="#L-1736"><span class="linenos">1736</span></a>
-</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</span></a><span class="k">class</span> <span class="nc">VolatileProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</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><span id="L-1739"><a href="#L-1739"><span class="linenos">1739</span></a>
-</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</span></a>
-</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</span></a><span class="k">class</span> <span class="nc">WithDataProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;statistics&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</span></a><span class="k">class</span> <span class="nc">WithJournalTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="L-1746"><a href="#L-1746"><span class="linenos">1746</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><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</span></a><span class="k">class</span> <span class="nc">CharacterSetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1684"><a href="#L-1684"><span class="linenos">1684</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;default&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a><span class="k">class</span> <span class="nc">ChecksumProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</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><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="k">class</span> <span class="nc">CollateProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</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><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</span></a>
+</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">class</span> <span class="nc">DataBlocksizeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a><span class="k">class</span> <span class="nc">DefinerProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</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><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><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</span></a><span class="k">class</span> <span class="nc">DistKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</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><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><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a><span class="k">class</span> <span class="nc">DistStyleProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</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><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><span id="L-1711"><a href="#L-1711"><span class="linenos">1711</span></a><span class="k">class</span> <span class="nc">EngineProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</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><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</span></a>
+</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</span></a>
+</span><span id="L-1715"><a href="#L-1715"><span class="linenos">1715</span></a><span class="k">class</span> <span class="nc">ExecuteAsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</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><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</span></a>
+</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</span></a>
+</span><span id="L-1719"><a href="#L-1719"><span class="linenos">1719</span></a><span class="k">class</span> <span class="nc">ExternalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1720"><a href="#L-1720"><span class="linenos">1720</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><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a>
+</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</span></a>
+</span><span id="L-1723"><a href="#L-1723"><span class="linenos">1723</span></a><span class="k">class</span> <span class="nc">FallbackProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;protection&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</span></a>
+</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</span></a>
+</span><span id="L-1727"><a href="#L-1727"><span class="linenos">1727</span></a><span class="k">class</span> <span class="nc">FileFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1728"><a href="#L-1728"><span class="linenos">1728</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><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</span></a>
+</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="k">class</span> <span class="nc">FreespaceProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</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;percent&quot;</span><span class="p">:</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><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="k">class</span> <span class="nc">InputOutputFormat</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1736"><a href="#L-1736"><span class="linenos">1736</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</span></a>
+</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">class</span> <span class="nc">IsolatedLoadingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</span></a> <span class="s2">&quot;concurrent&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1743"><a href="#L-1743"><span class="linenos">1743</span></a> <span class="s2">&quot;for_all&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1744"><a href="#L-1744"><span class="linenos">1744</span></a> <span class="s2">&quot;for_insert&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</span></a> <span class="s2">&quot;for_none&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="p">}</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><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</span></a><span class="k">class</span> <span class="nc">Properties</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</span></a><span class="k">class</span> <span class="nc">JournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1753"><a href="#L-1753"><span class="linenos">1753</span></a> <span class="s2">&quot;ALGORITHM&quot;</span><span class="p">:</span> <span class="n">AlgorithmProperty</span><span class="p">,</span>
-</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">AutoIncrementProperty</span><span class="p">,</span>
-</span><span id="L-1755"><a href="#L-1755"><span class="linenos">1755</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">CharacterSetProperty</span><span class="p">,</span>
-</span><span id="L-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">CollateProperty</span><span class="p">,</span>
-</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">SchemaCommentProperty</span><span class="p">,</span>
-</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</span></a> <span class="s2">&quot;DEFINER&quot;</span><span class="p">:</span> <span class="n">DefinerProperty</span><span class="p">,</span>
-</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="n">DistKeyProperty</span><span class="p">,</span>
-</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="n">DistStyleProperty</span><span class="p">,</span>
-</span><span id="L-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">EngineProperty</span><span class="p">,</span>
-</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="s2">&quot;EXECUTE AS&quot;</span><span class="p">:</span> <span class="n">ExecuteAsProperty</span><span class="p">,</span>
-</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">FileFormatProperty</span><span class="p">,</span>
-</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">:</span> <span class="n">LanguageProperty</span><span class="p">,</span>
-</span><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</span></a> <span class="s2">&quot;LOCATION&quot;</span><span class="p">:</span> <span class="n">LocationProperty</span><span class="p">,</span>
-</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">PartitionedByProperty</span><span class="p">,</span>
-</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="s2">&quot;RETURNS&quot;</span><span class="p">:</span> <span class="n">ReturnsProperty</span><span class="p">,</span>
-</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a> <span class="s2">&quot;ROW_FORMAT&quot;</span><span class="p">:</span> <span class="n">RowFormatProperty</span><span class="p">,</span>
-</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">SortKeyProperty</span><span class="p">,</span>
-</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="s2">&quot;TABLE_FORMAT&quot;</span><span class="p">:</span> <span class="n">TableFormatProperty</span><span class="p">,</span>
-</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</span></a> <span class="p">}</span>
-</span><span id="L-1772"><a href="#L-1772"><span class="linenos">1772</span></a>
-</span><span id="L-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="n">PROPERTY_TO_NAME</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">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-1752"><a href="#L-1752"><span class="linenos">1752</span></a>
+</span><span id="L-1753"><a href="#L-1753"><span class="linenos">1753</span></a><span class="k">class</span> <span class="nc">LanguageProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</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><span id="L-1755"><a href="#L-1755"><span class="linenos">1755</span></a>
+</span><span id="L-1756"><a href="#L-1756"><span class="linenos">1756</span></a>
+</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</span></a><span class="k">class</span> <span class="nc">LikeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a>
+</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a>
+</span><span id="L-1761"><a href="#L-1761"><span class="linenos">1761</span></a><span class="k">class</span> <span class="nc">LocationProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</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><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><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</span></a><span class="k">class</span> <span class="nc">LockingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="s2">&quot;for_or_in&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="s2">&quot;lock_type&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</span></a> <span class="s2">&quot;override&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a>
-</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="c1"># CREATE property locations</span>
-</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="c1"># Form: schema specified</span>
-</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="L-1778"><a href="#L-1778"><span class="linenos">1778</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
-</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="c1"># with ([POST_WITH])</span>
-</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
-</span><span id="L-1782"><a href="#L-1782"><span class="linenos">1782</span></a> <span class="c1">#</span>
-</span><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a> <span class="c1"># Form: alias selection</span>
-</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
-</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
-</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</span></a> <span class="k">class</span> <span class="nc">Location</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
-</span><span id="L-1789"><a href="#L-1789"><span class="linenos">1789</span></a> <span class="n">POST_CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="n">POST_NAME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="n">POST_SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a> <span class="n">POST_WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</span></a> <span class="n">POST_ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-1794"><a href="#L-1794"><span class="linenos">1794</span></a> <span class="n">POST_EXPRESSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</span></a> <span class="n">POST_INDEX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a><span class="k">class</span> <span class="nc">LogProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a><span class="k">class</span> <span class="nc">MaterializedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</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><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><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a><span class="k">class</span> <span class="nc">MergeBlockRatioProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</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;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a>
+</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</span></a>
+</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</span></a><span class="k">class</span> <span class="nc">NoPrimaryIndexProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</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><span id="L-1789"><a href="#L-1789"><span class="linenos">1789</span></a>
+</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a>
+</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a><span class="k">class</span> <span class="nc">OnCommitProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a> <span class="n">arg_type</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><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</span></a>
+</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">class</span> <span class="nc">PartitionedByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</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><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="nd">@classmethod</span>
-</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">properties_dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
-</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</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">properties_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
-</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">property_cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
-</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Property</span><span class="p">(</span><span class="n">this</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">key</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</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="k">return</span> <span class="bp">cls</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-1809"><a href="#L-1809"><span class="linenos">1809</span></a>
-</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a>
-</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a><span class="k">class</span> <span class="nc">Qualify</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="k">pass</span>
-</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a>
-</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a>
-</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</span></a><span class="c1"># https://www.ibm.com/docs/en/ias?topic=procedures-return-statement-in-sql</span>
-</span><span id="L-1816"><a href="#L-1816"><span class="linenos">1816</span></a><span class="k">class</span> <span class="nc">Return</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</span></a> <span class="k">pass</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">class</span> <span class="nc">ReturnsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1800"><a href="#L-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">True</span><span class="p">,</span> <span class="s2">&quot;is_table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</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><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</span></a><span class="k">class</span> <span class="nc">RowFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</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><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a>
+</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</span></a>
+</span><span id="L-1807"><a href="#L-1807"><span class="linenos">1807</span></a><span class="k">class</span> <span class="nc">RowFormatDelimitedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</span>
+</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="s2">&quot;fields&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a> <span class="s2">&quot;escaped&quot;</span><span class="p">:</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="s2">&quot;collection_items&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="s2">&quot;map_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="s2">&quot;lines&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</span></a> <span class="s2">&quot;null&quot;</span><span class="p">:</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="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</span></a> <span class="p">}</span>
</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a>
</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">class</span> <span class="nc">Reference</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1820"><a href="#L-1820"><span class="linenos">1820</span></a><span class="k">class</span> <span class="nc">RowFormatSerdeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</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><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a>
</span><span id="L-1823"><a href="#L-1823"><span class="linenos">1823</span></a>
-</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</span></a><span class="k">class</span> <span class="nc">Tuple</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="n">arg_types</span> <span class="o">=</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-1824"><a href="#L-1824"><span class="linenos">1824</span></a><span class="k">class</span> <span class="nc">SchemaCommentProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</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><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</span></a>
</span><span id="L-1827"><a href="#L-1827"><span class="linenos">1827</span></a>
-</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</span></a><span class="k">class</span> <span class="nc">Subqueryable</span><span class="p">(</span><span class="n">Unionable</span><span class="p">):</span>
-</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a> <span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
-</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</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="sd"> Example:</span>
-</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
-</span><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
-</span><span id="L-1836"><a href="#L-1836"><span class="linenos">1836</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
-</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a>
-</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a><span class="sd"> Args:</span>
-</span><span id="L-1839"><a href="#L-1839"><span class="linenos">1839</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
-</span><span id="L-1840"><a href="#L-1840"><span class="linenos">1840</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</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="sd"> Returns:</span>
-</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</span></a><span class="sd"> Alias: the subquery</span>
-</span><span id="L-1844"><a href="#L-1844"><span class="linenos">1844</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a> <span class="k">return</span> <span class="n">Subquery</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="n">instance</span><span class="p">,</span>
-</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</span></a> <span class="p">)</span>
+</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</span></a><span class="k">class</span> <span class="nc">SerdeProperties</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a>
+</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a>
+</span><span id="L-1832"><a href="#L-1832"><span class="linenos">1832</span></a><span class="k">class</span> <span class="nc">SetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1833"><a href="#L-1833"><span class="linenos">1833</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;multi&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a>
+</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="k">class</span> <span class="nc">SortKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</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;compound&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a>
+</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="k">class</span> <span class="nc">SqlSecurityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1841"><a href="#L-1841"><span class="linenos">1841</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;definer&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1842"><a href="#L-1842"><span class="linenos">1842</span></a>
+</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</span></a>
+</span><span id="L-1844"><a href="#L-1844"><span class="linenos">1844</span></a><span class="k">class</span> <span class="nc">StabilityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</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><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a>
+</span><span id="L-1847"><a href="#L-1847"><span class="linenos">1847</span></a>
+</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</span></a><span class="k">class</span> <span class="nc">TableFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</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><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">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</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="nd">@property</span>
-</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</span></a> <span class="k">def</span> <span class="nf">ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="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&quot;</span><span class="p">)</span>
-</span><span id="L-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="k">return</span> <span class="n">with_</span><span class="o">.</span><span class="n">expressions</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="nd">@property</span>
-</span><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1863"><a href="#L-1863"><span class="linenos">1863</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `selects`&quot;</span><span class="p">)</span>
-</span><span id="L-1864"><a href="#L-1864"><span class="linenos">1864</span></a>
-</span><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</span></a> <span class="nd">@property</span>
-</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `named_selects`&quot;</span><span class="p">)</span>
-</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</span></a>
-</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="L-1870"><a href="#L-1870"><span class="linenos">1870</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1871"><a href="#L-1871"><span class="linenos">1871</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="L-1872"><a href="#L-1872"><span class="linenos">1872</span></a> <span class="n">as_</span><span class="p">,</span>
-</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</span></a> <span class="n">recursive</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</span></a> <span class="p">):</span>
-</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a>
-</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a><span class="sd"> Example:</span>
-</span><span id="L-1883"><a href="#L-1883"><span class="linenos">1883</span></a><span class="sd"> &gt;&gt;&gt; Select().with_(&quot;tbl2&quot;, as_=&quot;SELECT * FROM tbl&quot;).select(&quot;x&quot;).from_(&quot;tbl2&quot;).sql()</span>
-</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</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="sd"> Args:</span>
-</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</span></a><span class="sd"> alias (str | Expression): the SQL code string to parse as the table name.</span>
-</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</span></a><span class="sd"> as_ (str | Expression): the SQL code string to parse as the table expression.</span>
-</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-1891"><a href="#L-1891"><span class="linenos">1891</span></a><span class="sd"> recursive (bool): set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-1895"><a href="#L-1895"><span class="linenos">1895</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-1896"><a href="#L-1896"><span class="linenos">1896</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a>
+</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a><span class="k">class</span> <span class="nc">TemporaryProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1853"><a href="#L-1853"><span class="linenos">1853</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;global_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1854"><a href="#L-1854"><span class="linenos">1854</span></a>
+</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</span></a>
+</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</span></a><span class="k">class</span> <span class="nc">TransientProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1857"><a href="#L-1857"><span class="linenos">1857</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><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a>
+</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a>
+</span><span id="L-1860"><a href="#L-1860"><span class="linenos">1860</span></a><span class="k">class</span> <span class="nc">VolatileProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</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><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a>
+</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">class</span> <span class="nc">WithDataProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;statistics&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a>
+</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</span></a>
+</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</span></a><span class="k">class</span> <span class="nc">WithJournalTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</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><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><span id="L-1872"><a href="#L-1872"><span class="linenos">1872</span></a><span class="k">class</span> <span class="nc">Properties</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a>
+</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="s2">&quot;ALGORITHM&quot;</span><span class="p">:</span> <span class="n">AlgorithmProperty</span><span class="p">,</span>
+</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">AutoIncrementProperty</span><span class="p">,</span>
+</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">CharacterSetProperty</span><span class="p">,</span>
+</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">CollateProperty</span><span class="p">,</span>
+</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">SchemaCommentProperty</span><span class="p">,</span>
+</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="s2">&quot;DEFINER&quot;</span><span class="p">:</span> <span class="n">DefinerProperty</span><span class="p">,</span>
+</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="n">DistKeyProperty</span><span class="p">,</span>
+</span><span id="L-1883"><a href="#L-1883"><span class="linenos">1883</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="n">DistStyleProperty</span><span class="p">,</span>
+</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">EngineProperty</span><span class="p">,</span>
+</span><span id="L-1885"><a href="#L-1885"><span class="linenos">1885</span></a> <span class="s2">&quot;EXECUTE AS&quot;</span><span class="p">:</span> <span class="n">ExecuteAsProperty</span><span class="p">,</span>
+</span><span id="L-1886"><a href="#L-1886"><span class="linenos">1886</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">FileFormatProperty</span><span class="p">,</span>
+</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</span></a> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">:</span> <span class="n">LanguageProperty</span><span class="p">,</span>
+</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="s2">&quot;LOCATION&quot;</span><span class="p">:</span> <span class="n">LocationProperty</span><span class="p">,</span>
+</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">PartitionedByProperty</span><span class="p">,</span>
+</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</span></a> <span class="s2">&quot;RETURNS&quot;</span><span class="p">:</span> <span class="n">ReturnsProperty</span><span class="p">,</span>
+</span><span id="L-1891"><a href="#L-1891"><span class="linenos">1891</span></a> <span class="s2">&quot;ROW_FORMAT&quot;</span><span class="p">:</span> <span class="n">RowFormatProperty</span><span class="p">,</span>
+</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">SortKeyProperty</span><span class="p">,</span>
+</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a> <span class="s2">&quot;TABLE_FORMAT&quot;</span><span class="p">:</span> <span class="n">TableFormatProperty</span><span class="p">,</span>
+</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</span></a> <span class="p">}</span>
+</span><span id="L-1895"><a href="#L-1895"><span class="linenos">1895</span></a>
+</span><span id="L-1896"><a href="#L-1896"><span class="linenos">1896</span></a> <span class="n">PROPERTY_TO_NAME</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">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">items</span><span class="p">()}</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="sd"> Returns:</span>
-</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-1902"><a href="#L-1902"><span class="linenos">1902</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="L-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="n">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span>
-</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="p">)</span>
-</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="n">as_</span><span class="p">,</span>
-</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="p">)</span>
-</span><span id="L-1912"><a href="#L-1912"><span class="linenos">1912</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span>
-</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span>
-</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</span><span class="p">,</span>
-</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="p">)</span>
-</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="n">cte</span><span class="p">,</span>
-</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;with&quot;</span><span class="p">,</span>
-</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
-</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</span></a> <span class="n">properties</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="n">recursive</span> <span class="ow">or</span> <span class="kc">False</span><span class="p">},</span>
-</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</span></a> <span class="p">)</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><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</span></a><span class="n">QUERY_MODIFIERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</span></a> <span class="s2">&quot;match&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</span></a> <span class="s2">&quot;joins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="s2">&quot;pivots&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1932"><a href="#L-1932"><span class="linenos">1932</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1933"><a href="#L-1933"><span class="linenos">1933</span></a> <span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="s2">&quot;having&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a> <span class="s2">&quot;windows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="s2">&quot;distribute&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</span></a> <span class="s2">&quot;sort&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</span></a> <span class="s2">&quot;lock&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</span></a> <span class="s2">&quot;sample&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1945"><a href="#L-1945"><span class="linenos">1945</span></a><span class="p">}</span>
+</span><span id="L-1898"><a href="#L-1898"><span class="linenos">1898</span></a> <span class="c1"># CREATE property locations</span>
+</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="c1"># Form: schema specified</span>
+</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="L-1902"><a href="#L-1902"><span class="linenos">1902</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
+</span><span id="L-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="c1"># with ([POST_WITH])</span>
+</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
+</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a> <span class="c1">#</span>
+</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="c1"># Form: alias selection</span>
+</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="L-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
+</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
+</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="k">class</span> <span class="nc">Location</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
+</span><span id="L-1912"><a href="#L-1912"><span class="linenos">1912</span></a> <span class="n">POST_CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="n">POST_NAME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</span></a> <span class="n">POST_SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="n">POST_WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="n">POST_ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="n">POST_EXPRESSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a> <span class="n">POST_INDEX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a>
+</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">properties_dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
+</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</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">properties_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
+</span><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">property_cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Property</span><span class="p">(</span><span class="n">this</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">key</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</span></a>
+</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="k">return</span> <span class="bp">cls</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-1932"><a href="#L-1932"><span class="linenos">1932</span></a>
+</span><span id="L-1933"><a href="#L-1933"><span class="linenos">1933</span></a>
+</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</span></a><span class="k">class</span> <span class="nc">Qualify</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="k">pass</span>
+</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a>
+</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</span></a>
+</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</span></a><span class="c1"># https://www.ibm.com/docs/en/ias?topic=procedures-return-statement-in-sql</span>
+</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a><span class="k">class</span> <span class="nc">Return</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="k">pass</span>
+</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</span></a>
+</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</span></a>
+</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</span></a><span class="k">class</span> <span class="nc">Reference</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><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">class</span> <span class="nc">Table</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-1949"><a href="#L-1949"><span class="linenos">1949</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1951"><a href="#L-1951"><span class="linenos">1951</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1953"><a href="#L-1953"><span class="linenos">1953</span></a> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1954"><a href="#L-1954"><span class="linenos">1954</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a> <span class="s2">&quot;joins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</span></a> <span class="s2">&quot;pivots&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1957"><a href="#L-1957"><span class="linenos">1957</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1958"><a href="#L-1958"><span class="linenos">1958</span></a> <span class="s2">&quot;system_time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1959"><a href="#L-1959"><span class="linenos">1959</span></a> <span class="p">}</span>
+</span><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</span></a><span class="k">class</span> <span class="nc">Tuple</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-1948"><a href="#L-1948"><span class="linenos">1948</span></a> <span class="n">arg_types</span> <span class="o">=</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-1949"><a href="#L-1949"><span class="linenos">1949</span></a>
+</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">class</span> <span class="nc">Subqueryable</span><span class="p">(</span><span class="n">Unionable</span><span class="p">):</span>
+</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</span></a> <span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
+</span><span id="L-1953"><a href="#L-1953"><span class="linenos">1953</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1954"><a href="#L-1954"><span class="linenos">1954</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
+</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a>
+</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</span></a><span class="sd"> Example:</span>
+</span><span id="L-1957"><a href="#L-1957"><span class="linenos">1957</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
+</span><span id="L-1958"><a href="#L-1958"><span class="linenos">1958</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
+</span><span id="L-1959"><a href="#L-1959"><span class="linenos">1959</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</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="nd">@property</span>
-</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</span></a> <span class="k">def</span> <span class="nf">db</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-1963"><a href="#L-1963"><span class="linenos">1963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</span></a><span class="sd"> Args:</span>
+</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
+</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
</span><span id="L-1964"><a href="#L-1964"><span class="linenos">1964</span></a>
-</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a> <span class="nd">@property</span>
-</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</span></a> <span class="k">def</span> <span class="nf">catalog</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-1967"><a href="#L-1967"><span class="linenos">1967</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&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><span id="L-1970"><a href="#L-1970"><span class="linenos">1970</span></a><span class="c1"># See the TSQL &quot;Querying data in a system-versioned temporal table&quot; page</span>
-</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</span></a><span class="k">class</span> <span class="nc">SystemTime</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><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</span></a> <span class="p">}</span>
-</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</span></a>
-</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</span></a>
-</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a><span class="k">class</span> <span class="nc">Union</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</span></a> <span class="p">}</span>
+</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a><span class="sd"> Returns:</span>
+</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</span></a><span class="sd"> Alias: the subquery</span>
+</span><span id="L-1967"><a href="#L-1967"><span class="linenos">1967</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-1969"><a href="#L-1969"><span class="linenos">1969</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span>
+</span><span id="L-1970"><a href="#L-1970"><span class="linenos">1970</span></a> <span class="n">this</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</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><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="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</span></a>
+</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</span></a> <span class="nd">@property</span>
+</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</span></a> <span class="k">def</span> <span class="nf">ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="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&quot;</span><span class="p">)</span>
+</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</span></a> <span class="k">return</span> <span class="n">with_</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</span></a>
+</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="nd">@property</span>
+</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `selects`&quot;</span><span class="p">)</span>
</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</span></a>
-</span><span id="L-1988"><a href="#L-1988"><span class="linenos">1988</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-1989"><a href="#L-1989"><span class="linenos">1989</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1990"><a href="#L-1990"><span class="linenos">1990</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="L-1988"><a href="#L-1988"><span class="linenos">1988</span></a> <span class="nd">@property</span>
+</span><span id="L-1989"><a href="#L-1989"><span class="linenos">1989</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-1990"><a href="#L-1990"><span class="linenos">1990</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `named_selects`&quot;</span><span class="p">)</span>
</span><span id="L-1991"><a href="#L-1991"><span class="linenos">1991</span></a>
-</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</span></a><span class="sd"> Example:</span>
-</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;1&quot;).union(select(&quot;1&quot;)).limit(1).sql()</span>
-</span><span id="L-1994"><a href="#L-1994"><span class="linenos">1994</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
-</span><span id="L-1995"><a href="#L-1995"><span class="linenos">1995</span></a>
-</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</span></a><span class="sd"> Args:</span>
-</span><span id="L-1997"><a href="#L-1997"><span class="linenos">1997</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="L-1998"><a href="#L-1998"><span class="linenos">1998</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</span></a> <span class="k">def</span> <span class="nf">with_</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="p">,</span>
+</span><span id="L-1994"><a href="#L-1994"><span class="linenos">1994</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="L-1995"><a href="#L-1995"><span class="linenos">1995</span></a> <span class="n">as_</span><span class="p">,</span>
+</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</span></a> <span class="n">recursive</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1997"><a href="#L-1997"><span class="linenos">1997</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-1998"><a href="#L-1998"><span class="linenos">1998</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</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="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a><span class="sd"> Append to or set the common table expressions.</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="sd"> Returns:</span>
-</span><span id="L-2006"><a href="#L-2006"><span class="linenos">2006</span></a><span class="sd"> Select: The limited subqueryable.</span>
-</span><span id="L-2007"><a href="#L-2007"><span class="linenos">2007</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2009"><a href="#L-2009"><span class="linenos">2009</span></a> <span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
-</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_l_0&quot;</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-2011"><a href="#L-2011"><span class="linenos">2011</span></a> <span class="o">.</span><span class="n">limit</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="n">dialect</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><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</span></a> <span class="p">)</span>
-</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</span></a>
-</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2016"><a href="#L-2016"><span class="linenos">2016</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-2017"><a href="#L-2017"><span class="linenos">2017</span></a> <span class="n">append</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-2018"><a href="#L-2018"><span class="linenos">2018</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-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <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><span id="L-2020"><a href="#L-2020"><span class="linenos">2020</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
-</span><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Append to or set the SELECT of the union recursively.</span>
-</span><span id="L-2023"><a href="#L-2023"><span class="linenos">2023</span></a>
-</span><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</span></a><span class="sd"> Example:</span>
-</span><span id="L-2025"><a href="#L-2025"><span class="linenos">2025</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</span></a><span class="sd"> &gt;&gt;&gt; parse_one(&quot;select a from x union select a from y union select a from z&quot;).select(&quot;b&quot;).sql()</span>
-</span><span id="L-2027"><a href="#L-2027"><span class="linenos">2027</span></a><span class="sd"> &#39;SELECT a, b FROM x UNION SELECT a, b FROM y UNION SELECT a, b FROM z&#39;</span>
-</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a>
-</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a><span class="sd"> Args:</span>
-</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2031"><a href="#L-2031"><span class="linenos">2031</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2033"><a href="#L-2033"><span class="linenos">2033</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-2035"><a href="#L-2035"><span class="linenos">2035</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a>
-</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a><span class="sd"> Union: the modified expression.</span>
-</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span>
-</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a> <span class="n">this</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a> <span class="n">this</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
-</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="p">)</span>
-</span><span id="L-2046"><a href="#L-2046"><span class="linenos">2046</span></a> <span class="k">return</span> <span class="n">this</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="nd">@property</span>
-</span><span id="L-2049"><a href="#L-2049"><span class="linenos">2049</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">named_selects</span>
-</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a>
-</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="nd">@property</span>
-</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="k">def</span> <span class="nf">is_star</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-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</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="nd">@property</span>
-</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">selects</span>
-</span><span id="L-2059"><a href="#L-2059"><span class="linenos">2059</span></a>
-</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</span></a> <span class="nd">@property</span>
-</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-2063"><a href="#L-2063"><span class="linenos">2063</span></a>
-</span><span id="L-2064"><a href="#L-2064"><span class="linenos">2064</span></a> <span class="nd">@property</span>
-</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
-</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a>
-</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</span></a>
-</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</span></a><span class="k">class</span> <span class="nc">Except</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
-</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</span></a> <span class="k">pass</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><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</span></a><span class="k">class</span> <span class="nc">Intersect</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
-</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</span></a> <span class="k">pass</span>
-</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</span></a>
-</span><span id="L-2076"><a href="#L-2076"><span class="linenos">2076</span></a>
-</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</span></a><span class="k">class</span> <span class="nc">Unnest</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2080"><a href="#L-2080"><span class="linenos">2080</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</span></a>
-</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</span></a><span class="k">class</span> <span class="nc">Update</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2093"><a href="#L-2093"><span class="linenos">2093</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</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><span id="L-2096"><a href="#L-2096"><span class="linenos">2096</span></a>
-</span><span id="L-2097"><a href="#L-2097"><span class="linenos">2097</span></a><span class="k">class</span> <span class="nc">Values</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="L-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2100"><a href="#L-2100"><span class="linenos">2100</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2101"><a href="#L-2101"><span class="linenos">2101</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</span></a> <span class="p">}</span>
-</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</span></a>
-</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">class</span> <span class="nc">Var</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="k">pass</span>
-</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</span></a>
-</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</span></a>
-</span><span id="L-2109"><a href="#L-2109"><span class="linenos">2109</span></a><span class="k">class</span> <span class="nc">Schema</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2110"><a href="#L-2110"><span class="linenos">2110</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a>
-</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a>
-</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a><span class="c1"># Used to represent the FOR UPDATE and FOR SHARE locking read types.</span>
-</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html</span>
-</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</span></a><span class="k">class</span> <span class="nc">Lock</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;update&quot;</span><span class="p">:</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><span id="L-2005"><a href="#L-2005"><span class="linenos">2005</span></a><span class="sd"> Example:</span>
+</span><span id="L-2006"><a href="#L-2006"><span class="linenos">2006</span></a><span class="sd"> &gt;&gt;&gt; Select().with_(&quot;tbl2&quot;, as_=&quot;SELECT * FROM tbl&quot;).select(&quot;x&quot;).from_(&quot;tbl2&quot;).sql()</span>
+</span><span id="L-2007"><a href="#L-2007"><span class="linenos">2007</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
+</span><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</span></a>
+</span><span id="L-2009"><a href="#L-2009"><span class="linenos">2009</span></a><span class="sd"> Args:</span>
+</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</span></a><span class="sd"> alias (str | Expression): the SQL code string to parse as the table name.</span>
+</span><span id="L-2011"><a href="#L-2011"><span class="linenos">2011</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</span></a><span class="sd"> as_ (str | Expression): the SQL code string to parse as the table expression.</span>
+</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</span></a><span class="sd"> recursive (bool): set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2016"><a href="#L-2016"><span class="linenos">2016</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2017"><a href="#L-2017"><span class="linenos">2017</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2018"><a href="#L-2018"><span class="linenos">2018</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2020"><a href="#L-2020"><span class="linenos">2020</span></a>
+</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2023"><a href="#L-2023"><span class="linenos">2023</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-2025"><a href="#L-2025"><span class="linenos">2025</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2027"><a href="#L-2027"><span class="linenos">2027</span></a> <span class="n">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span>
+</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a> <span class="p">)</span>
+</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-2031"><a href="#L-2031"><span class="linenos">2031</span></a> <span class="n">as_</span><span class="p">,</span>
+</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2033"><a href="#L-2033"><span class="linenos">2033</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</span></a> <span class="p">)</span>
+</span><span id="L-2035"><a href="#L-2035"><span class="linenos">2035</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span>
+</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</span></a> <span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span>
+</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</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="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a> <span class="n">cte</span><span class="p">,</span>
+</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;with&quot;</span><span class="p">,</span>
+</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
+</span><span id="L-2046"><a href="#L-2046"><span class="linenos">2046</span></a> <span class="n">properties</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="n">recursive</span> <span class="ow">or</span> <span class="kc">False</span><span class="p">},</span>
+</span><span id="L-2047"><a href="#L-2047"><span class="linenos">2047</span></a> <span class="p">)</span>
+</span><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</span></a>
+</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">QUERY_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="s2">&quot;match&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="s2">&quot;joins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="s2">&quot;pivots&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</span></a> <span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="s2">&quot;having&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <span class="s2">&quot;qualify&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2059"><a href="#L-2059"><span class="linenos">2059</span></a> <span class="s2">&quot;windows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</span></a> <span class="s2">&quot;distribute&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="s2">&quot;sort&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2063"><a href="#L-2063"><span class="linenos">2063</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2064"><a href="#L-2064"><span class="linenos">2064</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="s2">&quot;lock&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a> <span class="s2">&quot;sample&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</span></a><span class="p">}</span>
+</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</span></a>
+</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</span></a>
+</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</span></a><span class="k">class</span> <span class="nc">Table</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2076"><a href="#L-2076"><span class="linenos">2076</span></a> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</span></a> <span class="s2">&quot;joins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a> <span class="s2">&quot;pivots&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2080"><a href="#L-2080"><span class="linenos">2080</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="s2">&quot;system_time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <span class="p">}</span>
+</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</span></a>
+</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</span></a> <span class="nd">@property</span>
+</span><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="k">def</span> <span class="nf">db</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-2086"><a href="#L-2086"><span class="linenos">2086</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</span></a>
+</span><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <span class="nd">@property</span>
+</span><span id="L-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="k">def</span> <span class="nf">catalog</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-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">)</span>
+</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a>
+</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="c1"># See the TSQL &quot;Querying data in a system-versioned temporal table&quot; page</span>
+</span><span id="L-2094"><a href="#L-2094"><span class="linenos">2094</span></a><span class="k">class</span> <span class="nc">SystemTime</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2095"><a href="#L-2095"><span class="linenos">2095</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2096"><a href="#L-2096"><span class="linenos">2096</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2097"><a href="#L-2097"><span class="linenos">2097</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</span></a> <span class="p">}</span>
+</span><span id="L-2100"><a href="#L-2100"><span class="linenos">2100</span></a>
+</span><span id="L-2101"><a href="#L-2101"><span class="linenos">2101</span></a>
+</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</span></a><span class="k">class</span> <span class="nc">Union</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2104"><a href="#L-2104"><span class="linenos">2104</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="L-2109"><a href="#L-2109"><span class="linenos">2109</span></a> <span class="p">}</span>
+</span><span id="L-2110"><a href="#L-2110"><span class="linenos">2110</span></a>
+</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</span></a>
+</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</span></a><span class="sd"> Example:</span>
+</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;1&quot;).union(select(&quot;1&quot;)).limit(1).sql()</span>
+</span><span id="L-2117"><a href="#L-2117"><span class="linenos">2117</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</span></a>
-</span><span id="L-2119"><a href="#L-2119"><span class="linenos">2119</span></a><span class="k">class</span> <span class="nc">Select</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2121"><a href="#L-2121"><span class="linenos">2121</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2126"><a href="#L-2126"><span class="linenos">2126</span></a> <span class="s2">&quot;into&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="L-2129"><a href="#L-2129"><span class="linenos">2129</span></a> <span class="p">}</span>
-</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</span></a>
-</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2133"><a href="#L-2133"><span class="linenos">2133</span></a><span class="sd"> Set the FROM expression.</span>
-</span><span id="L-2134"><a href="#L-2134"><span class="linenos">2134</span></a>
-</span><span id="L-2135"><a href="#L-2135"><span class="linenos">2135</span></a><span class="sd"> Example:</span>
-</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
-</span><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</span>
-</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a>
-</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a><span class="sd"> Args:</span>
-</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2141"><a href="#L-2141"><span class="linenos">2141</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
-</span><span id="L-2142"><a href="#L-2142"><span class="linenos">2142</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
-</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</span></a><span class="sd"> Otherwise, this flattens all the `From` expression into a single expression.</span>
-</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a>
-</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2152"><a href="#L-2152"><span class="linenos">2152</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2155"><a href="#L-2155"><span class="linenos">2155</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span>
-</span><span id="L-2159"><a href="#L-2159"><span class="linenos">2159</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
-</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2161"><a href="#L-2161"><span class="linenos">2161</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</span></a> <span class="p">)</span>
-</span><span id="L-2163"><a href="#L-2163"><span class="linenos">2163</span></a>
-</span><span id="L-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2165"><a href="#L-2165"><span class="linenos">2165</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2166"><a href="#L-2166"><span class="linenos">2166</span></a><span class="sd"> Set the GROUP BY expression.</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="sd"> Example:</span>
-</span><span id="L-2169"><a href="#L-2169"><span class="linenos">2169</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;, &quot;COUNT(1)&quot;).group_by(&quot;x&quot;).sql()</span>
-</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
-</span><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</span></a>
-</span><span id="L-2172"><a href="#L-2172"><span class="linenos">2172</span></a><span class="sd"> Args:</span>
-</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
-</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</span></a><span class="sd"> If nothing is passed in then a group by is not applied to the expression</span>
-</span><span id="L-2177"><a href="#L-2177"><span class="linenos">2177</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
-</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2119"><a href="#L-2119"><span class="linenos">2119</span></a><span class="sd"> Args:</span>
+</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="L-2121"><a href="#L-2121"><span class="linenos">2121</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2126"><a href="#L-2126"><span class="linenos">2126</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</span></a>
+</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2129"><a href="#L-2129"><span class="linenos">2129</span></a><span class="sd"> Select: The limited subqueryable.</span>
+</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</span></a> <span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
+</span><span id="L-2133"><a href="#L-2133"><span class="linenos">2133</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_l_0&quot;</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-2134"><a href="#L-2134"><span class="linenos">2134</span></a> <span class="o">.</span><span class="n">limit</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="n">dialect</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><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><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="n">append</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-2141"><a href="#L-2141"><span class="linenos">2141</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-2142"><a href="#L-2142"><span class="linenos">2142</span></a> <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><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
+</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Append to or set the SELECT of the union recursively.</span>
+</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a>
+</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a><span class="sd"> Example:</span>
+</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</span></a><span class="sd"> &gt;&gt;&gt; parse_one(&quot;select a from x union select a from y union select a from z&quot;).select(&quot;b&quot;).sql()</span>
+</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a><span class="sd"> &#39;SELECT a, b FROM x UNION SELECT a, b FROM y UNION SELECT a, b FROM z&#39;</span>
+</span><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</span></a>
+</span><span id="L-2152"><a href="#L-2152"><span class="linenos">2152</span></a><span class="sd"> Args:</span>
+</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2155"><a href="#L-2155"><span class="linenos">2155</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2159"><a href="#L-2159"><span class="linenos">2159</span></a><span class="sd"> opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</span></a><span class="sd"> Union: the modified expression.</span>
+</span><span id="L-2163"><a href="#L-2163"><span class="linenos">2163</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span>
+</span><span id="L-2165"><a href="#L-2165"><span class="linenos">2165</span></a> <span class="n">this</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-2166"><a href="#L-2166"><span class="linenos">2166</span></a> <span class="n">this</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
+</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="p">)</span>
+</span><span id="L-2169"><a href="#L-2169"><span class="linenos">2169</span></a> <span class="k">return</span> <span class="n">this</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="nd">@property</span>
+</span><span id="L-2172"><a href="#L-2172"><span class="linenos">2172</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">named_selects</span>
+</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a>
+</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</span></a> <span class="nd">@property</span>
+</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</span></a> <span class="k">def</span> <span class="nf">is_star</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-2177"><a href="#L-2177"><span class="linenos">2177</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</span>
+</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a>
+</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</span></a> <span class="nd">@property</span>
+</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">selects</span>
</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a>
-</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2186"><a href="#L-2186"><span class="linenos">2186</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-2187"><a href="#L-2187"><span class="linenos">2187</span></a> <span class="k">return</span> <span class="bp">self</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-2188"><a href="#L-2188"><span class="linenos">2188</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2191"><a href="#L-2191"><span class="linenos">2191</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;group&quot;</span><span class="p">,</span>
-</span><span id="L-2192"><a href="#L-2192"><span class="linenos">2192</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span>
-</span><span id="L-2195"><a href="#L-2195"><span class="linenos">2195</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
-</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2198"><a href="#L-2198"><span class="linenos">2198</span></a> <span class="p">)</span>
+</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a> <span class="nd">@property</span>
+</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-2186"><a href="#L-2186"><span class="linenos">2186</span></a>
+</span><span id="L-2187"><a href="#L-2187"><span class="linenos">2187</span></a> <span class="nd">@property</span>
+</span><span id="L-2188"><a href="#L-2188"><span class="linenos">2188</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</span></a>
+</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">class</span> <span class="nc">Except</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
+</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="k">pass</span>
+</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a>
+</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="k">class</span> <span class="nc">Intersect</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
+</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="k">pass</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><span id="L-2200"><a href="#L-2200"><span class="linenos">2200</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a><span class="sd"> Set the ORDER BY expression.</span>
-</span><span id="L-2203"><a href="#L-2203"><span class="linenos">2203</span></a>
-</span><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</span></a><span class="sd"> Example:</span>
-</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).order_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
+</span><span id="L-2200"><a href="#L-2200"><span class="linenos">2200</span></a><span class="k">class</span> <span class="nc">Unnest</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2203"><a href="#L-2203"><span class="linenos">2203</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a> <span class="p">}</span>
</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a>
-</span><span id="L-2208"><a href="#L-2208"><span class="linenos">2208</span></a><span class="sd"> Args:</span>
-</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
-</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-2219"><a href="#L-2219"><span class="linenos">2219</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2223"><a href="#L-2223"><span class="linenos">2223</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;order&quot;</span><span class="p">,</span>
-</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ORDER BY&quot;</span><span class="p">,</span>
-</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2231"><a href="#L-2231"><span class="linenos">2231</span></a> <span class="p">)</span>
-</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</span></a>
-</span><span id="L-2233"><a href="#L-2233"><span class="linenos">2233</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2235"><a href="#L-2235"><span class="linenos">2235</span></a><span class="sd"> Set the SORT BY expression.</span>
-</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a>
-</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</span></a><span class="sd"> Example:</span>
-</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="L-2239"><a href="#L-2239"><span class="linenos">2239</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</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">class</span> <span class="nc">Update</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a><span class="k">class</span> <span class="nc">Values</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2223"><a href="#L-2223"><span class="linenos">2223</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</span></a> <span class="p">}</span>
+</span><span id="L-2226"><a href="#L-2226"><span class="linenos">2226</span></a>
+</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">class</span> <span class="nc">Var</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a> <span class="k">pass</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><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</span></a><span class="k">class</span> <span class="nc">Schema</span><span class="p">(</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">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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a><span class="c1"># Used to represent the FOR UPDATE and FOR SHARE locking read types.</span>
+</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html</span>
+</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</span></a><span class="k">class</span> <span class="nc">Lock</span><span class="p">(</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">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="kc">True</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="sd"> Args:</span>
-</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2243"><a href="#L-2243"><span class="linenos">2243</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
-</span><span id="L-2245"><a href="#L-2245"><span class="linenos">2245</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2253"><a href="#L-2253"><span class="linenos">2253</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2254"><a href="#L-2254"><span class="linenos">2254</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2255"><a href="#L-2255"><span class="linenos">2255</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2256"><a href="#L-2256"><span class="linenos">2256</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span>
-</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2260"><a href="#L-2260"><span class="linenos">2260</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span>
-</span><span id="L-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
-</span><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</span></a> <span class="p">)</span>
-</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</span></a>
-</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
-</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</span></a>
-</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a><span class="sd"> Example:</span>
-</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</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="sd"> Args:</span>
-</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="L-2277"><a href="#L-2277"><span class="linenos">2277</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
-</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-2283"><a href="#L-2283"><span class="linenos">2283</span></a>
-</span><span id="L-2284"><a href="#L-2284"><span class="linenos">2284</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2286"><a href="#L-2286"><span class="linenos">2286</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
-</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2293"><a href="#L-2293"><span class="linenos">2293</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span>
-</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
-</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a> <span class="p">)</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">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a>
-</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a><span class="sd"> Example:</span>
-</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).limit(10).sql()</span>
-</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</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="sd"> Args:</span>
-</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-2317"><a href="#L-2317"><span class="linenos">2317</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2322"><a href="#L-2322"><span class="linenos">2322</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span>
-</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
-</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">,</span>
-</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2327"><a href="#L-2327"><span class="linenos">2327</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2328"><a href="#L-2328"><span class="linenos">2328</span></a> <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">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2331"><a href="#L-2331"><span class="linenos">2331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</span></a><span class="sd"> Set the OFFSET expression.</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="sd"> Example:</span>
-</span><span id="L-2335"><a href="#L-2335"><span class="linenos">2335</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).offset(10).sql()</span>
-</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
-</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</span></a>
-</span><span id="L-2338"><a href="#L-2338"><span class="linenos">2338</span></a><span class="sd"> Args:</span>
-</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="L-2340"><a href="#L-2340"><span class="linenos">2340</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
-</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
-</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a>
-</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2348"><a href="#L-2348"><span class="linenos">2348</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span>
-</span><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
-</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span>
-</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2358"><a href="#L-2358"><span class="linenos">2358</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2359"><a href="#L-2359"><span class="linenos">2359</span></a> <span class="p">)</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">select</span><span class="p">(</span>
-</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2363"><a href="#L-2363"><span class="linenos">2363</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="n">append</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-2365"><a href="#L-2365"><span class="linenos">2365</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-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <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><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</span></a><span class="sd"> Append to or set the SELECT expressions.</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="sd"> Example:</span>
-</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
-</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a><span class="sd"> &#39;SELECT x, y&#39;</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="sd"> Args:</span>
-</span><span id="L-2377"><a href="#L-2377"><span class="linenos">2377</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="L-2380"><a href="#L-2380"><span class="linenos">2380</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2383"><a href="#L-2383"><span class="linenos">2383</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</span></a>
-</span><span id="L-2385"><a href="#L-2385"><span class="linenos">2385</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2386"><a href="#L-2386"><span class="linenos">2386</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2388"><a href="#L-2388"><span class="linenos">2388</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="L-2392"><a href="#L-2392"><span class="linenos">2392</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a> <span class="o">**</span><span class="n">opts</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">lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a><span class="sd"> Append to or set the LATERAL expressions.</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="sd"> Example:</span>
-</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).lateral(&quot;OUTER explode(y) tbl2 AS z&quot;).from_(&quot;tbl&quot;).sql()</span>
-</span><span id="L-2404"><a href="#L-2404"><span class="linenos">2404</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
-</span><span id="L-2405"><a href="#L-2405"><span class="linenos">2405</span></a>
-</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</span></a><span class="sd"> Args:</span>
-</span><span id="L-2407"><a href="#L-2407"><span class="linenos">2407</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-2410"><a href="#L-2410"><span class="linenos">2410</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="L-2412"><a href="#L-2412"><span class="linenos">2412</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a>
-</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2419"><a href="#L-2419"><span class="linenos">2419</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2421"><a href="#L-2421"><span class="linenos">2421</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
-</span><span id="L-2422"><a href="#L-2422"><span class="linenos">2422</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LATERAL VIEW&quot;</span><span class="p">,</span>
-</span><span id="L-2425"><a href="#L-2425"><span class="linenos">2425</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2426"><a href="#L-2426"><span class="linenos">2426</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</span></a> <span class="p">)</span>
+</span><span id="L-2241"><a href="#L-2241"><span class="linenos">2241</span></a>
+</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</span></a><span class="k">class</span> <span class="nc">Select</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-2243"><a href="#L-2243"><span class="linenos">2243</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2245"><a href="#L-2245"><span class="linenos">2245</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a> <span class="s2">&quot;into&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2251"><a href="#L-2251"><span class="linenos">2251</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a> <span class="p">}</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">from_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2255"><a href="#L-2255"><span class="linenos">2255</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2256"><a href="#L-2256"><span class="linenos">2256</span></a><span class="sd"> Set the FROM expression.</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="sd"> Example:</span>
+</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
+</span><span id="L-2260"><a href="#L-2260"><span class="linenos">2260</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</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="sd"> Args:</span>
+</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
+</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
+</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a><span class="sd"> Otherwise, this flattens all the `From` expression into a single expression.</span>
+</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</span></a>
+</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2274"><a href="#L-2274"><span class="linenos">2274</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2277"><a href="#L-2277"><span class="linenos">2277</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span>
+</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
+</span><span id="L-2283"><a href="#L-2283"><span class="linenos">2283</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2284"><a href="#L-2284"><span class="linenos">2284</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a> <span class="p">)</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">group_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a><span class="sd"> Set the GROUP BY expression.</span>
+</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a>
+</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</span></a><span class="sd"> Example:</span>
+</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;, &quot;COUNT(1)&quot;).group_by(&quot;x&quot;).sql()</span>
+</span><span id="L-2293"><a href="#L-2293"><span class="linenos">2293</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
+</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a>
+</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a><span class="sd"> Args:</span>
+</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
+</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</span></a><span class="sd"> If nothing is passed in then a group by is not applied to the expression</span>
+</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
+</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a>
+</span><span id="L-2306"><a href="#L-2306"><span class="linenos">2306</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</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-2310"><a href="#L-2310"><span class="linenos">2310</span></a> <span class="k">return</span> <span class="bp">self</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;group&quot;</span><span class="p">,</span>
+</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2317"><a href="#L-2317"><span class="linenos">2317</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span>
+</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
+</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</span></a> <span class="p">)</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">def</span> <span class="nf">order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</span></a><span class="sd"> Set the ORDER BY expression.</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="sd"> Example:</span>
+</span><span id="L-2328"><a href="#L-2328"><span class="linenos">2328</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).order_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="L-2329"><a href="#L-2329"><span class="linenos">2329</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
+</span><span id="L-2330"><a href="#L-2330"><span class="linenos">2330</span></a>
+</span><span id="L-2331"><a href="#L-2331"><span class="linenos">2331</span></a><span class="sd"> Args:</span>
+</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2333"><a href="#L-2333"><span class="linenos">2333</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
+</span><span id="L-2335"><a href="#L-2335"><span class="linenos">2335</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2338"><a href="#L-2338"><span class="linenos">2338</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;order&quot;</span><span class="p">,</span>
+</span><span id="L-2348"><a href="#L-2348"><span class="linenos">2348</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ORDER BY&quot;</span><span class="p">,</span>
+</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="L-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="p">)</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">sort_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2358"><a href="#L-2358"><span class="linenos">2358</span></a><span class="sd"> Set the SORT BY expression.</span>
+</span><span id="L-2359"><a href="#L-2359"><span class="linenos">2359</span></a>
+</span><span id="L-2360"><a href="#L-2360"><span class="linenos">2360</span></a><span class="sd"> Example:</span>
+</span><span id="L-2361"><a href="#L-2361"><span class="linenos">2361</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</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="sd"> Args:</span>
+</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
+</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2371"><a href="#L-2371"><span class="linenos">2371</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2372"><a href="#L-2372"><span class="linenos">2372</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a>
+</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2377"><a href="#L-2377"><span class="linenos">2377</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2380"><a href="#L-2380"><span class="linenos">2380</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span>
+</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2383"><a href="#L-2383"><span class="linenos">2383</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span>
+</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
+</span><span id="L-2385"><a href="#L-2385"><span class="linenos">2385</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2386"><a href="#L-2386"><span class="linenos">2386</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</span></a> <span class="p">)</span>
+</span><span id="L-2388"><a href="#L-2388"><span class="linenos">2388</span></a>
+</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</span></a><span class="sd"> Set the CLUSTER BY expression.</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="sd"> Example:</span>
+</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
+</span><span id="L-2396"><a href="#L-2396"><span class="linenos">2396</span></a>
+</span><span id="L-2397"><a href="#L-2397"><span class="linenos">2397</span></a><span class="sd"> Args:</span>
+</span><span id="L-2398"><a href="#L-2398"><span class="linenos">2398</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
+</span><span id="L-2401"><a href="#L-2401"><span class="linenos">2401</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2402"><a href="#L-2402"><span class="linenos">2402</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2404"><a href="#L-2404"><span class="linenos">2404</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2405"><a href="#L-2405"><span class="linenos">2405</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</span></a>
+</span><span id="L-2407"><a href="#L-2407"><span class="linenos">2407</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</span></a><span class="sd"> &quot;&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="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
+</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span>
+</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
+</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2419"><a href="#L-2419"><span class="linenos">2419</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</span></a> <span class="p">)</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">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a><span class="sd"> Set the LIMIT expression.</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="sd"> Example:</span>
+</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).limit(10).sql()</span>
+</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
</span><span id="L-2429"><a href="#L-2429"><span class="linenos">2429</span></a>
-</span><span id="L-2430"><a href="#L-2430"><span class="linenos">2430</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2432"><a href="#L-2432"><span class="linenos">2432</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a> <span class="n">on</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a> <span class="n">using</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</span></a> <span class="n">join_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</span></a> <span class="n">join_alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2438"><a href="#L-2438"><span class="linenos">2438</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2439"><a href="#L-2439"><span class="linenos">2439</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a><span class="sd"> Append to or set the JOIN expressions.</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="sd"> Example:</span>
-</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;).sql()</span>
-</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a>
-</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;1&quot;).from_(&quot;a&quot;).join(&quot;b&quot;, using=[&quot;x&quot;, &quot;y&quot;, &quot;z&quot;]).sql()</span>
-</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#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="sd"> Use `join_type` to change the type of join:</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="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;, join_type=&quot;left outer&quot;).sql()</span>
-</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="L-2430"><a href="#L-2430"><span class="linenos">2430</span></a><span class="sd"> Args:</span>
+</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="L-2432"><a href="#L-2432"><span class="linenos">2432</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2438"><a href="#L-2438"><span class="linenos">2438</span></a>
+</span><span id="L-2439"><a href="#L-2439"><span class="linenos">2439</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a> <span class="n">expression</span><span class="o">=</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 class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span>
+</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">,</span>
+</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</span></a> <span class="p">)</span>
+</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a>
+</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</span></a><span class="sd"> Set the OFFSET expression.</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="sd"> Args:</span>
-</span><span id="L-2458"><a href="#L-2458"><span class="linenos">2458</span></a><span class="sd"> expression (str | Expression): the SQL code string to parse.</span>
-</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</span></a><span class="sd"> on (str | Expression): optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
-</span><span id="L-2461"><a href="#L-2461"><span class="linenos">2461</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</span></a><span class="sd"> using (str | Expression): optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
-</span><span id="L-2463"><a href="#L-2463"><span class="linenos">2463</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a><span class="sd"> join_type (str): If set, alter the parsed join type</span>
-</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="n">parse_args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">}</span>
-</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a>
-</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Join</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;JOIN&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
-</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="p">(</span><span class="n">Join</span><span class="p">,</span> <span class="n">Expression</span><span class="p">),</span> <span class="o">**</span><span class="n">parse_args</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="n">join</span> <span class="o">=</span> <span class="n">expression</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">Join</span><span class="p">)</span> <span class="k">else</span> <span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">Select</span><span class="p">):</span>
-</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a> <span class="n">join</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="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">subquery</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="n">join_type</span><span class="p">:</span>
-</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="n">natural</span><span 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-2488"><a href="#L-2488"><span class="linenos">2488</span></a> <span class="n">side</span><span 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-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <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">Token</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">natural</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="n">maybe_parse</span><span class="p">(</span><span class="n">join_type</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span> <span class="c1"># type: ignore</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">if</span> <span class="n">natural</span><span class="p">:</span>
-</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">,</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="n">join</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">kind</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</span></a>
-</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
-</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">on</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</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-2503"><a href="#L-2503"><span class="linenos">2503</span></a>
-</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
-</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
-</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a> <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">if</span> <span class="n">join_alias</span><span class="p">:</span>
-</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="n">join</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">alias_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">join_alias</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-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="n">join</span><span class="p">,</span>
-</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span>
-</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="p">)</span>
+</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</span></a><span class="sd"> Example:</span>
+</span><span id="L-2458"><a href="#L-2458"><span class="linenos">2458</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).offset(10).sql()</span>
+</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</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="sd"> Args:</span>
+</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="L-2463"><a href="#L-2463"><span class="linenos">2463</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
+</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
+</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a>
+</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</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">expression</span><span class="p">,</span>
+</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span>
+</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
+</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span>
+</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</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">select</span><span class="p">(</span>
+</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="n">append</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-2488"><a href="#L-2488"><span class="linenos">2488</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-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <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><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a><span class="sd"> Append to or set the SELECT expressions.</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="sd"> Example:</span>
+</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
+</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a><span class="sd"> &#39;SELECT x, y&#39;</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="sd"> Args:</span>
+</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a>
+</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a> <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 class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
+</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <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">lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a><span class="sd"> Append to or set the LATERAL expressions.</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">def</span> <span class="nf">where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a><span class="sd"> Example:</span>
+</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).lateral(&quot;OUTER explode(y) tbl2 AS z&quot;).from_(&quot;tbl&quot;).sql()</span>
+</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a>
-</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a><span class="sd"> Example:</span>
-</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
-</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</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="sd"> Args:</span>
-</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a>
-</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a> <span class="p">)</span>
-</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a>
-</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
-</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a>
-</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a><span class="sd"> Example:</span>
-</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;COUNT(y)&quot;).from_(&quot;tbl&quot;).group_by(&quot;x&quot;).having(&quot;COUNT(y) &gt; 3&quot;).sql()</span>
-</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a><span class="sd"> &#39;SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) &gt; 3&#39;</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="sd"> Args:</span>
-</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a><span class="sd"> Args:</span>
+</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a>
+</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
+</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LATERAL VIEW&quot;</span><span class="p">,</span>
+</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</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><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="k">def</span> <span class="nf">join</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="p">,</span>
+</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="n">on</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="n">using</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="n">join_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="n">join_alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a><span class="sd"> Append to or set the JOIN expressions.</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="sd"> Example:</span>
+</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;).sql()</span>
+</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</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="sd"> &gt;&gt;&gt; Select().select(&quot;1&quot;).from_(&quot;a&quot;).join(&quot;b&quot;, using=[&quot;x&quot;, &quot;y&quot;, &quot;z&quot;]).sql()</span>
+</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a>
-</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a><span class="sd"> Returns:</span>
-</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2577"><a href="#L-2577"><span class="linenos">2577</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;having&quot;</span><span class="p">,</span>
-</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
-</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="p">)</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">def</span> <span class="nf">window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span>
-</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="p">)</span>
-</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a>
-</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <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 class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
-</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
-</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="p">)</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">distinct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a>
-</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a><span class="sd"> Example:</span>
-</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
-</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</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="sd"> Args:</span>
-</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</span></a><span class="sd"> distinct (bool): whether the Select should be distinct</span>
-</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</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="sd"> Returns:</span>
-</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">,</span> <span class="n">Distinct</span><span class="p">()</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="k">return</span> <span class="n">instance</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">ctas</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">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Create</span><span class="p">:</span>
-</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
-</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a>
-</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a><span class="sd"> Example:</span>
-</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).ctas(&quot;x&quot;).sql()</span>
-</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</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="sd"> Args:</span>
-</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a><span class="sd"> table (str | Expression): the SQL code string to parse as the table name.</span>
-</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a><span class="sd"> properties (dict): an optional mapping of table properties</span>
-</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a><span class="sd"> dialect (str): the dialect used to parse the input table.</span>
-</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a><span class="sd"> opts (kwargs): other options to use to parse the input table.</span>
+</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a><span class="sd"> Use `join_type` to change the type of join:</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="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;, join_type=&quot;left outer&quot;).sql()</span>
+</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</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="sd"> Args:</span>
+</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a><span class="sd"> expression (str | Expression): the SQL code string to parse.</span>
+</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a><span class="sd"> on (str | Expression): optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
+</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a><span class="sd"> using (str | Expression): optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
+</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a><span class="sd"> join_type (str): If set, alter the parsed join type</span>
+</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="n">parse_args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">}</span>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a>
+</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Join</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;JOIN&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
+</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="p">(</span><span class="n">Join</span><span class="p">,</span> <span class="n">Expression</span><span class="p">),</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
+</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a>
+</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">expression</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">Join</span><span class="p">)</span> <span class="k">else</span> <span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</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><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">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</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">join</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="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span>
+</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a>
+</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
+</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="n">natural</span><span 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-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="n">side</span><span 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-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <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">Token</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="n">natural</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="n">maybe_parse</span><span class="p">(</span><span class="n">join_type</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span> <span class="c1"># type: ignore</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">if</span> <span class="n">natural</span><span class="p">:</span>
+</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">,</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2620"><a href="#L-2620"><span class="linenos">2620</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="n">join</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">kind</span><span class="o">.</span><span class="n">text</span><span class="p">)</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">if</span> <span class="n">on</span><span class="p">:</span>
+</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">on</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</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-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">using</span><span class="p">:</span>
+</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
+</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
+</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <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">if</span> <span class="n">join_alias</span><span class="p">:</span>
+</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a> <span class="n">join</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">alias_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">join_alias</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-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="n">join</span><span class="p">,</span>
+</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span>
+</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="o">**</span><span class="n">opts</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="sd"> Returns:</span>
-</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a><span class="sd"> Create: the CREATE TABLE AS expression</span>
-</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="n">table_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="n">table</span><span class="p">,</span>
-</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="p">)</span>
-</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">properties</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">return</span> <span class="n">Create</span><span class="p">(</span>
-</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table_expression</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="s2">&quot;table&quot;</span><span class="p">,</span>
-</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties_expression</span><span class="p">,</span>
-</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a> <span class="p">)</span>
-</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a>
-</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="k">def</span> <span class="nf">lock</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">update</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="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="n">Select</span><span class="p">:</span>
-</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a><span class="sd"> Set the locking read mode for this expression.</span>
-</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a>
-</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a><span class="sd"> Examples:</span>
-</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock().sql(&quot;mysql&quot;)</span>
-</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</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="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock(update=False).sql(&quot;mysql&quot;)</span>
-</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a><span class="sd"> Append to or set the WHERE expressions.</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="sd"> Example:</span>
+</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
+</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</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="sd"> Args:</span>
+</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a><span class="sd"> &quot;&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="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="p">)</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="sd"> Args:</span>
-</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a><span class="sd"> update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`.</span>
-</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a><span class="sd"> Append to or set the HAVING expressions.</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="sd"> Returns:</span>
-</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a><span class="sd"> The modified expression.</span>
-</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a><span class="sd"> Example:</span>
+</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;COUNT(y)&quot;).from_(&quot;tbl&quot;).group_by(&quot;x&quot;).having(&quot;COUNT(y) &gt; 3&quot;).sql()</span>
+</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a><span class="sd"> &#39;SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) &gt; 3&#39;</span>
</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a>
-</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;lock&quot;</span><span class="p">,</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><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">return</span> <span class="n">inst</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="nd">@property</span>
-</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="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-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span>
-</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a>
-</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="nd">@property</span>
-</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="k">def</span> <span class="nf">is_star</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-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <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">expressions</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="nd">@property</span>
-</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="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">Expression</span><span class="p">]:</span>
-</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a>
-</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">class</span> <span class="nc">Subquery</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
-</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <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">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a><span class="sd"> Returns the first non subquery.</span>
-</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
-</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Subquery</span><span class="p">):</span>
-</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <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-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a>
-</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="nd">@property</span>
-</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="k">def</span> <span class="nf">is_star</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-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span>
-</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a>
-</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="nd">@property</span>
-</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</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><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</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><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a><span class="k">class</span> <span class="nc">TableSample</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="s2">&quot;bucket_numerator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="s2">&quot;bucket_denominator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a> <span class="s2">&quot;bucket_field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a> <span class="s2">&quot;size&quot;</span><span class="p">:</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="s2">&quot;seed&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a> <span class="p">}</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><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a><span class="k">class</span> <span class="nc">Tag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Tags are used for generating arbitrary sql like SELECT &lt;span&gt;x&lt;/span&gt;.&quot;&quot;&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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="s2">&quot;postfix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="p">}</span>
-</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a>
+</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a><span class="sd"> Args:</span>
+</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a>
+</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a><span class="sd"> &quot;&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="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;having&quot;</span><span class="p">,</span>
+</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
+</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a> <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">window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</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="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span>
+</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="p">)</span>
+</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a>
+</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
+</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
+</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="p">)</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">distinct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">ons</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">distinct</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="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="n">Select</span><span class="p">:</span>
+</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a><span class="sd"> Set the OFFSET expression.</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="sd"> Example:</span>
+</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
+</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
+</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a>
+</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a><span class="sd"> Args:</span>
+</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a><span class="sd"> ons: the expressions to distinct on</span>
+</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
+</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a>
+</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="n">on</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">maybe_parse</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">on</span> <span class="ow">in</span> <span class="n">ons</span><span class="p">])</span> <span class="k">if</span> <span class="n">ons</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">,</span> <span class="n">Distinct</span><span class="p">(</span><span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">)</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="kc">None</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="n">instance</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">class</span> <span class="nc">Pivot</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="p">}</span>
-</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a>
-</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">class</span> <span class="nc">Window</span><span class="p">(</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">arg_types</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="s2">&quot;this&quot;</span><span class="p">:</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="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="p">}</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><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a><span class="k">class</span> <span class="nc">WindowSpec</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a> <span class="p">}</span>
+</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="k">def</span> <span class="nf">ctas</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">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Create</span><span class="p">:</span>
+</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
+</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a>
+</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a><span class="sd"> Example:</span>
+</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).ctas(&quot;x&quot;).sql()</span>
+</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</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="sd"> Args:</span>
+</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a><span class="sd"> table (str | Expression): the SQL code string to parse as the table name.</span>
+</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a><span class="sd"> properties (dict): an optional mapping of table properties</span>
+</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a><span class="sd"> dialect (str): the dialect used to parse the input table.</span>
+</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a><span class="sd"> opts (kwargs): other options to use to parse the input table.</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="sd"> Returns:</span>
+</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a><span class="sd"> Create: the CREATE TABLE AS expression</span>
+</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="n">table_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="n">table</span><span class="p">,</span>
+</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="p">)</span>
+</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">properties</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><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a><span class="k">class</span> <span class="nc">Where</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="k">pass</span>
-</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a>
-</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a>
-</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a><span class="k">class</span> <span class="nc">Star</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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="nd">@property</span>
-</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="k">def</span> <span class="nf">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-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
-</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a>
-</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="nd">@property</span>
-</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</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><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</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><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</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;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a>
-</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">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a>
-</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a>
-</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</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><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</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">Create</span><span class="p">(</span>
+</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table_expression</span><span class="p">,</span>
+</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;table&quot;</span><span class="p">,</span>
+</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties_expression</span><span class="p">,</span>
+</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a> <span class="p">)</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">lock</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">update</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="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="n">Select</span><span class="p">:</span>
+</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a><span class="sd"> Set the locking read mode for this expression.</span>
+</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a>
+</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a><span class="sd"> Examples:</span>
+</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock().sql(&quot;mysql&quot;)</span>
+</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</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="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock(update=False).sql(&quot;mysql&quot;)</span>
+</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
+</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a>
+</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a><span class="sd"> Args:</span>
+</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a><span class="sd"> update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`.</span>
+</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a>
+</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a><span class="sd"> Returns:</span>
+</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a><span class="sd"> The modified expression.</span>
+</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a><span class="sd"> &quot;&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="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;lock&quot;</span><span class="p">,</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><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a>
-</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a><span class="k">class</span> <span class="nc">Null</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="n">arg_types</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><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="nd">@property</span>
-</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="k">def</span> <span class="nf">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-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</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><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a><span class="k">class</span> <span class="nc">Boolean</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="k">pass</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><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a><span class="k">class</span> <span class="nc">DataType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a> <span class="s2">&quot;nested&quot;</span><span class="p">:</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="s2">&quot;values&quot;</span><span class="p">:</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="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="p">}</span>
-</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a>
-</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="k">class</span> <span class="nc">Type</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
-</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Sentinel value, useful for type annotation</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="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="p">}</span>
+</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="k">return</span> <span class="n">inst</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="nd">@property</span>
+</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="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-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span>
+</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a>
+</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="nd">@property</span>
+</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a> <span class="k">def</span> <span class="nf">is_star</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-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <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">expressions</span><span class="p">)</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="nd">@property</span>
+</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="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">Expression</span><span class="p">]:</span>
+</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a>
+</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">class</span> <span class="nc">Subquery</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
+</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</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="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="p">}</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="k">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a><span class="sd"> Returns the first non subquery.</span>
+</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Subquery</span><span class="p">):</span>
+</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <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-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a>
+</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="nd">@property</span>
+</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="k">def</span> <span class="nf">is_star</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-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span>
+</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a>
+</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a> <span class="nd">@property</span>
+</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</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><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
+</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a>
+</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">class</span> <span class="nc">TableSample</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="s2">&quot;bucket_numerator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="s2">&quot;bucket_denominator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="s2">&quot;bucket_field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="s2">&quot;seed&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <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><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a><span class="k">class</span> <span class="nc">Tag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Tags are used for generating arbitrary sql like SELECT &lt;span&gt;x&lt;/span&gt;.&quot;&quot;&quot;</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="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a> <span class="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="s2">&quot;postfix&quot;</span><span class="p">:</span> <span class="kc">False</span><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><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a><span class="k">class</span> <span class="nc">Pivot</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</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><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">class</span> <span class="nc">Window</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a> <span class="s2">&quot;over&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="s2">&quot;first&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="p">}</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><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="n">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <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="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="p">}</span>
-</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a>
-</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a> <span class="n">NUMERIC_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">INTEGER_TYPES</span><span class="p">,</span> <span class="o">*</span><span class="n">FLOAT_TYPES</span><span class="p">}</span>
+</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a><span class="k">class</span> <span class="nc">WindowSpec</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a> <span class="n">arg_types</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="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a> <span class="p">}</span>
+</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a>
+</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">class</span> <span class="nc">Where</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="k">pass</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><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</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><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
-</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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">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">**</span><span class="n">kwargs</span>
-</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
-</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">parse_one</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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</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">if</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">__members__</span><span class="p">:</span>
-</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a> <span class="n">data_type_exp</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
-</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="n">data_type_exp</span> <span class="o">=</span> <span class="n">parse_one</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">DataType</span><span class="p">)</span>
-</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="k">if</span> <span class="n">data_type_exp</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</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;Unparsable data type value: </span><span class="si">{</span><span class="n">dtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
-</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <span class="n">data_type_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">dtype</span><span class="p">)</span>
-</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
-</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a> <span class="k">return</span> <span class="n">dtype</span>
-</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</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 data type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="si">}</span><span class="s2">. Expected str or DataType.Type&quot;</span><span class="p">)</span>
-</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="k">return</span> <span class="n">DataType</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">data_type_exp</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-2947"><a href="#L-2947"><span class="linenos">2947</span></a>
-</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
-</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">dtype</span>
+</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a><span class="k">class</span> <span class="nc">Star</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</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="nd">@property</span>
+</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="k">def</span> <span class="nf">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-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
+</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a>
+</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="nd">@property</span>
+</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</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><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">name</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><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</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;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a><span class="k">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</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><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><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a><span class="k">class</span> <span class="nc">Null</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="n">arg_types</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><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="nd">@property</span>
+</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="k">def</span> <span class="nf">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-2948"><a href="#L-2948"><span class="linenos">2948</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</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><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="c1"># https://www.postgresql.org/docs/15/datatype-pseudo.html</span>
-</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a><span class="k">class</span> <span class="nc">PseudoType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a> <span class="k">pass</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><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a><span class="k">class</span> <span class="nc">StructKwarg</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</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><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a>
-</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="c1"># WHERE x &lt;OP&gt; EXISTS|ALL|ANY|SOME(SELECT ...)</span>
-</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a><span class="k">class</span> <span class="nc">SubqueryPredicate</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</span></a> <span class="k">pass</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><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a><span class="k">class</span> <span class="nc">All</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
-</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="k">pass</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><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a><span class="k">class</span> <span class="nc">Any</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
-</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="k">pass</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><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a><span class="k">class</span> <span class="nc">Exists</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
-</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a> <span class="k">pass</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><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a><span class="c1"># Commands to interact with the databases or engines. For most of the command</span>
-</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a><span class="c1"># expressions we parse whatever comes after the command&#39;s name as a string.</span>
-</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a><span class="k">class</span> <span class="nc">Command</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</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">False</span><span class="p">}</span>
-</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a>
-</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">class</span> <span class="nc">Transaction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</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;modes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a>
-</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">class</span> <span class="nc">Commit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;chain&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a><span class="k">class</span> <span class="nc">Rollback</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;savepoint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a><span class="k">class</span> <span class="nc">AlterTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</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;actions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a><span class="k">class</span> <span class="nc">AddConstraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</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">False</span><span class="p">,</span> <span class="s2">&quot;enforced&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a><span class="k">class</span> <span class="nc">DropPartition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><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><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a><span class="c1"># Binary expressions like (ADD a b)</span>
-</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a><span class="k">class</span> <span class="nc">Binary</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</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><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a>
-</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="nd">@property</span>
-</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</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">this</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="nd">@property</span>
-</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a><span class="k">class</span> <span class="nc">Add</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="k">pass</span>
+</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a><span class="k">class</span> <span class="nc">Boolean</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a> <span class="k">pass</span>
+</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a>
+</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">class</span> <span class="nc">DataType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="s2">&quot;nested&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a> <span class="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a> <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">class</span> <span class="nc">Type</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
+</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Sentinel value, useful for type annotation</span>
</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a>
-</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">class</span> <span class="nc">Connector</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="k">pass</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><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a><span class="k">class</span> <span class="nc">And</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
-</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a> <span class="k">pass</span>
+</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a> <span class="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a> <span class="p">}</span>
</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</span></a>
-</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a>
-</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a><span class="k">class</span> <span class="nc">Or</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
-</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="k">pass</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><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a><span class="k">class</span> <span class="nc">BitwiseAnd</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="k">pass</span>
-</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a>
-</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">class</span> <span class="nc">BitwiseLeftShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="k">pass</span>
+</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="n">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="p">}</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="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="p">}</span>
</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a>
-</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">class</span> <span class="nc">BitwiseOr</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="k">pass</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><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a><span class="k">class</span> <span class="nc">BitwiseRightShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a> <span class="k">pass</span>
-</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a>
-</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a>
-</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</span></a><span class="k">class</span> <span class="nc">BitwiseXor</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="k">pass</span>
-</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a>
-</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">class</span> <span class="nc">Div</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="k">pass</span>
+</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a> <span class="n">NUMERIC_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">INTEGER_TYPES</span><span class="p">,</span> <span class="o">*</span><span class="n">FLOAT_TYPES</span><span class="p">}</span>
+</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a>
+</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="p">}</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="nd">@classmethod</span>
+</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
+</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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">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">**</span><span class="n">kwargs</span>
+</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
+</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">parse_one</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><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a><span class="k">class</span> <span class="nc">Overlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="k">pass</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><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a><span class="k">class</span> <span class="nc">Dot</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</span></a> <span class="nd">@property</span>
-</span><span id="L-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="k">def</span> <span class="nf">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-3068"><a href="#L-3068"><span class="linenos">3068</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">name</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="nd">@classmethod</span>
-</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</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">Sequence</span><span class="p">[</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
-</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Dot object with a sequence of expressions.&quot;&quot;&quot;</span>
-</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</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">&lt;</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</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;Dot requires &gt;= 2 expressions.&quot;</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="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">expressions</span>
-</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="n">dot</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">)</span>
+</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">__members__</span><span class="p">:</span>
+</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="n">data_type_exp</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
+</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="n">data_type_exp</span> <span class="o">=</span> <span class="n">parse_one</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="k">if</span> <span class="n">data_type_exp</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</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;Unparsable data type value: </span><span class="si">{</span><span class="n">dtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
+</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a> <span class="n">data_type_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">dtype</span><span class="p">)</span>
+</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
+</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="k">return</span> <span class="n">dtype</span>
+</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</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 data type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="si">}</span><span class="s2">. Expected str or DataType.Type&quot;</span><span class="p">)</span>
+</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a> <span class="k">return</span> <span class="n">DataType</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">data_type_exp</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-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="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
+</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">dtype</span>
+</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a>
</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">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="n">dot</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">dot</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-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="k">return</span> <span class="n">dot</span>
+</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a><span class="c1"># https://www.postgresql.org/docs/15/datatype-pseudo.html</span>
+</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a><span class="k">class</span> <span class="nc">PseudoType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="k">pass</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><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">class</span> <span class="nc">DPipe</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <span class="k">pass</span>
+</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a><span class="k">class</span> <span class="nc">StructKwarg</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</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><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><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">class</span> <span class="nc">EQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a><span class="c1"># WHERE x &lt;OP&gt; EXISTS|ALL|ANY|SOME(SELECT ...)</span>
+</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</span></a><span class="k">class</span> <span class="nc">SubqueryPredicate</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="k">pass</span>
</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a>
</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a>
-</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a><span class="k">class</span> <span class="nc">NullSafeEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a><span class="k">class</span> <span class="nc">All</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="k">pass</span>
</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a>
</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a>
-</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a><span class="k">class</span> <span class="nc">NullSafeNEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a><span class="k">class</span> <span class="nc">Any</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="k">pass</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><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a><span class="k">class</span> <span class="nc">Distance</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a><span class="k">class</span> <span class="nc">Exists</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="k">pass</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><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a><span class="k">class</span> <span class="nc">Escape</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a> <span class="k">pass</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><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a><span class="k">class</span> <span class="nc">Glob</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">pass</span>
-</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a>
-</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">class</span> <span class="nc">GT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</span></a> <span class="k">pass</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><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a><span class="k">class</span> <span class="nc">GTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a> <span class="k">pass</span>
-</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a>
-</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">class</span> <span class="nc">ILike</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a> <span class="k">pass</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><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a><span class="k">class</span> <span class="nc">ILikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a> <span class="k">pass</span>
-</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a>
-</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">class</span> <span class="nc">IntDiv</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="k">pass</span>
-</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a>
-</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a>
-</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a><span class="k">class</span> <span class="nc">Is</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a> <span class="k">pass</span>
-</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a>
-</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="k">class</span> <span class="nc">Kwarg</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Kwarg in special functions like func(kwarg =&gt; y).&quot;&quot;&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><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a><span class="k">class</span> <span class="nc">Like</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a> <span class="k">pass</span>
-</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a>
-</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a>
-</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a><span class="k">class</span> <span class="nc">LikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="k">pass</span>
+</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a><span class="c1"># Commands to interact with the databases or engines. For most of the command</span>
+</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a><span class="c1"># expressions we parse whatever comes after the command&#39;s name as a string.</span>
+</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</span></a><span class="k">class</span> <span class="nc">Command</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</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">False</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><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a><span class="k">class</span> <span class="nc">Transaction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</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;modes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a><span class="k">class</span> <span class="nc">Commit</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">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;chain&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a>
+</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="k">class</span> <span class="nc">Rollback</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;savepoint&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a><span class="k">class</span> <span class="nc">AlterTable</span><span class="p">(</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">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;actions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a><span class="k">class</span> <span class="nc">AddConstraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</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">False</span><span class="p">,</span> <span class="s2">&quot;enforced&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a>
+</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">class</span> <span class="nc">DropPartition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a><span class="c1"># Binary expressions like (ADD a b)</span>
+</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a><span class="k">class</span> <span class="nc">Binary</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</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><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a>
+</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a> <span class="nd">@property</span>
+</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</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">this</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="nd">@property</span>
+</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a>
</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><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a><span class="k">class</span> <span class="nc">LT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="k">pass</span>
+</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a><span class="k">class</span> <span class="nc">Add</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="k">pass</span>
+</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a>
</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><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a><span class="k">class</span> <span class="nc">LTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="k">pass</span>
+</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a><span class="k">class</span> <span class="nc">Connector</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="k">pass</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><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a>
-</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a><span class="k">class</span> <span class="nc">Mod</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="k">pass</span>
+</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a><span class="k">class</span> <span class="nc">And</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
+</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <span class="k">pass</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><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">class</span> <span class="nc">Mul</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a> <span class="k">pass</span>
+</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a><span class="k">class</span> <span class="nc">Or</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
+</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="k">pass</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><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">class</span> <span class="nc">NEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a> <span class="k">pass</span>
+</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a><span class="k">class</span> <span class="nc">BitwiseAnd</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="k">pass</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><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">class</span> <span class="nc">SimilarTo</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a> <span class="k">pass</span>
+</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a><span class="k">class</span> <span class="nc">BitwiseLeftShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="k">pass</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><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">class</span> <span class="nc">Slice</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</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">False</span><span class="p">}</span>
+</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a><span class="k">class</span> <span class="nc">BitwiseOr</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="k">pass</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><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">class</span> <span class="nc">Sub</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">pass</span>
+</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a><span class="k">class</span> <span class="nc">BitwiseRightShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a> <span class="k">pass</span>
+</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a>
</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><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a><span class="k">class</span> <span class="nc">ArrayOverlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="k">pass</span>
+</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a><span class="k">class</span> <span class="nc">BitwiseXor</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="k">pass</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><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="c1"># Unary Expressions</span>
-</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a><span class="c1"># (NOT a)</span>
-</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a><span class="k">class</span> <span class="nc">Unary</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="k">pass</span>
-</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a>
+</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a><span class="k">class</span> <span class="nc">Div</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="k">pass</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><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a><span class="k">class</span> <span class="nc">Overlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="k">pass</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">class</span> <span class="nc">BitwiseNot</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
-</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="k">pass</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><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a><span class="k">class</span> <span class="nc">Not</span><span class="p">(</span><span class="n">Unary</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a> <span class="k">pass</span>
-</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</span></a>
-</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">class</span> <span class="nc">Paren</span><span class="p">(</span><span class="n">Unary</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</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;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a>
+</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">class</span> <span class="nc">Dot</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="nd">@property</span>
+</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="k">def</span> <span class="nf">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-3195"><a href="#L-3195"><span class="linenos">3195</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">name</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="nd">@classmethod</span>
+</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</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">Sequence</span><span class="p">[</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
+</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Dot object with a sequence of expressions.&quot;&quot;&quot;</span>
+</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</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">&lt;</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</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;Dot requires &gt;= 2 expressions.&quot;</span><span class="p">)</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">class</span> <span class="nc">Neg</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
-</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a> <span class="k">pass</span>
+</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">expressions</span>
+</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a> <span class="n">dot</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">)</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><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a><span class="k">class</span> <span class="nc">Alias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</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;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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="nd">@property</span>
-</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</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><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
-</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</span></a>
+</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a> <span class="n">dot</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">dot</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-3208"><a href="#L-3208"><span class="linenos">3208</span></a>
+</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</span></a> <span class="k">return</span> <span class="n">dot</span>
+</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a>
+</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">class</span> <span class="nc">DPipe</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="k">pass</span>
</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a>
-</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a><span class="k">class</span> <span class="nc">Aliases</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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="nd">@property</span>
-</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a> <span class="k">def</span> <span class="nf">aliases</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</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">expressions</span>
-</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a>
+</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">class</span> <span class="nc">EQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a> <span class="k">pass</span>
+</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a>
+</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">class</span> <span class="nc">NullSafeEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a> <span class="k">pass</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">class</span> <span class="nc">AtTimeZone</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</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;zone&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a>
+</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">class</span> <span class="nc">NullSafeNEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a> <span class="k">pass</span>
</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a>
-</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a><span class="k">class</span> <span class="nc">Between</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</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;low&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;high&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a>
+</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="k">class</span> <span class="nc">Distance</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a> <span class="k">pass</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">class</span> <span class="nc">Bracket</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a>
+</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="k">class</span> <span class="nc">Escape</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="k">pass</span>
</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a>
-</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a><span class="k">class</span> <span class="nc">Distinct</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="n">arg_types</span> <span class="o">=</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 class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a>
+</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">class</span> <span class="nc">Glob</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a> <span class="k">pass</span>
</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a>
-</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a><span class="k">class</span> <span class="nc">In</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
-</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="s2">&quot;is_global&quot;</span><span class="p">:</span> <span class="kc">False</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><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">class</span> <span class="nc">TimeUnit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Automatically converts unit arg into a var.&quot;&quot;&quot;</span>
-</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a>
-</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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="k">class</span> <span class="nc">GT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="k">pass</span>
+</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a>
+</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="k">class</span> <span class="nc">GTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="k">pass</span>
+</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a>
+</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">class</span> <span class="nc">ILike</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="k">pass</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><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a><span class="k">class</span> <span class="nc">ILikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="k">pass</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="fm">__init__</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><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a> <span class="n">unit</span> <span class="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-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="n">Column</span><span class="p">,</span> <span class="n">Literal</span><span class="p">)):</span>
-</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;unit&quot;</span><span class="p">]</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">unit</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">Week</span><span class="p">):</span>
-</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="n">unit</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</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-3261"><a href="#L-3261"><span class="linenos">3261</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="o">**</span><span class="n">args</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">class</span> <span class="nc">IntDiv</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="k">pass</span>
+</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a>
+</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a>
+</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a><span class="k">class</span> <span class="nc">Is</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a> <span class="k">pass</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><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a><span class="k">class</span> <span class="nc">Interval</span><span class="p">(</span><span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a><span class="k">class</span> <span class="nc">Kwarg</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Kwarg in special functions like func(kwarg =&gt; y).&quot;&quot;&quot;</span>
</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a>
</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">class</span> <span class="nc">IgnoreNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a><span class="k">class</span> <span class="nc">Like</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="k">pass</span>
</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a>
</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">class</span> <span class="nc">RespectNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a><span class="k">class</span> <span class="nc">LikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="k">pass</span>
</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a>
</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="c1"># Functions</span>
-</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a><span class="k">class</span> <span class="nc">Func</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a><span class="sd"> The base class for all function expressions.</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="sd"> Attributes:</span>
-</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a><span class="sd"> is_var_len_args (bool): if set to True the last argument defined in arg_types will be</span>
-</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a><span class="sd"> treated as a variable length argument and the argument&#39;s value will be stored as a list.</span>
-</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a><span class="sd"> _sql_names (list): determines the SQL name (1st item in the list) and aliases (subsequent items)</span>
-</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a><span class="sd"> for this function expression. These values are used to map this node to a name during parsing</span>
-</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a><span class="sd"> as well as to provide the function&#39;s name during SQL string generation. By default the SQL</span>
-</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
-</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a>
-</span><span id="L-3290"><a href="#L-3290"><span class="linenos">3290</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a><span class="k">class</span> <span class="nc">LT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="k">pass</span>
+</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a>
+</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">class</span> <span class="nc">LTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a> <span class="k">pass</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><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a><span class="k">class</span> <span class="nc">Mod</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a> <span class="k">pass</span>
+</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a>
+</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="k">class</span> <span class="nc">Mul</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="k">pass</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><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a> <span class="k">def</span> <span class="nf">from_arg_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
-</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span><span class="p">:</span>
-</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="n">all_arg_keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)</span>
-</span><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
-</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="n">non_var_len_arg_keys</span> <span class="o">=</span> <span class="n">all_arg_keys</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="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span> <span class="k">else</span> <span class="n">all_arg_keys</span>
-</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="n">num_non_var</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">non_var_len_arg_keys</span><span class="p">)</span>
+</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a><span class="k">class</span> <span class="nc">NEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a> <span class="k">pass</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><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a><span class="k">class</span> <span class="nc">SimilarTo</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="k">pass</span>
+</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a>
</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">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">non_var_len_arg_keys</span><span class="p">)}</span>
-</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="n">args_dict</span><span class="p">[</span><span class="n">all_arg_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">args</span><span class="p">[</span><span class="n">num_non_var</span><span class="p">:]</span>
-</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)}</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">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">args_dict</span><span class="p">)</span>
+</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a><span class="k">class</span> <span class="nc">Slice</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</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">False</span><span class="p">}</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><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a><span class="k">class</span> <span class="nc">Sub</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="k">pass</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="nd">@classmethod</span>
-</span><span id="L-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="k">def</span> <span class="nf">sql_names</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">Func</span><span class="p">:</span>
-</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
-</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
-</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="p">)</span>
-</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="k">if</span> <span class="s2">&quot;_sql_names&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">:</span>
-</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">camel_to_snake_case</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)]</span>
-</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</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">class</span> <span class="nc">ArrayOverlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="k">pass</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><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a><span class="c1"># Unary Expressions</span>
+</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a><span class="c1"># (NOT a)</span>
+</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a><span class="k">class</span> <span class="nc">Unary</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="k">pass</span>
</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a>
-</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a> <span class="k">def</span> <span class="nf">sql_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()[</span><span class="mi">0</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">class</span> <span class="nc">BitwiseNot</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="k">pass</span>
</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a>
-</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="nd">@classmethod</span>
-</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="k">def</span> <span class="nf">default_parser_mappings</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()}</span>
+</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a>
+</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a><span class="k">class</span> <span class="nc">Not</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="k">pass</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><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a><span class="k">class</span> <span class="nc">AggFunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="k">pass</span>
+</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a><span class="k">class</span> <span class="nc">Paren</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</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;with&quot;</span><span class="p">:</span> <span class="kc">False</span><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><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a><span class="k">class</span> <span class="nc">Abs</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a><span class="k">class</span> <span class="nc">Neg</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a> <span class="k">pass</span>
</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a>
</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a>
-</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a><span class="k">class</span> <span class="nc">Anonymous</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a><span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/hll</span>
-</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a><span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_HLL_function.html</span>
-</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a><span class="k">class</span> <span class="nc">Hll</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a><span class="k">class</span> <span class="nc">Alias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</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;alias&quot;</span><span class="p">:</span> <span class="kc">False</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="nd">@property</span>
+</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</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><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
+</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a>
+</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">class</span> <span class="nc">Aliases</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a><span class="k">class</span> <span class="nc">ApproxDistinct</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</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;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="nd">@property</span>
+</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a> <span class="k">def</span> <span class="nf">aliases</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</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><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a><span class="k">class</span> <span class="nc">Array</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a> <span class="n">arg_types</span> <span class="o">=</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-3352"><a href="#L-3352"><span class="linenos">3352</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a><span class="k">class</span> <span class="nc">AtTimeZone</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</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;zone&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a>
-</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a><span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/to_char</span>
-</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a><span class="k">class</span> <span class="nc">ToChar</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a>
-</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">class</span> <span class="nc">GenerateSeries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a>
-</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">class</span> <span class="nc">ArrayAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</span></a> <span class="k">pass</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><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a><span class="k">class</span> <span class="nc">ArrayAll</span><span class="p">(</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="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><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a>
-</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">class</span> <span class="nc">ArrayAny</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</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><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a>
+</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a><span class="k">class</span> <span class="nc">Between</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</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;low&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;high&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a>
+</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="k">class</span> <span class="nc">Bracket</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a><span class="k">class</span> <span class="nc">Distinct</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3363"><a href="#L-3363"><span class="linenos">3363</span></a> <span class="n">arg_types</span> <span class="o">=</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 class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a>
+</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="k">class</span> <span class="nc">In</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
+</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</span></a> <span class="s2">&quot;is_global&quot;</span><span class="p">:</span> <span class="kc">False</span><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">class</span> <span class="nc">ArrayConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a>
+</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a><span class="k">class</span> <span class="nc">TimeUnit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Automatically converts unit arg into a var.&quot;&quot;&quot;</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><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a><span class="k">class</span> <span class="nc">ArrayContains</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-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="k">pass</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><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a><span class="k">class</span> <span class="nc">ArrayContained</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="k">pass</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><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a><span class="k">class</span> <span class="nc">ArrayFilter</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</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><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;FILTER&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY_FILTER&quot;</span><span class="p">]</span>
-</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a>
+</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">False</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="fm">__init__</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><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a> <span class="n">unit</span> <span class="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-3384"><a href="#L-3384"><span class="linenos">3384</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="n">Column</span><span class="p">,</span> <span class="n">Literal</span><span class="p">)):</span>
+</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;unit&quot;</span><span class="p">]</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">unit</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">Week</span><span class="p">):</span>
+</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</span></a> <span class="n">unit</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</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-3388"><a href="#L-3388"><span class="linenos">3388</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="o">**</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a>
+</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a>
+</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a><span class="k">class</span> <span class="nc">Interval</span><span class="p">(</span><span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</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">class</span> <span class="nc">ArrayJoin</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</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&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a>
+</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="k">class</span> <span class="nc">IgnoreNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="k">pass</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">class</span> <span class="nc">ArraySize</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</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">False</span><span class="p">}</span>
-</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a>
+</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">class</span> <span class="nc">RespectNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="k">pass</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">class</span> <span class="nc">ArraySort</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</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">False</span><span class="p">}</span>
-</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a>
-</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="k">class</span> <span class="nc">ArraySum</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="k">pass</span>
-</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a>
-</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">class</span> <span class="nc">ArrayUnionAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a> <span class="k">pass</span>
-</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a>
-</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</span></a>
-</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a><span class="k">class</span> <span class="nc">Avg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a> <span class="k">pass</span>
+</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</span></a>
+</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a><span class="c1"># Functions</span>
+</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a><span class="k">class</span> <span class="nc">Func</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a><span class="sd"> The base class for all function expressions.</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="sd"> Attributes:</span>
+</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a><span class="sd"> is_var_len_args (bool): if set to True the last argument defined in arg_types will be</span>
+</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a><span class="sd"> treated as a variable length argument and the argument&#39;s value will be stored as a list.</span>
+</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a><span class="sd"> _sql_names (list): determines the SQL name (1st item in the list) and aliases (subsequent items)</span>
+</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a><span class="sd"> for this function expression. These values are used to map this node to a name during parsing</span>
+</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</span></a><span class="sd"> as well as to provide the function&#39;s name during SQL string generation. By default the SQL</span>
+</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
+</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</span></a>
-</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a>
-</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</span></a><span class="k">class</span> <span class="nc">AnyValue</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a> <span class="k">pass</span>
-</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</span></a>
-</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a>
-</span><span id="L-3422"><a href="#L-3422"><span class="linenos">3422</span></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</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;ifs&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a>
-</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</span></a>
-</span><span id="L-3426"><a href="#L-3426"><span class="linenos">3426</span></a><span class="k">class</span> <span class="nc">Cast</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</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;to&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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="nd">@property</span>
-</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="k">def</span> <span class="nf">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-3431"><a href="#L-3431"><span class="linenos">3431</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</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="nd">@property</span>
-</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="k">def</span> <span class="nf">to</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="k">return</span> <span class="bp">self</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-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="nd">@property</span>
-</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</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><span id="L-3439"><a href="#L-3439"><span class="linenos">3439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</span></a>
-</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
-</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span>
+</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</span></a>
+</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="k">def</span> <span class="nf">from_arg_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span><span class="p">:</span>
+</span><span id="L-3422"><a href="#L-3422"><span class="linenos">3422</span></a> <span class="n">all_arg_keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)</span>
+</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
+</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <span class="n">non_var_len_arg_keys</span> <span class="o">=</span> <span class="n">all_arg_keys</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="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span> <span class="k">else</span> <span class="n">all_arg_keys</span>
+</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</span></a> <span class="n">num_non_var</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">non_var_len_arg_keys</span><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="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">non_var_len_arg_keys</span><span class="p">)}</span>
+</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</span></a> <span class="n">args_dict</span><span class="p">[</span><span class="n">all_arg_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">args</span><span class="p">[</span><span class="n">num_non_var</span><span class="p">:]</span>
+</span><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)}</span>
+</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a>
+</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">args_dict</span><span class="p">)</span>
+</span><span id="L-3433"><a href="#L-3433"><span class="linenos">3433</span></a>
+</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="k">def</span> <span class="nf">sql_names</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">Func</span><span class="p">:</span>
+</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
+</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
+</span><span id="L-3439"><a href="#L-3439"><span class="linenos">3439</span></a> <span class="p">)</span>
+</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</span></a> <span class="k">if</span> <span class="s2">&quot;_sql_names&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">:</span>
+</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">camel_to_snake_case</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)]</span>
+</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span>
</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</span></a>
-</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="k">class</span> <span class="nc">Collate</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="k">pass</span>
+</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a> <span class="k">def</span> <span class="nf">sql_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</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><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a><span class="k">class</span> <span class="nc">TryCast</span><span class="p">(</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="k">pass</span>
+</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="k">def</span> <span class="nf">default_parser_mappings</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()}</span>
</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a>
</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</span></a>
-</span><span id="L-3453"><a href="#L-3453"><span class="linenos">3453</span></a><span class="k">class</span> <span class="nc">Ceil</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CEIL&quot;</span><span class="p">,</span> <span class="s2">&quot;CEILING&quot;</span><span class="p">]</span>
+</span><span id="L-3453"><a href="#L-3453"><span class="linenos">3453</span></a><span class="k">class</span> <span class="nc">AggFunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</span></a> <span class="k">pass</span>
+</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</span></a>
</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><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a><span class="k">class</span> <span class="nc">Coalesce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</span></a>
-</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">class</span> <span class="nc">Concat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a>
-</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">class</span> <span class="nc">ConcatWs</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
-</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">]</span>
-</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a>
+</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a><span class="k">class</span> <span class="nc">Abs</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="k">pass</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><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</span></a><span class="k">class</span> <span class="nc">Anonymous</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3462"><a href="#L-3462"><span class="linenos">3462</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a><span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/hll</span>
+</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a><span class="c1"># https://docs.aws.amazon.com/redshift/latest/dg/r_HLL_function.html</span>
+</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a><span class="k">class</span> <span class="nc">Hll</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3471"><a href="#L-3471"><span class="linenos">3471</span></a>
-</span><span id="L-3472"><a href="#L-3472"><span class="linenos">3472</span></a><span class="k">class</span> <span class="nc">Count</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</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><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a>
+</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="k">class</span> <span class="nc">ApproxDistinct</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</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;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</span></a>
-</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a><span class="k">class</span> <span class="nc">CountIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</span></a> <span class="k">pass</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><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</span></a><span class="k">class</span> <span class="nc">CurrentDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</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><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a>
-</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a>
-</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a><span class="k">class</span> <span class="nc">CurrentDatetime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</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><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">class</span> <span class="nc">Array</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3478"><a href="#L-3478"><span class="linenos">3478</span></a> <span class="n">arg_types</span> <span class="o">=</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-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a><span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/to_char</span>
+</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a><span class="k">class</span> <span class="nc">ToChar</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a>
-</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a><span class="k">class</span> <span class="nc">CurrentTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</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><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a><span class="k">class</span> <span class="nc">GenerateSeries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a>
-</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a><span class="k">class</span> <span class="nc">CurrentTimestamp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</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><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a><span class="k">class</span> <span class="nc">ArrayAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a> <span class="k">pass</span>
+</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</span></a>
</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><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</span></a><span class="k">class</span> <span class="nc">CurrentUser</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</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><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a><span class="k">class</span> <span class="nc">ArrayAll</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</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><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</span></a>
</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><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a><span class="k">class</span> <span class="nc">DateAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</span></a><span class="k">class</span> <span class="nc">ArrayAny</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</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><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><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">class</span> <span class="nc">DateSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a><span class="k">class</span> <span class="nc">ArrayConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</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;expressions&quot;</span><span class="p">:</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="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</span></a>
</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">class</span> <span class="nc">DateDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">]</span>
-</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a><span class="k">class</span> <span class="nc">ArrayContains</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-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="k">pass</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><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a>
-</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a><span class="k">class</span> <span class="nc">DateTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">True</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;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a><span class="k">class</span> <span class="nc">ArrayContained</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="k">pass</span>
+</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a>
</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><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a><span class="k">class</span> <span class="nc">DatetimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a><span class="k">class</span> <span class="nc">ArrayFilter</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</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><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;FILTER&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY_FILTER&quot;</span><span class="p">]</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><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a><span class="k">class</span> <span class="nc">DatetimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a><span class="k">class</span> <span class="nc">ArrayJoin</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</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&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</span></a>
</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">class</span> <span class="nc">DatetimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a><span class="k">class</span> <span class="nc">ArraySize</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</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">False</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><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</span></a><span class="k">class</span> <span class="nc">DatetimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</span></a><span class="k">class</span> <span class="nc">ArraySort</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</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">False</span><span class="p">}</span>
</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a>
</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">class</span> <span class="nc">DayOfWeek</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_WEEK&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">]</span>
+</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a><span class="k">class</span> <span class="nc">ArraySum</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="k">pass</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><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a><span class="k">class</span> <span class="nc">DayOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_MONTH&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">]</span>
+</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a><span class="k">class</span> <span class="nc">ArrayUnionAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a> <span class="k">pass</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><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a><span class="k">class</span> <span class="nc">DayOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">]</span>
+</span><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a><span class="k">class</span> <span class="nc">Avg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a> <span class="k">pass</span>
</span><span id="L-3543"><a href="#L-3543"><span class="linenos">3543</span></a>
</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a>
-</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a><span class="k">class</span> <span class="nc">WeekOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;WEEK_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">]</span>
+</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a><span class="k">class</span> <span class="nc">AnyValue</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a> <span class="k">pass</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><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a><span class="k">class</span> <span class="nc">LastDateOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="k">pass</span>
+</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</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;ifs&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a>
-</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">class</span> <span class="nc">Extract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</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><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><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a><span class="k">class</span> <span class="nc">TimestampAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a>
-</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="k">class</span> <span class="nc">TimestampSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a><span class="k">class</span> <span class="nc">TimestampDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</span></a> <span class="k">def</span> <span class="nf">when</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">then</span><span class="p">:</span> <span class="n">ExpOrStr</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="n">Case</span><span class="p">:</span>
+</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3555"><a href="#L-3555"><span class="linenos">3555</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
+</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="n">If</span><span class="p">(</span>
+</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="n">this</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a> <span class="n">true</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">then</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</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 class="p">)</span>
+</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</span></a>
+</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</span></a> <span class="k">def</span> <span class="nf">else_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">:</span> <span class="n">ExpOrStr</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="n">Case</span><span class="p">:</span>
+</span><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">))</span>
+</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="k">return</span> <span class="n">instance</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><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a><span class="k">class</span> <span class="nc">TimestampTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a><span class="k">class</span> <span class="nc">Cast</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</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;to&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span><span id="L-3571"><a href="#L-3571"><span class="linenos">3571</span></a>
-</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="k">class</span> <span class="nc">TimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="nd">@property</span>
+</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</span></a> <span class="k">def</span> <span class="nf">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-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
</span><span id="L-3575"><a href="#L-3575"><span class="linenos">3575</span></a>
-</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">class</span> <span class="nc">TimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3576"><a href="#L-3576"><span class="linenos">3576</span></a> <span class="nd">@property</span>
+</span><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</span></a> <span class="k">def</span> <span class="nf">to</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a> <span class="k">return</span> <span class="bp">self</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-3579"><a href="#L-3579"><span class="linenos">3579</span></a>
-</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</span></a>
-</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</span></a><span class="k">class</span> <span class="nc">TimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</span></a> <span class="nd">@property</span>
+</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</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><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a>
-</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">class</span> <span class="nc">TimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
+</span><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span>
+</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</span></a>
</span><span id="L-3587"><a href="#L-3587"><span class="linenos">3587</span></a>
-</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a>
-</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a><span class="k">class</span> <span class="nc">DateFromParts</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEFROMPARTS&quot;</span><span class="p">]</span>
-</span><span id="L-3591"><a href="#L-3591"><span class="linenos">3591</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</span></a>
-</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">class</span> <span class="nc">DateStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</span></a> <span class="k">pass</span>
-</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></a>
-</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</span></a>
-</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a><span class="k">class</span> <span class="nc">DateToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a> <span class="k">pass</span>
+</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a><span class="k">class</span> <span class="nc">Collate</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="k">pass</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><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</span></a><span class="k">class</span> <span class="nc">TryCast</span><span class="p">(</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</span></a> <span class="k">pass</span>
+</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</span></a>
+</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">class</span> <span class="nc">Ceil</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CEIL&quot;</span><span class="p">,</span> <span class="s2">&quot;CEILING&quot;</span><span class="p">]</span>
+</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a>
</span><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a>
-</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a>
-</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a><span class="k">class</span> <span class="nc">DateToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a> <span class="k">pass</span>
+</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a><span class="k">class</span> <span class="nc">Coalesce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a>
</span><span id="L-3605"><a href="#L-3605"><span class="linenos">3605</span></a>
-</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a><span class="k">class</span> <span class="nc">Day</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a> <span class="k">pass</span>
-</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a>
+</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a><span class="k">class</span> <span class="nc">Concat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a>
-</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a><span class="k">class</span> <span class="nc">Decode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</span></a>
+</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">class</span> <span class="nc">ConcatWs</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
+</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CONCAT_WS&quot;</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">class</span> <span class="nc">DiToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="k">pass</span>
-</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a>
+</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a>
+</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a><span class="k">class</span> <span class="nc">Count</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</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><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">class</span> <span class="nc">Encode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a>
+</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</span></a>
+</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</span></a><span class="k">class</span> <span class="nc">CountIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="k">pass</span>
</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</span></a>
-</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a><span class="k">class</span> <span class="nc">Exp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="k">pass</span>
-</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a>
+</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a>
+</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a><span class="k">class</span> <span class="nc">CurrentDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</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><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">class</span> <span class="nc">Explode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a> <span class="k">pass</span>
-</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a>
+</span><span id="L-3626"><a href="#L-3626"><span class="linenos">3626</span></a>
+</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a><span class="k">class</span> <span class="nc">CurrentDatetime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</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><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</span></a>
-</span><span id="L-3630"><a href="#L-3630"><span class="linenos">3630</span></a><span class="k">class</span> <span class="nc">ExponentialTimeDecayedAvg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</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;time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;decay&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3632"><a href="#L-3632"><span class="linenos">3632</span></a>
+</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">class</span> <span class="nc">CurrentTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3632"><a href="#L-3632"><span class="linenos">3632</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><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">class</span> <span class="nc">Floor</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3635"><a href="#L-3635"><span class="linenos">3635</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</span></a>
+</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">class</span> <span class="nc">CurrentTimestamp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</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><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a>
-</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a><span class="k">class</span> <span class="nc">Greatest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3639"><a href="#L-3639"><span class="linenos">3639</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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">class</span> <span class="nc">CurrentUser</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</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><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</span></a>
</span><span id="L-3642"><a href="#L-3642"><span class="linenos">3642</span></a>
-</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a><span class="k">class</span> <span class="nc">GroupConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</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;separator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a><span class="k">class</span> <span class="nc">DateAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a><span class="k">class</span> <span class="nc">GroupUniqArray</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</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;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a><span class="k">class</span> <span class="nc">DateSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a><span class="k">class</span> <span class="nc">Hex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="k">pass</span>
-</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a>
+</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a><span class="k">class</span> <span class="nc">DateDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">]</span>
+</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a>
-</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</span></a><span class="k">class</span> <span class="nc">Histogram</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</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;bins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a>
+</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">class</span> <span class="nc">DateTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">True</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;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</span></a>
-</span><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</span></a><span class="k">class</span> <span class="nc">If</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</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><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</span></a>
+</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a><span class="k">class</span> <span class="nc">DatetimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3661"><a href="#L-3661"><span class="linenos">3661</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3662"><a href="#L-3662"><span class="linenos">3662</span></a>
-</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a><span class="k">class</span> <span class="nc">IfNull</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3664"><a href="#L-3664"><span class="linenos">3664</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">False</span><span class="p">}</span>
-</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IFNULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NVL&quot;</span><span class="p">]</span>
+</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a>
+</span><span id="L-3664"><a href="#L-3664"><span class="linenos">3664</span></a><span class="k">class</span> <span class="nc">DatetimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a><span class="k">class</span> <span class="nc">Initcap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="k">pass</span>
+</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a><span class="k">class</span> <span class="nc">DatetimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3672"><a href="#L-3672"><span class="linenos">3672</span></a><span class="k">class</span> <span class="nc">JSONKeyValue</span><span class="p">(</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">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><span id="L-3672"><a href="#L-3672"><span class="linenos">3672</span></a><span class="k">class</span> <span class="nc">DatetimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3674"><a href="#L-3674"><span class="linenos">3674</span></a>
</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">class</span> <span class="nc">JSONObject</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</span></a> <span class="s2">&quot;null_handling&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a> <span class="s2">&quot;unique_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a> <span class="s2">&quot;return_type&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3682"><a href="#L-3682"><span class="linenos">3682</span></a> <span class="s2">&quot;format_json&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a> <span class="s2">&quot;encoding&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="p">}</span>
-</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a>
+</span><span id="L-3676"><a href="#L-3676"><span class="linenos">3676</span></a><span class="k">class</span> <span class="nc">DayOfWeek</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_WEEK&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">]</span>
+</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</span></a>
+</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</span></a>
+</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a><span class="k">class</span> <span class="nc">DayOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_MONTH&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFMONTH&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><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a><span class="k">class</span> <span class="nc">DayOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">]</span>
</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a>
-</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a><span class="k">class</span> <span class="nc">JSONBContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_CONTAINS&quot;</span><span class="p">]</span>
-</span><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</span></a>
+</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a>
+</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a><span class="k">class</span> <span class="nc">WeekOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;WEEK_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">]</span>
</span><span id="L-3690"><a href="#L-3690"><span class="linenos">3690</span></a>
-</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</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-3692"><a href="#L-3692"><span class="linenos">3692</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-3693"><a href="#L-3693"><span class="linenos">3693</span></a>
+</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</span></a>
+</span><span id="L-3692"><a href="#L-3692"><span class="linenos">3692</span></a><span class="k">class</span> <span class="nc">LastDateOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a> <span class="k">pass</span>
</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</span></a>
-</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
-</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</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-3697"><a href="#L-3697"><span class="linenos">3697</span></a>
+</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</span></a>
+</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a><span class="k">class</span> <span class="nc">Extract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3697"><a href="#L-3697"><span class="linenos">3697</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><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</span></a>
-</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a><span class="k">class</span> <span class="nc">JSONBExtract</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
-</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT&quot;</span><span class="p">]</span>
-</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</span></a>
+</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">class</span> <span class="nc">TimestampAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3702"><a href="#L-3702"><span class="linenos">3702</span></a>
-</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a><span class="k">class</span> <span class="nc">JSONBExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
-</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT_SCALAR&quot;</span><span class="p">]</span>
-</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</span></a>
+</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a>
+</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a><span class="k">class</span> <span class="nc">TimestampSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</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">class</span> <span class="nc">JSONFormat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</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;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_FORMAT&quot;</span><span class="p">]</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="k">class</span> <span class="nc">TimestampDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a>
</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</span></a>
-</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a><span class="k">class</span> <span class="nc">Least</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <span class="n">arg_types</span> <span class="o">=</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-3714"><a href="#L-3714"><span class="linenos">3714</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a><span class="k">class</span> <span class="nc">TimestampTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a>
-</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</span></a><span class="k">class</span> <span class="nc">Length</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="k">pass</span>
+</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a><span class="k">class</span> <span class="nc">TimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a>
</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a>
-</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a>
-</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a><span class="k">class</span> <span class="nc">Levenshtein</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</span></a> <span class="s2">&quot;ins_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3726"><a href="#L-3726"><span class="linenos">3726</span></a> <span class="s2">&quot;del_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</span></a> <span class="s2">&quot;sub_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</span></a> <span class="p">}</span>
-</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</span></a>
+</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a><span class="k">class</span> <span class="nc">TimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a>
+</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a>
+</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a><span class="k">class</span> <span class="nc">TimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</span></a><span class="k">class</span> <span class="nc">TimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3730"><a href="#L-3730"><span class="linenos">3730</span></a>
-</span><span id="L-3731"><a href="#L-3731"><span class="linenos">3731</span></a><span class="k">class</span> <span class="nc">Ln</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a> <span class="k">pass</span>
-</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a>
-</span><span id="L-3734"><a href="#L-3734"><span class="linenos">3734</span></a>
-</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a><span class="k">class</span> <span class="nc">Log</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</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">False</span><span class="p">}</span>
-</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a>
-</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">class</span> <span class="nc">Log2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a> <span class="k">pass</span>
-</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</span></a>
-</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</span></a>
-</span><span id="L-3743"><a href="#L-3743"><span class="linenos">3743</span></a><span class="k">class</span> <span class="nc">Log10</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a> <span class="k">pass</span>
-</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a>
-</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</span></a>
-</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a><span class="k">class</span> <span class="nc">LogicalOr</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLOR_AGG&quot;</span><span class="p">]</span>
-</span><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</span></a>
-</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a>
-</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</span></a><span class="k">class</span> <span class="nc">LogicalAnd</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLAND_AGG&quot;</span><span class="p">]</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><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a><span class="k">class</span> <span class="nc">Lower</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOWER&quot;</span><span class="p">,</span> <span class="s2">&quot;LCASE&quot;</span><span class="p">]</span>
-</span><span id="L-3757"><a href="#L-3757"><span class="linenos">3757</span></a>
-</span><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a>
-</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</span></a><span class="k">class</span> <span class="nc">Map</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</span></a>
-</span><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</span></a>
-</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</span></a><span class="k">class</span> <span class="nc">StarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</span></a> <span class="k">pass</span>
-</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</span></a>
-</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">class</span> <span class="nc">VarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3768"><a href="#L-3768"><span class="linenos">3768</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3769"><a href="#L-3769"><span class="linenos">3769</span></a> <span class="n">is_var_len_args</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-3731"><a href="#L-3731"><span class="linenos">3731</span></a>
+</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a><span class="k">class</span> <span class="nc">DateFromParts</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEFROMPARTS&quot;</span><span class="p">]</span>
+</span><span id="L-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a>
+</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a>
+</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a><span class="k">class</span> <span class="nc">DateStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3738"><a href="#L-3738"><span class="linenos">3738</span></a> <span class="k">pass</span>
+</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</span></a>
+</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a>
+</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</span></a><span class="k">class</span> <span class="nc">DateToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</span></a> <span class="k">pass</span>
+</span><span id="L-3743"><a href="#L-3743"><span class="linenos">3743</span></a>
+</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a>
+</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a><span class="k">class</span> <span class="nc">DateToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</span></a> <span class="k">pass</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><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</span></a><span class="k">class</span> <span class="nc">Day</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="k">pass</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><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a><span class="k">class</span> <span class="nc">Decode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3754"><a href="#L-3754"><span class="linenos">3754</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a>
+</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">class</span> <span class="nc">DiToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="k">pass</span>
+</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</span></a>
+</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</span></a>
+</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</span></a><span class="k">class</span> <span class="nc">Encode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</span></a>
+</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">class</span> <span class="nc">Exp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</span></a> <span class="k">pass</span>
+</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</span></a>
+</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="k">class</span> <span class="nc">Explode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a> <span class="k">pass</span>
</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a>
-</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html</span>
-</span><span id="L-3773"><a href="#L-3773"><span class="linenos">3773</span></a><span class="k">class</span> <span class="nc">MatchAgainst</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;modifier&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a>
+</span><span id="L-3773"><a href="#L-3773"><span class="linenos">3773</span></a><span class="k">class</span> <span class="nc">ExponentialTimeDecayedAvg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</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;time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;decay&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</span></a>
</span><span id="L-3776"><a href="#L-3776"><span class="linenos">3776</span></a>
-</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a><span class="k">class</span> <span class="nc">Max</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a><span class="k">class</span> <span class="nc">Floor</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a>
</span><span id="L-3780"><a href="#L-3780"><span class="linenos">3780</span></a>
-</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a>
-</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a><span class="k">class</span> <span class="nc">MD5</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5&quot;</span><span class="p">]</span>
+</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a><span class="k">class</span> <span class="nc">Greatest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</span></a>
</span><span id="L-3785"><a href="#L-3785"><span class="linenos">3785</span></a>
-</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a><span class="k">class</span> <span class="nc">Min</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a><span class="k">class</span> <span class="nc">GroupConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</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;separator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</span></a>
</span><span id="L-3789"><a href="#L-3789"><span class="linenos">3789</span></a>
-</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">class</span> <span class="nc">Month</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a> <span class="k">pass</span>
+</span><span id="L-3790"><a href="#L-3790"><span class="linenos">3790</span></a><span class="k">class</span> <span class="nc">GroupUniqArray</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</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;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a>
</span><span id="L-3793"><a href="#L-3793"><span class="linenos">3793</span></a>
-</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a>
-</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a><span class="k">class</span> <span class="nc">Nvl2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a><span class="k">class</span> <span class="nc">Hex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a> <span class="k">pass</span>
+</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</span></a>
</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a>
-</span><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a>
-</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</span></a><span class="k">class</span> <span class="nc">Posexplode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a> <span class="k">pass</span>
+</span><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a><span class="k">class</span> <span class="nc">Histogram</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</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;bins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a>
</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</span></a>
-</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">class</span> <span class="nc">Pow</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-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;POWER&quot;</span><span class="p">,</span> <span class="s2">&quot;POW&quot;</span><span class="p">]</span>
+</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a><span class="k">class</span> <span class="nc">If</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a>
</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a>
-</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">class</span> <span class="nc">PercentileCont</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="k">pass</span>
+</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a><span class="k">class</span> <span class="nc">IfNull</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</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">False</span><span class="p">}</span>
+</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IFNULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NVL&quot;</span><span class="p">]</span>
</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a>
</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="k">class</span> <span class="nc">PercentileDisc</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a><span class="k">class</span> <span class="nc">Initcap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
</span><span id="L-3812"><a href="#L-3812"><span class="linenos">3812</span></a> <span class="k">pass</span>
</span><span id="L-3813"><a href="#L-3813"><span class="linenos">3813</span></a>
</span><span id="L-3814"><a href="#L-3814"><span class="linenos">3814</span></a>
-</span><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</span></a><span class="k">class</span> <span class="nc">Quantile</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</span></a><span class="k">class</span> <span class="nc">JSONKeyValue</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</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><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a>
</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="c1"># Clickhouse-specific:</span>
-</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference/quantiles/#quantiles</span>
-</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a><span class="k">class</span> <span class="nc">Quantiles</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
-</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a>
-</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a>
-</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a><span class="k">class</span> <span class="nc">QuantileIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
+</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a><span class="k">class</span> <span class="nc">JSONObject</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="s2">&quot;null_handling&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a> <span class="s2">&quot;unique_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="s2">&quot;return_type&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="s2">&quot;format_json&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a> <span class="s2">&quot;encoding&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a><span class="k">class</span> <span class="nc">ApproxQuantile</span><span class="p">(</span><span class="n">Quantile</span><span class="p">):</span>
-</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;weight&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a><span class="k">class</span> <span class="nc">JSONBContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_CONTAINS&quot;</span><span class="p">]</span>
</span><span id="L-3832"><a href="#L-3832"><span class="linenos">3832</span></a>
</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">class</span> <span class="nc">RangeN</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;each&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</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-3835"><a href="#L-3835"><span class="linenos">3835</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-3836"><a href="#L-3836"><span class="linenos">3836</span></a>
</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="k">class</span> <span class="nc">ReadCSV</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;READ_CSV&quot;</span><span class="p">]</span>
-</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a>
-</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a>
-</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a><span class="k">class</span> <span class="nc">Reduce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3845"><a href="#L-3845"><span class="linenos">3845</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;initial&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;merge&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;finish&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3846"><a href="#L-3846"><span class="linenos">3846</span></a>
-</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">class</span> <span class="nc">RegexpExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3849"><a href="#L-3849"><span class="linenos">3849</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a> <span class="s2">&quot;occurrence&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</span></a> <span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</span></a> <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><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</span></a><span class="k">class</span> <span class="nc">RegexpLike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3859"><a href="#L-3859"><span class="linenos">3859</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a><span class="k">class</span> <span class="nc">RegexpILike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a><span class="c1"># https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.split.html</span>
-</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a><span class="c1"># limit is the number of times a pattern is applied</span>
-</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a><span class="k">class</span> <span class="nc">RegexpSplit</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a>
-</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a>
-</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a><span class="k">class</span> <span class="nc">Repeat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</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;times&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a>
-</span><span id="L-3875"><a href="#L-3875"><span class="linenos">3875</span></a>
-</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a><span class="k">class</span> <span class="nc">Round</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a>
-</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">class</span> <span class="nc">RowNumber</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">arg_types</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><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><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a><span class="k">class</span> <span class="nc">SafeDivide</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</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><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><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a><span class="k">class</span> <span class="nc">SetAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="k">pass</span>
-</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a>
-</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a>
-</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a><span class="k">class</span> <span class="nc">SHA</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA&quot;</span><span class="p">,</span> <span class="s2">&quot;SHA1&quot;</span><span class="p">]</span>
-</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a>
-</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">class</span> <span class="nc">SHA2</span><span class="p">(</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="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA2&quot;</span><span class="p">]</span>
-</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</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;length&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a>
+</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
+</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</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-3840"><a href="#L-3840"><span class="linenos">3840</span></a>
+</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a>
+</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a><span class="k">class</span> <span class="nc">JSONBExtract</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
+</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT&quot;</span><span class="p">]</span>
+</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a>
+</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">class</span> <span class="nc">JSONBExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
+</span><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT_SCALAR&quot;</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><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a><span class="k">class</span> <span class="nc">JSONFormat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</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;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_FORMAT&quot;</span><span class="p">]</span>
+</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a>
+</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</span></a>
+</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</span></a><span class="k">class</span> <span class="nc">Least</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</span></a> <span class="n">arg_types</span> <span class="o">=</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-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</span></a>
+</span><span id="L-3859"><a href="#L-3859"><span class="linenos">3859</span></a>
+</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a><span class="k">class</span> <span class="nc">Length</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="k">pass</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><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a><span class="k">class</span> <span class="nc">Levenshtein</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a> <span class="s2">&quot;ins_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="s2">&quot;del_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="s2">&quot;sub_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a> <span class="p">}</span>
+</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a>
+</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">class</span> <span class="nc">Ln</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3875"><a href="#L-3875"><span class="linenos">3875</span></a> <span class="k">pass</span>
+</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a>
+</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a>
+</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a><span class="k">class</span> <span class="nc">Log</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</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">False</span><span class="p">}</span>
+</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a>
+</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a>
+</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a><span class="k">class</span> <span class="nc">Log2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="k">pass</span>
+</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a>
+</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a>
+</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a><span class="k">class</span> <span class="nc">Log10</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="k">pass</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><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a><span class="k">class</span> <span class="nc">LogicalOr</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLOR_AGG&quot;</span><span class="p">]</span>
+</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a>
+</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a>
+</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a><span class="k">class</span> <span class="nc">LogicalAnd</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLAND_AGG&quot;</span><span class="p">]</span>
+</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a>
+</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a>
+</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a><span class="k">class</span> <span class="nc">Lower</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOWER&quot;</span><span class="p">,</span> <span class="s2">&quot;LCASE&quot;</span><span class="p">]</span>
</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a>
-</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a><span class="k">class</span> <span class="nc">SortArray</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</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;asc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a>
+</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">class</span> <span class="nc">Map</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a>
-</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</span></a><span class="k">class</span> <span class="nc">Split</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a>
+</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</span></a>
+</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a><span class="k">class</span> <span class="nc">StarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="k">pass</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="c1"># Start may be omitted in the case of postgres</span>
-</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a><span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a><span class="k">class</span> <span class="nc">Substring</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</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;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a>
+</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a><span class="k">class</span> <span class="nc">VarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a><span class="k">class</span> <span class="nc">StrPosition</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="s2">&quot;substr&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a> <span class="s2">&quot;instance&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a> <span class="p">}</span>
-</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a>
+</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a><span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html</span>
+</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a><span class="k">class</span> <span class="nc">MatchAgainst</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;modifier&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a><span class="k">class</span> <span class="nc">Max</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a>
-</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a><span class="k">class</span> <span class="nc">StrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a>
+</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a>
+</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a><span class="k">class</span> <span class="nc">MD5</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5&quot;</span><span class="p">]</span>
</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a>
-</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a><span class="k">class</span> <span class="nc">StrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</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;format&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a><span class="c1"># Spark allows unix_timestamp()</span>
-</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a><span class="c1"># https://spark.apache.org/docs/3.1.3/api/python/reference/api/pyspark.sql.functions.unix_timestamp.html</span>
-</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a><span class="k">class</span> <span class="nc">StrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a>
+</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a><span class="k">class</span> <span class="nc">Min</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a><span class="k">class</span> <span class="nc">Month</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="k">pass</span>
</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a>
</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a>
-</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a><span class="k">class</span> <span class="nc">NumberToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a><span class="k">class</span> <span class="nc">Nvl2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a>
</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">class</span> <span class="nc">Struct</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a><span class="k">class</span> <span class="nc">Posexplode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="k">pass</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><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a>
-</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a><span class="k">class</span> <span class="nc">StructExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</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><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a><span class="k">class</span> <span class="nc">Pow</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-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;POWER&quot;</span><span class="p">,</span> <span class="s2">&quot;POW&quot;</span><span class="p">]</span>
+</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a>
</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><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</span></a><span class="k">class</span> <span class="nc">Sum</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</span></a> <span class="k">pass</span>
+</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a><span class="k">class</span> <span class="nc">PercentileCont</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</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">False</span><span class="p">}</span>
+</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</span></a>
</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</span></a>
-</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">class</span> <span class="nc">Sqrt</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="k">pass</span>
+</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a><span class="k">class</span> <span class="nc">PercentileDisc</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</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">False</span><span class="p">}</span>
+</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a>
</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><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a><span class="k">class</span> <span class="nc">Stddev</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a> <span class="k">pass</span>
+</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a><span class="k">class</span> <span class="nc">Quantile</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</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><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">class</span> <span class="nc">StddevPop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <span class="k">pass</span>
-</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a>
-</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</span></a>
-</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</span></a><span class="k">class</span> <span class="nc">StddevSamp</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="k">pass</span>
-</span><span id="L-3969"><a href="#L-3969"><span class="linenos">3969</span></a>
-</span><span id="L-3970"><a href="#L-3970"><span class="linenos">3970</span></a>
-</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</span></a><span class="k">class</span> <span class="nc">TimeToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</span></a>
-</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">class</span> <span class="nc">TimeToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="k">pass</span>
-</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a>
-</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="k">class</span> <span class="nc">TimeToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a> <span class="k">pass</span>
-</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</span></a>
-</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">class</span> <span class="nc">TimeStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</span></a> <span class="k">pass</span>
+</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a><span class="c1"># Clickhouse-specific:</span>
+</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a><span class="c1"># https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference/quantiles/#quantiles</span>
+</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a><span class="k">class</span> <span class="nc">Quantiles</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
+</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</span></a>
+</span><span id="L-3968"><a href="#L-3968"><span class="linenos">3968</span></a>
+</span><span id="L-3969"><a href="#L-3969"><span class="linenos">3969</span></a><span class="k">class</span> <span class="nc">QuantileIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-3970"><a href="#L-3970"><span class="linenos">3970</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
+</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</span></a>
+</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</span></a>
+</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</span></a><span class="k">class</span> <span class="nc">ApproxQuantile</span><span class="p">(</span><span class="n">Quantile</span><span class="p">):</span>
+</span><span id="L-3974"><a href="#L-3974"><span class="linenos">3974</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;weight&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a>
+</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a>
+</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a><span class="k">class</span> <span class="nc">RangeN</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;each&quot;</span><span class="p">:</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><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a>
+</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</span></a><span class="k">class</span> <span class="nc">ReadCSV</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;READ_CSV&quot;</span><span class="p">]</span>
+</span><span id="L-3983"><a href="#L-3983"><span class="linenos">3983</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a><span class="k">class</span> <span class="nc">TimeStrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="k">pass</span>
+</span><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a><span class="k">class</span> <span class="nc">Reduce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</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;initial&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;merge&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;finish&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a>
</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</span></a>
-</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a><span class="k">class</span> <span class="nc">TimeStrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a> <span class="k">pass</span>
-</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</span></a>
-</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a>
-</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a><span class="k">class</span> <span class="nc">Trim</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</span></a> <span class="s2">&quot;collation&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4001"><a href="#L-4001"><span class="linenos">4001</span></a> <span class="p">}</span>
-</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</span></a>
+</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a><span class="k">class</span> <span class="nc">RegexpExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a> <span class="s2">&quot;occurrence&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="p">}</span>
+</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a>
+</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">class</span> <span class="nc">RegexpLike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</span></a>
-</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a><span class="k">class</span> <span class="nc">TsOrDsAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</span></a>
+</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a>
+</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a><span class="k">class</span> <span class="nc">RegexpILike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span><span id="L-4007"><a href="#L-4007"><span class="linenos">4007</span></a>
-</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a><span class="k">class</span> <span class="nc">TsOrDsToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a> <span class="k">pass</span>
-</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a>
-</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">class</span> <span class="nc">TsOrDsToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a>
+</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a><span class="c1"># https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.split.html</span>
+</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a><span class="c1"># limit is the number of times a pattern is applied</span>
+</span><span id="L-4011"><a href="#L-4011"><span class="linenos">4011</span></a><span class="k">class</span> <span class="nc">RegexpSplit</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4012"><a href="#L-4012"><span class="linenos">4012</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a>
-</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a><span class="k">class</span> <span class="nc">TsOrDiToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a> <span class="k">pass</span>
+</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a><span class="k">class</span> <span class="nc">Repeat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</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;times&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a>
</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><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a><span class="k">class</span> <span class="nc">Unhex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="k">pass</span>
+</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a><span class="k">class</span> <span class="nc">Round</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a>
</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a>
-</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</span></a>
-</span><span id="L-4024"><a href="#L-4024"><span class="linenos">4024</span></a><span class="k">class</span> <span class="nc">UnixToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</span></a><span class="k">class</span> <span class="nc">RowNumber</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4024"><a href="#L-4024"><span class="linenos">4024</span></a> <span class="n">arg_types</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><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</span></a>
</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><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a><span class="c1"># https://prestodb.io/docs/current/functions/datetime.html</span>
-</span><span id="L-4029"><a href="#L-4029"><span class="linenos">4029</span></a><span class="c1"># presto has weird zone/hours/minutes</span>
-</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a><span class="k">class</span> <span class="nc">UnixToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</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;scale&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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">SECONDS</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;seconds&quot;</span><span class="p">)</span>
-</span><span id="L-4034"><a href="#L-4034"><span class="linenos">4034</span></a> <span class="n">MILLIS</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;millis&quot;</span><span class="p">)</span>
-</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a> <span class="n">MICROS</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;micros&quot;</span><span class="p">)</span>
-</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a>
+</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a><span class="k">class</span> <span class="nc">SafeDivide</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</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><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><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a><span class="k">class</span> <span class="nc">SetAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a> <span class="k">pass</span>
+</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</span></a>
+</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="k">class</span> <span class="nc">SHA</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA&quot;</span><span class="p">,</span> <span class="s2">&quot;SHA1&quot;</span><span class="p">]</span>
</span><span id="L-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">class</span> <span class="nc">UnixToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a> <span class="k">pass</span>
-</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a>
-</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a>
-</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a><span class="k">class</span> <span class="nc">Upper</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;UPPER&quot;</span><span class="p">,</span> <span class="s2">&quot;UCASE&quot;</span><span class="p">]</span>
-</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a>
-</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="k">class</span> <span class="nc">Variance</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE&quot;</span><span class="p">,</span> <span class="s2">&quot;VARIANCE_SAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">]</span>
-</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</span></a>
-</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</span></a>
-</span><span id="L-4050"><a href="#L-4050"><span class="linenos">4050</span></a><span class="k">class</span> <span class="nc">VariancePop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE_POP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_POP&quot;</span><span class="p">]</span>
-</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a>
-</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</span></a>
-</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a><span class="k">class</span> <span class="nc">Week</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</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;mode&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4038"><a href="#L-4038"><span class="linenos">4038</span></a>
+</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a><span class="k">class</span> <span class="nc">SHA2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA2&quot;</span><span class="p">]</span>
+</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</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;length&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a><span class="k">class</span> <span class="nc">SortArray</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4045"><a href="#L-4045"><span class="linenos">4045</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;asc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4046"><a href="#L-4046"><span class="linenos">4046</span></a>
+</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="k">class</span> <span class="nc">Split</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a><span class="c1"># Start may be omitted in the case of postgres</span>
+</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</span></a><span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
+</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a><span class="k">class</span> <span class="nc">Substring</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</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;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a><span class="k">class</span> <span class="nc">XMLTable</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</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;passing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;by_ref&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</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><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</span></a><span class="k">class</span> <span class="nc">Year</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4063"><a href="#L-4063"><span class="linenos">4063</span></a> <span class="k">pass</span>
-</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</span></a>
+</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a><span class="k">class</span> <span class="nc">StrPosition</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4060"><a href="#L-4060"><span class="linenos">4060</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a> <span class="s2">&quot;substr&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4063"><a href="#L-4063"><span class="linenos">4063</span></a> <span class="s2">&quot;instance&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</span></a> <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">class</span> <span class="nc">Use</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a>
+</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</span></a>
+</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</span></a><span class="k">class</span> <span class="nc">StrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span><span id="L-4069"><a href="#L-4069"><span class="linenos">4069</span></a>
-</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a><span class="k">class</span> <span class="nc">Merge</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4071"><a href="#L-4071"><span class="linenos">4071</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;using&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;on&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">True</span><span class="p">}</span>
-</span><span id="L-4072"><a href="#L-4072"><span class="linenos">4072</span></a>
+</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">class</span> <span class="nc">StrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4072"><a href="#L-4072"><span class="linenos">4072</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;format&quot;</span><span class="p">:</span> <span class="kc">True</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">class</span> <span class="nc">When</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;matched&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;condition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;then&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</span></a>
-</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">_norm_arg</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span>
-</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a> <span class="k">return</span> <span class="n">arg</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">str</span> <span class="k">else</span> <span class="n">arg</span>
+</span><span id="L-4074"><a href="#L-4074"><span class="linenos">4074</span></a>
+</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</span></a><span class="c1"># Spark allows unix_timestamp()</span>
+</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</span></a><span class="c1"># https://spark.apache.org/docs/3.1.3/api/python/reference/api/pyspark.sql.functions.unix_timestamp.html</span>
+</span><span id="L-4077"><a href="#L-4077"><span class="linenos">4077</span></a><span class="k">class</span> <span class="nc">StrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4078"><a href="#L-4078"><span class="linenos">4078</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a>
</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a>
-</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="n">ALL_FUNCTIONS</span> <span class="o">=</span> <span class="n">subclasses</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">Func</span><span class="p">,</span> <span class="p">(</span><span class="n">AggFunc</span><span class="p">,</span> <span class="n">Anonymous</span><span class="p">,</span> <span class="n">Func</span><span class="p">))</span>
+</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</span></a><span class="k">class</span> <span class="nc">NumberToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4082"><a href="#L-4082"><span class="linenos">4082</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span><span id="L-4083"><a href="#L-4083"><span class="linenos">4083</span></a>
</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="c1"># Helpers</span>
-</span><span id="L-4086"><a href="#L-4086"><span class="linenos">4086</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4088"><a href="#L-4088"><span class="linenos">4088</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a> <span class="n">into</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-4091"><a href="#L-4091"><span class="linenos">4091</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-4092"><a href="#L-4092"><span class="linenos">4092</span></a> <span class="n">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><span id="L-4093"><a href="#L-4093"><span class="linenos">4093</span></a> <span class="n">copy</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-4094"><a href="#L-4094"><span class="linenos">4094</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-4096"><a href="#L-4096"><span class="linenos">4096</span></a> <span class="o">...</span>
+</span><span id="L-4085"><a href="#L-4085"><span class="linenos">4085</span></a><span class="k">class</span> <span class="nc">Struct</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4086"><a href="#L-4086"><span class="linenos">4086</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</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><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a><span class="k">class</span> <span class="nc">StructExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4091"><a href="#L-4091"><span class="linenos">4091</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><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><span id="L-4094"><a href="#L-4094"><span class="linenos">4094</span></a><span class="k">class</span> <span class="nc">Sum</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</span></a> <span class="k">pass</span>
+</span><span id="L-4096"><a href="#L-4096"><span class="linenos">4096</span></a>
</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><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">E</span><span class="p">,</span>
-</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</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-4105"><a href="#L-4105"><span class="linenos">4105</span></a> <span class="n">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><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</span></a> <span class="n">copy</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-4107"><a href="#L-4107"><span class="linenos">4107</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="L-4109"><a href="#L-4109"><span class="linenos">4109</span></a> <span class="o">...</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><span id="L-4112"><a href="#L-4112"><span class="linenos">4112</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4116"><a href="#L-4116"><span class="linenos">4116</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-4117"><a href="#L-4117"><span class="linenos">4117</span></a> <span class="n">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><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</span></a> <span class="n">copy</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-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Gracefully handle a possible string or expression.</span>
-</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a>
-</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</span></a><span class="sd"> Example:</span>
-</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
-</span><span id="L-4125"><a href="#L-4125"><span class="linenos">4125</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
-</span><span id="L-4126"><a href="#L-4126"><span class="linenos">4126</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
-</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</span>
+</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a><span class="k">class</span> <span class="nc">Sqrt</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a> <span class="k">pass</span>
+</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a>
+</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">class</span> <span class="nc">Stddev</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a> <span class="k">pass</span>
+</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a>
+</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">class</span> <span class="nc">StddevPop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</span></a> <span class="k">pass</span>
+</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a>
+</span><span id="L-4109"><a href="#L-4109"><span class="linenos">4109</span></a>
+</span><span id="L-4110"><a href="#L-4110"><span class="linenos">4110</span></a><span class="k">class</span> <span class="nc">StddevSamp</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</span></a> <span class="k">pass</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><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a><span class="k">class</span> <span class="nc">TimeToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="L-4116"><a href="#L-4116"><span class="linenos">4116</span></a>
+</span><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</span></a>
+</span><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</span></a><span class="k">class</span> <span class="nc">TimeToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="k">pass</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><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a><span class="k">class</span> <span class="nc">TimeToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</span></a> <span class="k">pass</span>
+</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a>
+</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="k">class</span> <span class="nc">TimeStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</span></a> <span class="k">pass</span>
</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</span></a>
-</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</span></a><span class="sd"> Args:</span>
-</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a><span class="sd"> sql_or_expression: the SQL code string or an expression</span>
-</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
-</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
-</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
-</span><span id="L-4135"><a href="#L-4135"><span class="linenos">4135</span></a><span class="sd"> (automatically includes a space)</span>
-</span><span id="L-4136"><a href="#L-4136"><span class="linenos">4136</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a><span class="sd"> that an input expression is a SQL string).</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="sd"> Returns:</span>
-</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</span></a><span class="sd"> Expression: the parsed or given expression.</span>
-</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span><span class="o">.</span><span class="n">copy</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="n">sql_or_expression</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="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</span></a>
+</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a><span class="k">class</span> <span class="nc">TimeStrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</span></a> <span class="k">pass</span>
+</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</span></a>
+</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</span></a>
+</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a><span class="k">class</span> <span class="nc">TimeStrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="k">pass</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><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a><span class="k">class</span> <span class="nc">Trim</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4139"><a href="#L-4139"><span class="linenos">4139</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-4140"><a href="#L-4140"><span class="linenos">4140</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</span></a> <span class="s2">&quot;collation&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a> <span class="p">}</span>
+</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a>
+</span><span id="L-4146"><a href="#L-4146"><span class="linenos">4146</span></a>
+</span><span id="L-4147"><a href="#L-4147"><span class="linenos">4147</span></a><span class="k">class</span> <span class="nc">TsOrDsAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</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="n">sql</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">)</span>
-</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
-</span><span id="L-4152"><a href="#L-4152"><span class="linenos">4152</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">prefix</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><span id="L-4153"><a href="#L-4153"><span class="linenos">4153</span></a> <span class="k">return</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</span></a>
+</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</span></a><span class="k">class</span> <span class="nc">TsOrDsToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4152"><a href="#L-4152"><span class="linenos">4152</span></a> <span class="k">pass</span>
+</span><span id="L-4153"><a href="#L-4153"><span class="linenos">4153</span></a>
</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><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</span></a><span class="k">def</span> <span class="nf">_maybe_copy</span><span class="p">(</span><span class="n">instance</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-4157"><a href="#L-4157"><span class="linenos">4157</span></a> <span class="k">return</span> <span class="n">instance</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="n">instance</span>
+</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a><span class="k">class</span> <span class="nc">TsOrDsToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</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;format&quot;</span><span class="p">:</span> <span class="kc">False</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><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">def</span> <span class="nf">_is_wrong_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="p">):</span>
-</span><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Expression</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">into</span><span class="p">)</span>
+</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a><span class="k">class</span> <span class="nc">TsOrDiToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a> <span class="k">pass</span>
+</span><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a>
</span><span id="L-4162"><a href="#L-4162"><span class="linenos">4162</span></a>
-</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a>
-</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</span></a><span class="k">def</span> <span class="nf">_apply_builder</span><span class="p">(</span>
-</span><span id="L-4165"><a href="#L-4165"><span class="linenos">4165</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4170"><a href="#L-4170"><span class="linenos">4170</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4171"><a href="#L-4171"><span class="linenos">4171</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a> <span class="o">**</span><span class="n">opts</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 class="k">if</span> <span class="n">_is_wrong_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="p">):</span>
-</span><span id="L-4175"><a href="#L-4175"><span class="linenos">4175</span></a> <span class="n">expression</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="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">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="n">sql_or_expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-4180"><a href="#L-4180"><span class="linenos">4180</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
-</span><span id="L-4181"><a href="#L-4181"><span class="linenos">4181</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4183"><a href="#L-4183"><span class="linenos">4183</span></a> <span class="p">)</span>
-</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a> <span class="n">instance</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">expression</span><span class="p">)</span>
-</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a> <span class="k">return</span> <span class="n">instance</span>
-</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a>
+</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a><span class="k">class</span> <span class="nc">Unhex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</span></a> <span class="k">pass</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><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a><span class="k">class</span> <span class="nc">UnixToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</span></a>
+</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="c1"># https://prestodb.io/docs/current/functions/datetime.html</span>
+</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a><span class="c1"># presto has weird zone/hours/minutes</span>
+</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a><span class="k">class</span> <span class="nc">UnixToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</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;scale&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4175"><a href="#L-4175"><span class="linenos">4175</span></a>
+</span><span id="L-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="n">SECONDS</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;seconds&quot;</span><span class="p">)</span>
+</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="n">MILLIS</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;millis&quot;</span><span class="p">)</span>
+</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="n">MICROS</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;micros&quot;</span><span class="p">)</span>
+</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</span></a>
+</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">class</span> <span class="nc">UnixToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</span></a> <span class="k">pass</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><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a><span class="k">class</span> <span class="nc">Upper</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;UPPER&quot;</span><span class="p">,</span> <span class="s2">&quot;UCASE&quot;</span><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">def</span> <span class="nf">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4193"><a href="#L-4193"><span class="linenos">4193</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4196"><a href="#L-4196"><span class="linenos">4196</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a><span class="p">):</span>
-</span><span id="L-4200"><a href="#L-4200"><span class="linenos">4200</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="L-4201"><a href="#L-4201"><span class="linenos">4201</span></a> <span class="n">parsed</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-4203"><a href="#L-4203"><span class="linenos">4203</span></a> <span class="k">if</span> <span class="n">_is_wrong_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="p">):</span>
-</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">into</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="p">])</span>
-</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4207"><a href="#L-4207"><span class="linenos">4207</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
-</span><span id="L-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</span></a> <span class="p">)</span>
-</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="n">parsed</span><span class="o">.</span><span class="n">extend</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-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="n">existing</span> <span class="o">=</span> <span class="n">instance</span><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-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="k">if</span> <span class="n">append</span> <span class="ow">and</span> <span class="n">existing</span><span class="p">:</span>
-</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a> <span class="n">parsed</span> <span class="o">=</span> <span class="n">existing</span><span class="o">.</span><span class="n">expressions</span> <span class="o">+</span> <span class="n">parsed</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="n">child</span> <span class="o">=</span> <span class="n">into</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">parsed</span><span class="p">)</span>
-</span><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</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="p">(</span><span class="n">properties</span> <span class="ow">or</span> <span class="p">{})</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</span></a> <span class="n">child</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
-</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a> <span class="n">instance</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">child</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="n">instance</span>
-</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a>
-</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">_apply_list_builder</span><span class="p">(</span>
-</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4229"><a href="#L-4229"><span class="linenos">4229</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</span></a> <span class="o">**</span><span class="n">opts</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><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</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="n">expressions</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="n">sql_or_expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
-</span><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="p">)</span>
-</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span>
-</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</span></a> <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="n">existing_expressions</span> <span class="o">=</span> <span class="n">inst</span><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-4250"><a href="#L-4250"><span class="linenos">4250</span></a> <span class="k">if</span> <span class="n">append</span> <span class="ow">and</span> <span class="n">existing_expressions</span><span class="p">:</span>
-</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">existing_expressions</span> <span class="o">+</span> <span class="n">expressions</span>
-</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a>
-</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="n">inst</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">expressions</span><span class="p">)</span>
-</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="k">return</span> <span class="n">inst</span>
-</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a>
-</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">def</span> <span class="nf">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a> <span class="n">instance</span><span class="p">,</span>
-</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a> <span class="n">arg</span><span class="p">,</span>
-</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a><span class="p">):</span>
-</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span> <span class="k">for</span> <span class="n">exp</span> <span class="ow">in</span> <span class="n">expressions</span> <span class="k">if</span> <span class="n">exp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">exp</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">]</span>
-</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</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-4269"><a href="#L-4269"><span class="linenos">4269</span></a> <span class="k">return</span> <span class="n">instance</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="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</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="n">existing</span> <span class="o">=</span> <span class="n">inst</span><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-4274"><a href="#L-4274"><span class="linenos">4274</span></a> <span class="k">if</span> <span class="n">append</span> <span class="ow">and</span> <span class="n">existing</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">existing</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="n">existing</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">expressions</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="n">node</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</span></a>
-</span><span id="L-4279"><a href="#L-4279"><span class="linenos">4279</span></a> <span class="n">inst</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">into</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="n">node</span><span class="p">)</span>
-</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a> <span class="k">return</span> <span class="n">inst</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><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</span></a><span class="k">def</span> <span class="nf">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">operator</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">condition</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="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">]</span>
-</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a> <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-4286"><a href="#L-4286"><span class="linenos">4286</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_wrap_operator</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">operator</span><span 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">_wrap_operator</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
-</span><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a>
-</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a>
-</span><span id="L-4293"><a href="#L-4293"><span class="linenos">4293</span></a><span class="k">def</span> <span class="nf">_wrap_operator</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</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">And</span><span class="p">,</span> <span class="n">Or</span><span class="p">,</span> <span class="n">Not</span><span class="p">)):</span>
-</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</span></a> <span class="n">expression</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="n">expression</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="n">expression</span>
-</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</span></a>
+</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</span></a>
+</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a><span class="k">class</span> <span class="nc">Variance</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE&quot;</span><span class="p">,</span> <span class="s2">&quot;VARIANCE_SAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">]</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><span id="L-4193"><a href="#L-4193"><span class="linenos">4193</span></a><span class="k">class</span> <span class="nc">VariancePop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="L-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE_POP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_POP&quot;</span><span class="p">]</span>
+</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</span></a>
+</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">class</span> <span class="nc">Week</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</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;mode&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a>
+</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">class</span> <span class="nc">XMLTable</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</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;passing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;by_ref&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</span></a><span class="k">class</span> <span class="nc">Year</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</span></a> <span class="k">pass</span>
+</span><span id="L-4207"><a href="#L-4207"><span class="linenos">4207</span></a>
+</span><span id="L-4208"><a href="#L-4208"><span class="linenos">4208</span></a>
+</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a><span class="k">class</span> <span class="nc">Use</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</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><span id="L-4213"><a href="#L-4213"><span class="linenos">4213</span></a><span class="k">class</span> <span class="nc">Merge</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</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;using&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;on&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">True</span><span class="p">}</span>
+</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a>
+</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">class</span> <span class="nc">When</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;matched&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;condition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;then&quot;</span><span class="p">:</span> <span class="kc">True</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><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a><span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljnextvaluefor.html</span>
+</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a><span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a><span class="k">class</span> <span class="nc">NextValueFor</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</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;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a>
+</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a>
+</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a><span class="k">def</span> <span class="nf">_norm_arg</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span>
+</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</span></a> <span class="k">return</span> <span class="n">arg</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">str</span> <span class="k">else</span> <span class="n">arg</span>
+</span><span id="L-4229"><a href="#L-4229"><span class="linenos">4229</span></a>
+</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="n">ALL_FUNCTIONS</span> <span class="o">=</span> <span class="n">subclasses</span><span class="p">(</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">Func</span><span class="p">,</span> <span class="p">(</span><span class="n">AggFunc</span><span class="p">,</span> <span class="n">Anonymous</span><span class="p">,</span> <span class="n">Func</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><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</span></a><span class="c1"># Helpers</span>
+</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4237"><a href="#L-4237"><span class="linenos">4237</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="n">into</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-4240"><a href="#L-4240"><span class="linenos">4240</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-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="n">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><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</span></a> <span class="n">copy</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-4243"><a href="#L-4243"><span class="linenos">4243</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="o">...</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><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4250"><a href="#L-4250"><span class="linenos">4250</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">E</span><span class="p">,</span>
+</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</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-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="n">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><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a> <span class="n">copy</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-4256"><a href="#L-4256"><span class="linenos">4256</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="o">...</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><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4265"><a href="#L-4265"><span class="linenos">4265</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-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="n">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><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="n">copy</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-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Gracefully handle a possible string or expression.</span>
+</span><span id="L-4271"><a href="#L-4271"><span class="linenos">4271</span></a>
+</span><span id="L-4272"><a href="#L-4272"><span class="linenos">4272</span></a><span class="sd"> Example:</span>
+</span><span id="L-4273"><a href="#L-4273"><span class="linenos">4273</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
+</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
+</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
+</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</span>
+</span><span id="L-4277"><a href="#L-4277"><span class="linenos">4277</span></a>
+</span><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</span></a><span class="sd"> Args:</span>
+</span><span id="L-4279"><a href="#L-4279"><span class="linenos">4279</span></a><span class="sd"> sql_or_expression: the SQL code string or an expression</span>
+</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
+</span><span id="L-4281"><a href="#L-4281"><span class="linenos">4281</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
+</span><span id="L-4282"><a href="#L-4282"><span class="linenos">4282</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
+</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a><span class="sd"> (automatically includes a space)</span>
+</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="L-4286"><a href="#L-4286"><span class="linenos">4286</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</span></a>
+</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a><span class="sd"> Expression: the parsed or given expression.</span>
+</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">,</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="n">copy</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="n">sql_or_expression</span><span class="o">.</span><span class="n">copy</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="n">sql_or_expression</span>
+</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</span></a>
+</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
</span><span id="L-4298"><a href="#L-4298"><span class="linenos">4298</span></a>
-</span><span id="L-4299"><a href="#L-4299"><span class="linenos">4299</span></a><span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</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="sd"> Example:</span>
-</span><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</span></a><span class="sd"> &gt;&gt;&gt; union(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</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="sd"> Args:</span>
-</span><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
-</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
-</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-4312"><a href="#L-4312"><span class="linenos">4312</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a><span class="sd"> Union: the syntax tree for the UNION expression.</span>
-</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a>
-</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</span></a> <span class="k">return</span> <span class="n">Union</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</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><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</span>
-</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a>
-</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</span></a><span class="sd"> Example:</span>
-</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</span></a><span class="sd"> &gt;&gt;&gt; intersect(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</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="sd"> Args:</span>
-</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
-</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
-</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a><span class="sd"> Intersect: the syntax tree for the INTERSECT expression.</span>
-</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4343"><a href="#L-4343"><span class="linenos">4343</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</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">return</span> <span class="n">Intersect</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
-</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</span></a>
-</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</span></a>
-</span><span id="L-4349"><a href="#L-4349"><span class="linenos">4349</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</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="sd"> Example:</span>
-</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a><span class="sd"> &gt;&gt;&gt; except_(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
-</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a>
-</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</span></a><span class="sd"> Args:</span>
-</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
-</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
-</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="L-4362"><a href="#L-4362"><span class="linenos">4362</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a><span class="sd"> Except: the syntax tree for the EXCEPT statement.</span>
-</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</span></a>
-</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="k">return</span> <span class="n">Except</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
+</span><span id="L-4299"><a href="#L-4299"><span class="linenos">4299</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">)</span>
+</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
+</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</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">prefix</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><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a> <span class="k">return</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</span></a>
+</span><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</span></a>
+</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</span></a><span class="k">def</span> <span class="nf">_maybe_copy</span><span class="p">(</span><span class="n">instance</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-4306"><a href="#L-4306"><span class="linenos">4306</span></a> <span class="k">return</span> <span class="n">instance</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="n">instance</span>
+</span><span id="L-4307"><a href="#L-4307"><span class="linenos">4307</span></a>
+</span><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</span></a>
+</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</span></a><span class="k">def</span> <span class="nf">_is_wrong_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="p">):</span>
+</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Expression</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">into</span><span class="p">)</span>
+</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</span></a>
+</span><span id="L-4312"><a href="#L-4312"><span class="linenos">4312</span></a>
+</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a><span class="k">def</span> <span class="nf">_apply_builder</span><span class="p">(</span>
+</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4322"><a href="#L-4322"><span class="linenos">4322</span></a><span class="p">):</span>
+</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</span></a> <span class="k">if</span> <span class="n">_is_wrong_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="p">):</span>
+</span><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</span></a> <span class="n">expression</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="n">expression</span><span class="p">)</span>
+</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a> <span class="n">sql_or_expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
+</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a> <span class="p">)</span>
+</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a> <span class="n">instance</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">expression</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="n">instance</span>
+</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</span></a>
+</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a>
+</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a><span class="k">def</span> <span class="nf">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a> <span class="n">copy</span><span class="o">=</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="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4346"><a href="#L-4346"><span class="linenos">4346</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</span></a><span class="p">):</span>
+</span><span id="L-4349"><a href="#L-4349"><span class="linenos">4349</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a> <span class="n">parsed</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</span></a> <span class="k">if</span> <span class="n">_is_wrong_expression</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="p">):</span>
+</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">into</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="p">])</span>
+</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
+</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="p">)</span>
+</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</span></a> <span class="n">parsed</span><span class="o">.</span><span class="n">extend</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-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">existing</span> <span class="o">=</span> <span class="n">instance</span><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-4364"><a href="#L-4364"><span class="linenos">4364</span></a> <span class="k">if</span> <span class="n">append</span> <span class="ow">and</span> <span class="n">existing</span><span class="p">:</span>
+</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a> <span class="n">parsed</span> <span class="o">=</span> <span class="n">existing</span><span class="o">.</span><span class="n">expressions</span> <span class="o">+</span> <span class="n">parsed</span>
+</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a>
+</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="n">child</span> <span class="o">=</span> <span class="n">into</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">parsed</span><span class="p">)</span>
+</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</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="p">(</span><span class="n">properties</span> <span class="ow">or</span> <span class="p">{})</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a> <span class="n">child</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
+</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="n">instance</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">child</span><span class="p">)</span>
+</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="k">return</span> <span class="n">instance</span>
</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</span></a>
</span><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</span></a>
-</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</span></a><span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</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">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
-</span><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</span></a>
-</span><span id="L-4378"><a href="#L-4378"><span class="linenos">4378</span></a><span class="sd"> Example:</span>
-</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;col1&quot;, &quot;col2&quot;).from_(&quot;tbl&quot;).sql()</span>
-</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a>
-</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</span></a><span class="sd"> Args:</span>
-</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
-</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
-</span><span id="L-4386"><a href="#L-4386"><span class="linenos">4386</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a><span class="sd"> that an input expression is a SQL string).</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="sd"> Returns:</span>
-</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a>
-</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="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">Select</span><span class="p">:</span>
-</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</span>
-</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</span></a>
-</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a><span class="sd"> Example:</span>
-</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a><span class="sd"> &gt;&gt;&gt; from_(&quot;tbl&quot;).select(&quot;col1&quot;, &quot;col2&quot;).sql()</span>
-</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a>
-</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a><span class="sd"> Args:</span>
-</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a><span class="sd"> *expressions (str | Expression): the SQL code string to parse as the FROM expressions of a</span>
-</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
-</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-4409"><a href="#L-4409"><span class="linenos">4409</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</span></a><span class="sd"> that the input expression is a SQL string).</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="sd"> Returns:</span>
-</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><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><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
-</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span>
-</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
-</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4422"><a href="#L-4422"><span class="linenos">4422</span></a> <span class="n">from_</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</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-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
-</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</span></a><span class="sd"> Creates an update statement.</span>
-</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a>
-</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a><span class="sd"> Example:</span>
-</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a><span class="sd"> &gt;&gt;&gt; update(&quot;my_table&quot;, {&quot;x&quot;: 1, &quot;y&quot;: &quot;2&quot;, &quot;z&quot;: None}, from_=&quot;baz&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
-</span><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</span></a><span class="sd"> &quot;UPDATE my_table SET x = 1, y = &#39;2&#39;, z = NULL FROM baz WHERE id &gt; 1&quot;</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="sd"> Args:</span>
-</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
-</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
-</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
-</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a>
-</span><span id="L-4441"><a href="#L-4441"><span class="linenos">4441</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
-</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a> <span class="n">update_expr</span> <span class="o">=</span> <span class="n">Update</span><span class="p">(</span><span class="n">this</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">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><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</span></a> <span class="p">[</span>
-</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a> <span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">k</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="o">**</span><span class="n">opts</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">v</span><span class="p">))</span>
-</span><span id="L-4449"><a href="#L-4449"><span class="linenos">4449</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">properties</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</span></a> <span class="p">],</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 class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-4454"><a href="#L-4454"><span class="linenos">4454</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">From</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">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
-</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a> <span class="p">)</span>
-</span><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">Where</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">where</span><span class="p">)</span>
-</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Where</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">prefix</span><span class="o">=</span><span class="s2">&quot;WHERE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
-</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a> <span class="p">)</span>
-</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a> <span class="k">return</span> <span class="n">update_expr</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><span id="L-4467"><a href="#L-4467"><span class="linenos">4467</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4470"><a href="#L-4470"><span class="linenos">4470</span></a> <span class="n">returning</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4471"><a href="#L-4471"><span class="linenos">4471</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-4472"><a href="#L-4472"><span class="linenos">4472</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a><span class="sd"> Builds a delete statement.</span>
-</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</span></a>
-</span><span id="L-4477"><a href="#L-4477"><span class="linenos">4477</span></a><span class="sd"> Example:</span>
-</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;my_table&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
-</span><span id="L-4479"><a href="#L-4479"><span class="linenos">4479</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</span>
-</span><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</span></a>
-</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</span></a><span class="sd"> Args:</span>
-</span><span id="L-4482"><a href="#L-4482"><span class="linenos">4482</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="L-4483"><a href="#L-4483"><span class="linenos">4483</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
-</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
-</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">Delete</span><span class="p">()</span><span class="o">.</span><span class="n">delete</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">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><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="L-4492"><a href="#L-4492"><span class="linenos">4492</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">where</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
-</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">returning</span><span class="p">(</span><span class="n">returning</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
+</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</span></a><span class="k">def</span> <span class="nf">_apply_list_builder</span><span class="p">(</span>
+</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-4378"><a href="#L-4378"><span class="linenos">4378</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="n">prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a><span class="p">):</span>
+</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</span></a> <span class="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-4386"><a href="#L-4386"><span class="linenos">4386</span></a>
+</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</span></a> <span class="n">sql_or_expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-4390"><a href="#L-4390"><span class="linenos">4390</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
+</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a> <span class="p">)</span>
+</span><span id="L-4395"><a href="#L-4395"><span class="linenos">4395</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span>
+</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a> <span class="p">]</span>
+</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a>
+</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a> <span class="n">existing_expressions</span> <span class="o">=</span> <span class="n">inst</span><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-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="k">if</span> <span class="n">append</span> <span class="ow">and</span> <span class="n">existing_expressions</span><span class="p">:</span>
+</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">existing_expressions</span> <span class="o">+</span> <span class="n">expressions</span>
+</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a>
+</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <span class="n">inst</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">expressions</span><span class="p">)</span>
+</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a>
+</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">def</span> <span class="nf">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a> <span class="n">instance</span><span class="p">,</span>
+</span><span id="L-4409"><a href="#L-4409"><span class="linenos">4409</span></a> <span class="n">arg</span><span class="p">,</span>
+</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</span></a> <span class="n">into</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">opts</span><span class="p">,</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 class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span> <span class="k">for</span> <span class="n">exp</span> <span class="ow">in</span> <span class="n">expressions</span> <span class="k">if</span> <span class="n">exp</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">exp</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">]</span>
+</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</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-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="k">return</span> <span class="n">instance</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="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</span></a>
+</span><span id="L-4422"><a href="#L-4422"><span class="linenos">4422</span></a> <span class="n">existing</span> <span class="o">=</span> <span class="n">inst</span><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-4423"><a href="#L-4423"><span class="linenos">4423</span></a> <span class="k">if</span> <span class="n">append</span> <span class="ow">and</span> <span class="n">existing</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">existing</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="n">existing</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a>
+</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</span></a>
+</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="n">inst</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">into</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">node</span><span class="p">)</span> <span class="k">if</span> <span class="n">into</span> <span class="k">else</span> <span class="n">node</span><span class="p">)</span>
+</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a>
+</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">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">operator</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a> <span class="n">condition</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="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span>
+</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a> <span class="p">]</span>
+</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <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-4437"><a href="#L-4437"><span class="linenos">4437</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_wrap</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">Connector</span><span class="p">)</span>
+</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">operator</span><span 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">_wrap</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Connector</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="n">this</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><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a><span class="k">def</span> <span class="nf">_wrap</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">kind</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">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span> <span class="o">|</span> <span class="n">Paren</span><span class="p">:</span>
+</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</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">kind</span><span class="p">):</span>
+</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a> <span class="k">return</span> <span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</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="n">expression</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><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</span></a><span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</span>
+</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</span></a>
+</span><span id="L-4454"><a href="#L-4454"><span class="linenos">4454</span></a><span class="sd"> Example:</span>
+</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</span></a><span class="sd"> &gt;&gt;&gt; union(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
+</span><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</span></a>
+</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a><span class="sd"> Args:</span>
+</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
+</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
+</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-4466"><a href="#L-4466"><span class="linenos">4466</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4467"><a href="#L-4467"><span class="linenos">4467</span></a><span class="sd"> Union: the syntax tree for the UNION expression.</span>
+</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4470"><a href="#L-4470"><span class="linenos">4470</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4471"><a href="#L-4471"><span class="linenos">4471</span></a>
+</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</span></a> <span class="k">return</span> <span class="n">Union</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><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><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4477"><a href="#L-4477"><span class="linenos">4477</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</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="sd"> Example:</span>
+</span><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</span></a><span class="sd"> &gt;&gt;&gt; intersect(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</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="sd"> Args:</span>
+</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
+</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
+</span><span id="L-4487"><a href="#L-4487"><span class="linenos">4487</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4492"><a href="#L-4492"><span class="linenos">4492</span></a><span class="sd"> Intersect: the syntax tree for the INTERSECT expression.</span>
+</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</span></a>
-</span><span id="L-4497"><a href="#L-4497"><span class="linenos">4497</span></a>
-</span><span id="L-4498"><a href="#L-4498"><span class="linenos">4498</span></a><span class="k">def</span> <span class="nf">condition</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="kc">None</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">Condition</span><span class="p">:</span>
-</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a><span class="sd"> Initialize a logical condition expression.</span>
-</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a>
-</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</span></a><span class="sd"> Example:</span>
-</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
-</span><span id="L-4504"><a href="#L-4504"><span class="linenos">4504</span></a><span class="sd"> &#39;x = 1&#39;</span>
-</span><span id="L-4505"><a href="#L-4505"><span class="linenos">4505</span></a>
-</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a><span class="sd"> This is helpful for composing larger logical syntax trees:</span>
-</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
-</span><span id="L-4508"><a href="#L-4508"><span class="linenos">4508</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
-</span><span id="L-4509"><a href="#L-4509"><span class="linenos">4509</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
-</span><span id="L-4510"><a href="#L-4510"><span class="linenos">4510</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</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="sd"> Args:</span>
-</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a><span class="sd"> *expression (str | Expression): the SQL code string to parse.</span>
-</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
-</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="L-4517"><a href="#L-4517"><span class="linenos">4517</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a><span class="sd"> that the input expression is a SQL string).</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="sd"> Returns:</span>
-</span><span id="L-4521"><a href="#L-4521"><span class="linenos">4521</span></a><span class="sd"> Condition: the expression</span>
-</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4523"><a href="#L-4523"><span class="linenos">4523</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span> <span class="c1"># type: ignore</span>
-</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
-</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4528"><a href="#L-4528"><span class="linenos">4528</span></a> <span class="p">)</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><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a><span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">And</span><span class="p">:</span>
-</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4533"><a href="#L-4533"><span class="linenos">4533</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</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="sd"> Example:</span>
-</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a><span class="sd"> &gt;&gt;&gt; and_(&quot;x=1&quot;, and_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
-</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</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="sd"> Args:</span>
-</span><span id="L-4540"><a href="#L-4540"><span class="linenos">4540</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-4541"><a href="#L-4541"><span class="linenos">4541</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</span></a><span class="sd"> And: the new condition</span>
-</span><span id="L-4547"><a href="#L-4547"><span class="linenos">4547</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">And</span><span class="p">,</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a>
+</span><span id="L-4497"><a href="#L-4497"><span class="linenos">4497</span></a> <span class="k">return</span> <span class="n">Intersect</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</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><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</span>
+</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a>
+</span><span id="L-4504"><a href="#L-4504"><span class="linenos">4504</span></a><span class="sd"> Example:</span>
+</span><span id="L-4505"><a href="#L-4505"><span class="linenos">4505</span></a><span class="sd"> &gt;&gt;&gt; except_(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
+</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</span></a>
+</span><span id="L-4508"><a href="#L-4508"><span class="linenos">4508</span></a><span class="sd"> Args:</span>
+</span><span id="L-4509"><a href="#L-4509"><span class="linenos">4509</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
+</span><span id="L-4510"><a href="#L-4510"><span class="linenos">4510</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
+</span><span id="L-4512"><a href="#L-4512"><span class="linenos">4512</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4517"><a href="#L-4517"><span class="linenos">4517</span></a><span class="sd"> Except: the syntax tree for the EXCEPT statement.</span>
+</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4519"><a href="#L-4519"><span class="linenos">4519</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><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">return</span> <span class="n">Except</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
+</span><span id="L-4523"><a href="#L-4523"><span class="linenos">4523</span></a>
+</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a>
+</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a><span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</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">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
+</span><span id="L-4528"><a href="#L-4528"><span class="linenos">4528</span></a>
+</span><span id="L-4529"><a href="#L-4529"><span class="linenos">4529</span></a><span class="sd"> Example:</span>
+</span><span id="L-4530"><a href="#L-4530"><span class="linenos">4530</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;col1&quot;, &quot;col2&quot;).from_(&quot;tbl&quot;).sql()</span>
+</span><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</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="sd"> Args:</span>
+</span><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
+</span><span id="L-4535"><a href="#L-4535"><span class="linenos">4535</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
+</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="L-4538"><a href="#L-4538"><span class="linenos">4538</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="L-4540"><a href="#L-4540"><span class="linenos">4540</span></a>
+</span><span id="L-4541"><a href="#L-4541"><span class="linenos">4541</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4544"><a href="#L-4544"><span class="linenos">4544</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a>
+</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">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">Select</span><span class="p">:</span>
+</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</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">def</span> <span class="nf">or_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">Or</span><span class="p">:</span>
-</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4553"><a href="#L-4553"><span class="linenos">4553</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
+</span><span id="L-4551"><a href="#L-4551"><span class="linenos">4551</span></a><span class="sd"> Example:</span>
+</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</span></a><span class="sd"> &gt;&gt;&gt; from_(&quot;tbl&quot;).select(&quot;col1&quot;, &quot;col2&quot;).sql()</span>
+</span><span id="L-4553"><a href="#L-4553"><span class="linenos">4553</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
</span><span id="L-4554"><a href="#L-4554"><span class="linenos">4554</span></a>
-</span><span id="L-4555"><a href="#L-4555"><span class="linenos">4555</span></a><span class="sd"> Example:</span>
-</span><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</span></a><span class="sd"> &gt;&gt;&gt; or_(&quot;x=1&quot;, or_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
-</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
-</span><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a>
-</span><span id="L-4559"><a href="#L-4559"><span class="linenos">4559</span></a><span class="sd"> Args:</span>
-</span><span id="L-4560"><a href="#L-4560"><span class="linenos">4560</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</span></a>
-</span><span id="L-4565"><a href="#L-4565"><span class="linenos">4565</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</span></a><span class="sd"> Or: the new condition</span>
-</span><span id="L-4567"><a href="#L-4567"><span class="linenos">4567</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">Or</span><span class="p">,</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4569"><a href="#L-4569"><span class="linenos">4569</span></a>
-</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">def</span> <span class="nf">not_</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="kc">None</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">Not</span><span class="p">:</span>
-</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4573"><a href="#L-4573"><span class="linenos">4573</span></a><span class="sd"> Wrap a condition with a NOT operator.</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="sd"> Example:</span>
-</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
-</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</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="sd"> Args:</span>
-</span><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4582"><a href="#L-4582"><span class="linenos">4582</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-4583"><a href="#L-4583"><span class="linenos">4583</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</span></a>
-</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a><span class="sd"> Not: the new condition</span>
-</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
-</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4592"><a href="#L-4592"><span class="linenos">4592</span></a> <span class="p">)</span>
-</span><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</span></a> <span class="k">return</span> <span class="n">Not</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">_wrap_operator</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a>
-</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a>
-</span><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a><span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
-</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="k">return</span> <span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><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><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</span></a><span class="n">SAFE_IDENTIFIER_RE</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">r</span><span class="s2">&quot;^[_a-zA-Z][\w]*$&quot;</span><span class="p">)</span>
-</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a>
-</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a>
-</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="n">quoted</span><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="kc">None</span><span class="p">:</span>
-</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="o">...</span>
-</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</span></a>
-</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</span></a>
-</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span> <span class="n">quoted</span><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">Identifier</span><span class="p">:</span>
-</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</span></a> <span class="o">...</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><span id="L-4613"><a href="#L-4613"><span class="linenos">4613</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
-</span><span id="L-4615"><a href="#L-4615"><span class="linenos">4615</span></a>
-</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</span></a><span class="sd"> Args:</span>
-</span><span id="L-4617"><a href="#L-4617"><span class="linenos">4617</span></a><span class="sd"> name: The name to turn into an identifier.</span>
-</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
-</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</span></a>
-</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</span></a><span class="sd"> The identifier ast node.</span>
-</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</span></a><span class="sd"> &quot;&quot;&quot;</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="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="k">return</span> <span class="kc">None</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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">name</span>
-</span><span id="L-4629"><a href="#L-4629"><span class="linenos">4629</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">Identifier</span><span class="p">(</span>
-</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a> <span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</span></a> <span class="n">quoted</span><span class="o">=</span><span class="ow">not</span> <span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">quoted</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">quoted</span><span class="p">,</span>
-</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</span></a> <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="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Name needs to be a string or an Identifier, got: </span><span class="si">{</span><span class="n">name</span><span class="o">.</span><span class="vm">__class__</span><span class="si">}</span><span class="s2">&quot;</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="n">identifier</span>
+</span><span id="L-4555"><a href="#L-4555"><span class="linenos">4555</span></a><span class="sd"> Args:</span>
+</span><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</span></a><span class="sd"> *expressions (str | Expression): the SQL code string to parse as the FROM expressions of a</span>
+</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
+</span><span id="L-4559"><a href="#L-4559"><span class="linenos">4559</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="L-4560"><a href="#L-4560"><span class="linenos">4560</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</span></a><span class="sd"> that the input expression is a SQL string).</span>
+</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</span></a>
+</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="L-4565"><a href="#L-4565"><span class="linenos">4565</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</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><span id="L-4569"><a href="#L-4569"><span class="linenos">4569</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
+</span><span id="L-4570"><a href="#L-4570"><span class="linenos">4570</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span>
+</span><span id="L-4571"><a href="#L-4571"><span class="linenos">4571</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
+</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4573"><a href="#L-4573"><span class="linenos">4573</span></a> <span class="n">from_</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4574"><a href="#L-4574"><span class="linenos">4574</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-4575"><a href="#L-4575"><span class="linenos">4575</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
+</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4578"><a href="#L-4578"><span class="linenos">4578</span></a><span class="sd"> Creates an update statement.</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="sd"> Example:</span>
+</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a><span class="sd"> &gt;&gt;&gt; update(&quot;my_table&quot;, {&quot;x&quot;: 1, &quot;y&quot;: &quot;2&quot;, &quot;z&quot;: None}, from_=&quot;baz&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
+</span><span id="L-4582"><a href="#L-4582"><span class="linenos">4582</span></a><span class="sd"> &quot;UPDATE my_table SET x = 1, y = &#39;2&#39;, z = NULL FROM baz WHERE id &gt; 1&quot;</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="sd"> Args:</span>
+</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
+</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
+</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
+</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</span></a>
+</span><span id="L-4592"><a href="#L-4592"><span class="linenos">4592</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
+</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a> <span class="n">update_expr</span> <span class="o">=</span> <span class="n">Update</span><span class="p">(</span><span class="n">this</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">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><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
+</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</span></a> <span class="p">[</span>
+</span><span id="L-4599"><a href="#L-4599"><span class="linenos">4599</span></a> <span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">k</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="o">**</span><span class="n">opts</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">v</span><span class="p">))</span>
+</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</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">properties</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="p">],</span>
+</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a> <span class="p">)</span>
+</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">From</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">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</span></a> <span class="p">)</span>
+</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
+</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">Where</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">where</span><span class="p">)</span>
+</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="L-4611"><a href="#L-4611"><span class="linenos">4611</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-4612"><a href="#L-4612"><span class="linenos">4612</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="L-4613"><a href="#L-4613"><span class="linenos">4613</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Where</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">prefix</span><span class="o">=</span><span class="s2">&quot;WHERE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</span></a> <span class="p">)</span>
+</span><span id="L-4615"><a href="#L-4615"><span class="linenos">4615</span></a> <span class="k">return</span> <span class="n">update_expr</span>
+</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</span></a>
+</span><span id="L-4617"><a href="#L-4617"><span class="linenos">4617</span></a>
+</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</span></a> <span class="n">returning</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</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-4623"><a href="#L-4623"><span class="linenos">4623</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4624"><a href="#L-4624"><span class="linenos">4624</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a><span class="sd"> Builds a delete statement.</span>
+</span><span id="L-4627"><a href="#L-4627"><span class="linenos">4627</span></a>
+</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</span></a><span class="sd"> Example:</span>
+</span><span id="L-4629"><a href="#L-4629"><span class="linenos">4629</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;my_table&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
+</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</span>
+</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a>
+</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</span></a><span class="sd"> Args:</span>
+</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="L-4634"><a href="#L-4634"><span class="linenos">4634</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
+</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</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><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a><span class="n">INTERVAL_STRING_RE</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">r</span><span class="s2">&quot;\s*([0-9]+)\s*([a-zA-Z]+)\s*&quot;</span><span class="p">)</span>
-</span><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</span></a>
-</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">to_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Interval</span><span class="p">:</span>
-</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an interval expression from a string like &#39;1 day&#39; or &#39;5 months&#39;.&quot;&quot;&quot;</span>
-</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</span><span class="p">,</span> <span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-4646"><a href="#L-4646"><span class="linenos">4646</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</span><span class="p">)</span>
+</span><span id="L-4638"><a href="#L-4638"><span class="linenos">4638</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
+</span><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4641"><a href="#L-4641"><span class="linenos">4641</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">Delete</span><span class="p">()</span><span class="o">.</span><span class="n">delete</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">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><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">where</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
+</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">returning</span><span class="p">(</span><span class="n">returning</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4646"><a href="#L-4646"><span class="linenos">4646</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
</span><span id="L-4647"><a href="#L-4647"><span class="linenos">4647</span></a>
-</span><span id="L-4648"><a href="#L-4648"><span class="linenos">4648</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-4649"><a href="#L-4649"><span class="linenos">4649</span></a>
-</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a> <span class="n">interval_parts</span> <span class="o">=</span> <span class="n">INTERVAL_STRING_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</span></a>
-</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval_parts</span><span class="p">:</span>
-</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</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">return</span> <span class="n">Interval</span><span class="p">(</span>
-</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a> <span class="n">this</span><span class="o">=</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span>
-</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a> <span class="n">unit</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">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
-</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a> <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><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</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">Table</span><span class="p">:</span>
-</span><span id="L-4663"><a href="#L-4663"><span class="linenos">4663</span></a> <span class="o">...</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><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="kc">None</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-4668"><a href="#L-4668"><span class="linenos">4668</span></a> <span class="o">...</span>
-</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a>
-</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">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_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="nb">str</span> <span class="o">|</span> <span class="n">Table</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Table</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"> Create a table expression from a `[catalog].[schema].[table]` sql path. Catalog and schema are optional.</span>
-</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
-</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</span></a>
-</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a><span class="sd"> Args:</span>
-</span><span id="L-4677"><a href="#L-4677"><span class="linenos">4677</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</span>
-</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a>
-</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a><span class="sd"> A table expression.</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="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
-</span><span id="L-4683"><a href="#L-4683"><span class="linenos">4683</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</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 type provided for a table: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</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">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">table_name</span> <span class="o">=</span> <span class="p">(</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">split_num_words</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
-</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">table_name</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="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-4689"><a href="#L-4689"><span class="linenos">4689</span></a>
-</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="k">def</span> <span class="nf">to_column</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Column</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">Column</span><span class="p">:</span>
-</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
-</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</span></a>
-</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</span></a><span class="sd"> If a column is passed in then that column is returned.</span>
-</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</span></a>
-</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a><span class="sd"> Args:</span>
-</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
+</span><span id="L-4648"><a href="#L-4648"><span class="linenos">4648</span></a>
+</span><span id="L-4649"><a href="#L-4649"><span class="linenos">4649</span></a><span class="k">def</span> <span class="nf">condition</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Condition</span><span class="p">:</span>
+</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</span></a><span class="sd"> Initialize a logical condition expression.</span>
+</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</span></a>
+</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a><span class="sd"> Example:</span>
+</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
+</span><span id="L-4655"><a href="#L-4655"><span class="linenos">4655</span></a><span class="sd"> &#39;x = 1&#39;</span>
+</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a>
+</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a><span class="sd"> This is helpful for composing larger logical syntax trees:</span>
+</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
+</span><span id="L-4659"><a href="#L-4659"><span class="linenos">4659</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
+</span><span id="L-4660"><a href="#L-4660"><span class="linenos">4660</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
+</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</span>
+</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</span></a>
+</span><span id="L-4663"><a href="#L-4663"><span class="linenos">4663</span></a><span class="sd"> Args:</span>
+</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</span></a><span class="sd"> *expression (str | Expression): the SQL code string to parse.</span>
+</span><span id="L-4665"><a href="#L-4665"><span class="linenos">4665</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
+</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</span></a><span class="sd"> copy (bool): Whether or not to copy `expression` (only applies to expressions).</span>
+</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="L-4670"><a href="#L-4670"><span class="linenos">4670</span></a><span class="sd"> that the input expression is a SQL string).</span>
+</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a>
+</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4673"><a href="#L-4673"><span class="linenos">4673</span></a><span class="sd"> Condition: the expression</span>
+</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span> <span class="c1"># type: ignore</span>
+</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-4677"><a href="#L-4677"><span class="linenos">4677</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
+</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</span></a> <span class="p">)</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><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a><span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">And</span><span class="p">:</span>
+</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4686"><a href="#L-4686"><span class="linenos">4686</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</span>
+</span><span id="L-4687"><a href="#L-4687"><span class="linenos">4687</span></a>
+</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a><span class="sd"> Example:</span>
+</span><span id="L-4689"><a href="#L-4689"><span class="linenos">4689</span></a><span class="sd"> &gt;&gt;&gt; and_(&quot;x=1&quot;, and_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
+</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</span>
+</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a>
+</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a><span class="sd"> Args:</span>
+</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</span></a><span class="sd"> copy (bool): whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a>
</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a><span class="sd"> Table: A column expression</span>
+</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a><span class="sd"> And: the new condition</span>
</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Column</span><span class="p">):</span>
-</span><span id="L-4703"><a href="#L-4703"><span class="linenos">4703</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="L-4704"><a href="#L-4704"><span class="linenos">4704</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-4705"><a href="#L-4705"><span class="linenos">4705</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 type provided for column: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="k">return</span> <span class="n">column</span><span class="p">(</span><span class="o">*</span><span class="nb">reversed</span><span class="p">(</span><span class="n">sql_path</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a>
+</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">And</span><span class="p">,</span> <span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4703"><a href="#L-4703"><span class="linenos">4703</span></a>
+</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">or_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Or</span><span class="p">:</span>
+</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</span></a>
-</span><span id="L-4709"><a href="#L-4709"><span class="linenos">4709</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
-</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</span></a> <span class="n">alias</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
-</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</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="o">|</span> <span class="n">Identifier</span><span class="p">]</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="n">quoted</span><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-4714"><a href="#L-4714"><span class="linenos">4714</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-4715"><a href="#L-4715"><span class="linenos">4715</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a><span class="p">):</span>
-</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
-</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a>
-</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</span></a><span class="sd"> Example:</span>
-</span><span id="L-4720"><a href="#L-4720"><span class="linenos">4720</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
-</span><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
-</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a>
-</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;(select 1, 2)&#39;, &#39;bar&#39;, table=[&#39;a&#39;, &#39;b&#39;]).sql()</span>
-</span><span id="L-4724"><a href="#L-4724"><span class="linenos">4724</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
+</span><span id="L-4709"><a href="#L-4709"><span class="linenos">4709</span></a><span class="sd"> Example:</span>
+</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a><span class="sd"> &gt;&gt;&gt; or_(&quot;x=1&quot;, or_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
+</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
+</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a>
+</span><span id="L-4713"><a href="#L-4713"><span class="linenos">4713</span></a><span class="sd"> Args:</span>
+</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</span></a><span class="sd"> copy (bool): whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
+</span><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</span></a><span class="sd"> Or: the new condition</span>
+</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">Or</span><span class="p">,</span> <span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</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><span id="L-4726"><a href="#L-4726"><span class="linenos">4726</span></a><span class="sd"> Args:</span>
-</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4729"><a href="#L-4729"><span class="linenos">4729</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
-</span><span id="L-4730"><a href="#L-4730"><span class="linenos">4730</span></a><span class="sd"> special characters it is quoted.</span>
-</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a><span class="sd"> table: Whether or not to create a table alias, can also be a list of columns.</span>
-</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
-</span><span id="L-4733"><a href="#L-4733"><span class="linenos">4733</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="L-4734"><a href="#L-4734"><span class="linenos">4734</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a>
-</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a><span class="sd"> Alias: the aliased expression</span>
-</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4740"><a href="#L-4740"><span class="linenos">4740</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</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-4741"><a href="#L-4741"><span class="linenos">4741</span></a>
-</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a> <span class="n">table_alias</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">alias</span><span class="p">)</span>
-</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a>
-</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span>
-</span><span id="L-4746"><a href="#L-4746"><span class="linenos">4746</span></a> <span class="n">exp</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">table_alias</span><span class="p">)</span>
-</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a>
-</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
-</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-4750"><a href="#L-4750"><span class="linenos">4750</span></a> <span class="n">table_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">to_identifier</span><span class="p">(</span><span class="n">column</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-4726"><a href="#L-4726"><span class="linenos">4726</span></a><span class="k">def</span> <span class="nf">not_</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Not</span><span class="p">:</span>
+</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a><span class="sd"> Wrap a condition with a NOT operator.</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="sd"> Example:</span>
+</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
+</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</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="sd"> Args:</span>
+</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</span></a>
+</span><span id="L-4740"><a href="#L-4740"><span class="linenos">4740</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4741"><a href="#L-4741"><span class="linenos">4741</span></a><span class="sd"> Not: the new condition</span>
+</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
+</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="L-4746"><a href="#L-4746"><span class="linenos">4746</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</span></a> <span class="p">)</span>
+</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="k">return</span> <span class="n">Not</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">_wrap</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">Connector</span><span class="p">))</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><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a>
-</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</span></a> <span class="c1"># We don&#39;t set the &quot;alias&quot; arg for Window expressions, because that would add an IDENTIFIER node in</span>
-</span><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</span></a> <span class="c1"># the AST, representing a &quot;named_window&quot; [1] construct (eg. bigquery). What we want is an ALIAS node</span>
-</span><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="c1"># for the complete Window expression.</span>
-</span><span id="L-4757"><a href="#L-4757"><span class="linenos">4757</span></a> <span class="c1">#</span>
-</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</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">if</span> <span class="s2">&quot;alias&quot;</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">arg_types</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">exp</span><span class="p">,</span> <span class="n">Window</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">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</span></a> <span class="n">exp</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-4763"><a href="#L-4763"><span class="linenos">4763</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="k">return</span> <span class="n">Alias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</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-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><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="L-4768"><a href="#L-4768"><span class="linenos">4768</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a><span class="sd"> Build a subquery expression.</span>
-</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a>
-</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</span></a><span class="sd"> Example:</span>
-</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a><span class="sd"> &gt;&gt;&gt; subquery(&#39;select x from tbl&#39;, &#39;bar&#39;).select(&#39;x&#39;).sql()</span>
-</span><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</span>
-</span><span id="L-4774"><a href="#L-4774"><span class="linenos">4774</span></a>
-</span><span id="L-4775"><a href="#L-4775"><span class="linenos">4775</span></a><span class="sd"> Args:</span>
-</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
-</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a><span class="sd"> alias (str | Expression): the alias name to use.</span>
-</span><span id="L-4779"><a href="#L-4779"><span class="linenos">4779</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="L-4780"><a href="#L-4780"><span class="linenos">4780</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</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="sd"> Returns:</span>
-</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</span></a><span class="sd"> Select: a new select with the subquery expression included</span>
-</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</span></a>
-</span><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</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">subquery</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="k">return</span> <span class="n">Select</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="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a>
-</span><span id="L-4789"><a href="#L-4789"><span class="linenos">4789</span></a>
-</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a><span class="k">def</span> <span class="nf">column</span><span class="p">(</span>
-</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
-</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</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="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a> <span class="n">db</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="n">catalog</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a> <span class="n">quoted</span><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-4796"><a href="#L-4796"><span class="linenos">4796</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="L-4797"><a href="#L-4797"><span class="linenos">4797</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a><span class="sd"> Build a Column.</span>
-</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a>
-</span><span id="L-4800"><a href="#L-4800"><span class="linenos">4800</span></a><span class="sd"> Args:</span>
-</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a><span class="sd"> col: column name</span>
-</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a><span class="sd"> table: table name</span>
-</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</span></a><span class="sd"> db: db name</span>
-</span><span id="L-4804"><a href="#L-4804"><span class="linenos">4804</span></a><span class="sd"> catalog: catalog name</span>
-</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a><span class="sd"> quoted: whether or not to force quote each part</span>
-</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4807"><a href="#L-4807"><span class="linenos">4807</span></a><span class="sd"> Column: column instance</span>
-</span><span id="L-4808"><a href="#L-4808"><span class="linenos">4808</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
-</span><span id="L-4810"><a href="#L-4810"><span class="linenos">4810</span></a> <span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">col</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-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="n">table</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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-4812"><a href="#L-4812"><span class="linenos">4812</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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-4813"><a href="#L-4813"><span class="linenos">4813</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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-4752"><a href="#L-4752"><span class="linenos">4752</span></a><span class="k">def</span> <span class="nf">paren</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">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
+</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a> <span class="k">return</span> <span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</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><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a><span class="n">SAFE_IDENTIFIER_RE</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">r</span><span class="s2">&quot;^[_a-zA-Z][\w]*$&quot;</span><span class="p">)</span>
+</span><span id="L-4757"><a href="#L-4757"><span class="linenos">4757</span></a>
+</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a>
+</span><span id="L-4759"><a href="#L-4759"><span class="linenos">4759</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4760"><a href="#L-4760"><span class="linenos">4760</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="n">quoted</span><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="kc">None</span><span class="p">:</span>
+</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</span></a> <span class="o">...</span>
+</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</span></a>
+</span><span id="L-4763"><a href="#L-4763"><span class="linenos">4763</span></a>
+</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4765"><a href="#L-4765"><span class="linenos">4765</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span> <span class="n">quoted</span><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">Identifier</span><span class="p">:</span>
+</span><span id="L-4766"><a href="#L-4766"><span class="linenos">4766</span></a> <span class="o">...</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><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
+</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</span></a>
+</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a><span class="sd"> Args:</span>
+</span><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</span></a><span class="sd"> name: The name to turn into an identifier.</span>
+</span><span id="L-4774"><a href="#L-4774"><span class="linenos">4774</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
+</span><span id="L-4775"><a href="#L-4775"><span class="linenos">4775</span></a>
+</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a><span class="sd"> The identifier ast node.</span>
+</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a><span class="sd"> &quot;&quot;&quot;</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="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</span></a> <span class="k">return</span> <span class="kc">None</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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">name</span>
+</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">Identifier</span><span class="p">(</span>
+</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a> <span class="n">quoted</span><span class="o">=</span><span class="ow">not</span> <span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">quoted</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">quoted</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 class="k">else</span><span class="p">:</span>
+</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</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;Name needs to be a string or an Identifier, got: </span><span class="si">{</span><span class="n">name</span><span class="o">.</span><span class="vm">__class__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a>
+</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a>
+</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a><span class="n">INTERVAL_STRING_RE</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">r</span><span class="s2">&quot;\s*([0-9]+)\s*([a-zA-Z]+)\s*&quot;</span><span class="p">)</span>
+</span><span id="L-4796"><a href="#L-4796"><span class="linenos">4796</span></a>
+</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">to_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Interval</span><span class="p">:</span>
+</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an interval expression from a string like &#39;1 day&#39; or &#39;5 months&#39;.&quot;&quot;&quot;</span>
+</span><span id="L-4800"><a href="#L-4800"><span class="linenos">4800</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</span><span class="p">,</span> <span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</span><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="n">interval</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a>
+</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="n">interval_parts</span> <span class="o">=</span> <span class="n">INTERVAL_STRING_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-4807"><a href="#L-4807"><span class="linenos">4807</span></a>
+</span><span id="L-4808"><a href="#L-4808"><span class="linenos">4808</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval_parts</span><span class="p">:</span>
+</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</span><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">return</span> <span class="n">Interval</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="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span>
+</span><span id="L-4813"><a href="#L-4813"><span class="linenos">4813</span></a> <span class="n">unit</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">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</span></a> <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><span id="L-4817"><a href="#L-4817"><span class="linenos">4817</span></a><span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Cast</span><span class="p">:</span>
-</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</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="sd"> Example:</span>
-</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
-</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
-</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a>
-</span><span id="L-4824"><a href="#L-4824"><span class="linenos">4824</span></a><span class="sd"> Args:</span>
-</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a><span class="sd"> expression: The expression to cast.</span>
-</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</span></a><span class="sd"> to: The datatype to cast to.</span>
-</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</span></a>
-</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a><span class="sd"> A cast node.</span>
-</span><span id="L-4830"><a href="#L-4830"><span class="linenos">4830</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a> <span class="k">return</span> <span class="n">Cast</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">to</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="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">))</span>
-</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a>
+</span><span id="L-4817"><a href="#L-4817"><span class="linenos">4817</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</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">Table</span><span class="p">:</span>
+</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a> <span class="o">...</span>
+</span><span id="L-4820"><a href="#L-4820"><span class="linenos">4820</span></a>
+</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a>
+</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a><span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="kc">None</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-4824"><a href="#L-4824"><span class="linenos">4824</span></a> <span class="o">...</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><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_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="nb">str</span> <span class="o">|</span> <span class="n">Table</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Table</span><span class="p">]:</span>
+</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a><span class="sd"> Create a table expression from a `[catalog].[schema].[table]` sql path. Catalog and schema are optional.</span>
+</span><span id="L-4830"><a href="#L-4830"><span class="linenos">4830</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
+</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</span></a>
+</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a><span class="sd"> Args:</span>
+</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</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="k">def</span> <span class="nf">table_</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
-</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</span>
-</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</span></a>
-</span><span id="L-4838"><a href="#L-4838"><span class="linenos">4838</span></a><span class="sd"> Args:</span>
-</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a><span class="sd"> table (str | Expression): column name</span>
-</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a><span class="sd"> db (str | Expression): db name</span>
-</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a><span class="sd"> catalog (str | Expression): catalog name</span>
+</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a><span class="sd"> A table expression.</span>
+</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
+</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</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 type provided for a table: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a>
-</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a><span class="sd"> Table: table instance</span>
-</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4846"><a href="#L-4846"><span class="linenos">4846</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
-</span><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a> <span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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-4848"><a href="#L-4848"><span class="linenos">4848</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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-4849"><a href="#L-4849"><span class="linenos">4849</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a> <span class="p">)</span>
+</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">table_name</span> <span class="o">=</span> <span class="p">(</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">split_num_words</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
+</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">table_name</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="o">**</span><span class="n">kwargs</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><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a><span class="k">def</span> <span class="nf">to_column</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Column</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">Column</span><span class="p">:</span>
+</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
+</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</span></a>
+</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a><span class="sd"> If a column is passed in then that column is returned.</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><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a><span class="k">def</span> <span class="nf">values</span><span class="p">(</span>
-</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a> <span class="n">values</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="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">Any</span><span class="p">,</span> <span class="o">...</span><span class="p">]],</span>
-</span><span id="L-4856"><a href="#L-4856"><span class="linenos">4856</span></a> <span class="n">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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="n">columns</span><span 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">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</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">DataType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
-</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
-</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</span></a>
-</span><span id="L-4861"><a href="#L-4861"><span class="linenos">4861</span></a><span class="sd"> Example:</span>
-</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
-</span><span id="L-4863"><a href="#L-4863"><span class="linenos">4863</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
+</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</span></a><span class="sd"> Args:</span>
+</span><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
+</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4856"><a href="#L-4856"><span class="linenos">4856</span></a><span class="sd"> Table: A column expression</span>
+</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a> <span class="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Column</span><span class="p">):</span>
+</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-4861"><a href="#L-4861"><span class="linenos">4861</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 type provided for column: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></a> <span class="k">return</span> <span class="n">column</span><span class="p">(</span><span class="o">*</span><span class="nb">reversed</span><span class="p">(</span><span class="n">sql_path</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-4863"><a href="#L-4863"><span class="linenos">4863</span></a>
</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="sd"> Args:</span>
-</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
-</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a><span class="sd"> alias: optional alias</span>
-</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a><span class="sd"> columns: Optional list of ordered column names or ordered dictionary of column names to types.</span>
-</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a><span class="sd"> If either are provided then an alias is also required.</span>
-</span><span id="L-4870"><a href="#L-4870"><span class="linenos">4870</span></a><span class="sd"> If a dictionary is provided then the first column of the values will be casted to the expected type</span>
-</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</span></a><span class="sd"> in order to help with type inference.</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="sd"> Returns:</span>
-</span><span id="L-4874"><a href="#L-4874"><span class="linenos">4874</span></a><span class="sd"> Values: the Values expression object</span>
-</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Alias is required when providing columns&quot;</span><span class="p">)</span>
-</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4879"><a href="#L-4879"><span class="linenos">4879</span></a> <span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">])</span>
-</span><span id="L-4880"><a href="#L-4880"><span class="linenos">4880</span></a> <span class="k">if</span> <span class="n">columns</span>
-</span><span id="L-4881"><a href="#L-4881"><span class="linenos">4881</span></a> <span class="k">else</span> <span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a> <span class="p">)</span>
-</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
-</span><span id="L-4884"><a href="#L-4884"><span class="linenos">4884</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</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-4885"><a href="#L-4885"><span class="linenos">4885</span></a> <span class="n">types</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">columns</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
-</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</span></a> <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">set</span><span class="p">(</span>
-</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="s2">&quot;expressions&quot;</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 class="n">cast</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</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 class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">)],</span>
-</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a> <span class="p">)</span>
-</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
-</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</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-4893"><a href="#L-4893"><span class="linenos">4893</span></a> <span class="p">)</span>
-</span><span id="L-4894"><a href="#L-4894"><span class="linenos">4894</span></a>
-</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">def</span> <span class="nf">var</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Var</span><span class="p">:</span>
-</span><span id="L-4897"><a href="#L-4897"><span class="linenos">4897</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</span>
-</span><span id="L-4898"><a href="#L-4898"><span class="linenos">4898</span></a>
-</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a><span class="sd"> Example:</span>
-</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
-</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</span></a><span class="sd"> &#39;(VAR this: x)&#39;</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="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
-</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
-</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a>
-</span><span id="L-4906"><a href="#L-4906"><span class="linenos">4906</span></a><span class="sd"> Args:</span>
-</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a><span class="sd"> name: The name of the var or an expression who&#39;s name will become the var.</span>
-</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a>
-</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4910"><a href="#L-4910"><span class="linenos">4910</span></a><span class="sd"> The new variable node.</span>
-</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
-</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cannot convert empty name into var.&quot;</span><span class="p">)</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="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-4917"><a href="#L-4917"><span class="linenos">4917</span></a> <span class="k">return</span> <span class="n">Var</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-4918"><a href="#L-4918"><span class="linenos">4918</span></a>
-</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">rename_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span> <span class="n">new_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AlterTable</span><span class="p">:</span>
-</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
+</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
+</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a> <span class="n">alias</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
+</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</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="o">|</span> <span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a> <span class="n">quoted</span><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-4870"><a href="#L-4870"><span class="linenos">4870</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-4871"><a href="#L-4871"><span class="linenos">4871</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</span></a><span class="p">):</span>
+</span><span id="L-4873"><a href="#L-4873"><span class="linenos">4873</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
+</span><span id="L-4874"><a href="#L-4874"><span class="linenos">4874</span></a>
+</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a><span class="sd"> Example:</span>
+</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
+</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
+</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a>
+</span><span id="L-4879"><a href="#L-4879"><span class="linenos">4879</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;(select 1, 2)&#39;, &#39;bar&#39;, table=[&#39;a&#39;, &#39;b&#39;]).sql()</span>
+</span><span id="L-4880"><a href="#L-4880"><span class="linenos">4880</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
+</span><span id="L-4881"><a href="#L-4881"><span class="linenos">4881</span></a>
+</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a><span class="sd"> Args:</span>
+</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="L-4884"><a href="#L-4884"><span class="linenos">4884</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
+</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</span></a><span class="sd"> special characters it is quoted.</span>
+</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a><span class="sd"> table: Whether or not to create a table alias, can also be a list of columns.</span>
+</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
+</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a>
+</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</span></a><span class="sd"> Alias: the aliased expression</span>
+</span><span id="L-4894"><a href="#L-4894"><span class="linenos">4894</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4895"><a href="#L-4895"><span class="linenos">4895</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4896"><a href="#L-4896"><span class="linenos">4896</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</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-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="k">if</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a> <span class="n">table_alias</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">alias</span><span class="p">)</span>
+</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</span></a>
+</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span>
+</span><span id="L-4902"><a href="#L-4902"><span class="linenos">4902</span></a> <span class="n">exp</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">table_alias</span><span class="p">)</span>
+</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a>
+</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
+</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-4906"><a href="#L-4906"><span class="linenos">4906</span></a> <span class="n">table_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">to_identifier</span><span class="p">(</span><span class="n">column</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-4907"><a href="#L-4907"><span class="linenos">4907</span></a>
+</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a> <span class="k">return</span> <span class="n">exp</span>
+</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a>
+</span><span id="L-4910"><a href="#L-4910"><span class="linenos">4910</span></a> <span class="c1"># We don&#39;t set the &quot;alias&quot; arg for Window expressions, because that would add an IDENTIFIER node in</span>
+</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a> <span class="c1"># the AST, representing a &quot;named_window&quot; [1] construct (eg. bigquery). What we want is an ALIAS node</span>
+</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a> <span class="c1"># for the complete Window expression.</span>
+</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="c1">#</span>
+</span><span id="L-4914"><a href="#L-4914"><span class="linenos">4914</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</span>
+</span><span id="L-4915"><a href="#L-4915"><span class="linenos">4915</span></a>
+</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="k">if</span> <span class="s2">&quot;alias&quot;</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">arg_types</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">exp</span><span class="p">,</span> <span class="n">Window</span><span class="p">):</span>
+</span><span id="L-4917"><a href="#L-4917"><span class="linenos">4917</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="L-4918"><a href="#L-4918"><span class="linenos">4918</span></a> <span class="n">exp</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-4919"><a href="#L-4919"><span class="linenos">4919</span></a> <span class="k">return</span> <span class="n">exp</span>
+</span><span id="L-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="k">return</span> <span class="n">Alias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</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-4921"><a href="#L-4921"><span class="linenos">4921</span></a>
</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="sd"> Args:</span>
-</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a><span class="sd"> old_name: The old name of the table</span>
-</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a><span class="sd"> new_name: The new name of the table</span>
+</span><span id="L-4923"><a href="#L-4923"><span class="linenos">4923</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a><span class="sd"> Build a subquery expression.</span>
</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</span></a>
-</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a><span class="sd"> Returns:</span>
-</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a><span class="sd"> Alter table expression</span>
-</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4930"><a href="#L-4930"><span class="linenos">4930</span></a> <span class="n">old_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
-</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</span></a> <span class="n">new_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
-</span><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
-</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="n">this</span><span class="o">=</span><span class="n">old_table</span><span class="p">,</span>
-</span><span id="L-4934"><a href="#L-4934"><span class="linenos">4934</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="L-4935"><a href="#L-4935"><span class="linenos">4935</span></a> <span class="n">RenameTable</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">new_table</span><span class="p">),</span>
-</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a> <span class="p">],</span>
-</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a> <span class="p">)</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><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a><span class="k">def</span> <span class="nf">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">-&gt;</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="w"> </span><span class="sd">&quot;&quot;&quot;Convert a python value into an expression object.</span>
-</span><span id="L-4942"><a href="#L-4942"><span class="linenos">4942</span></a>
-</span><span id="L-4943"><a href="#L-4943"><span class="linenos">4943</span></a><span class="sd"> Raises an error if a conversion is not possible.</span>
+</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a><span class="sd"> Example:</span>
+</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a><span class="sd"> &gt;&gt;&gt; subquery(&#39;select x from tbl&#39;, &#39;bar&#39;).select(&#39;x&#39;).sql()</span>
+</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</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="sd"> Args:</span>
+</span><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
+</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="L-4934"><a href="#L-4934"><span class="linenos">4934</span></a><span class="sd"> alias (str | Expression): the alias name to use.</span>
+</span><span id="L-4935"><a href="#L-4935"><span class="linenos">4935</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a>
+</span><span id="L-4938"><a href="#L-4938"><span class="linenos">4938</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4939"><a href="#L-4939"><span class="linenos">4939</span></a><span class="sd"> Select: a new select with the subquery expression included</span>
+</span><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a><span class="sd"> &quot;&quot;&quot;</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="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</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">subquery</span><span class="p">(</span><span class="n">alias</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="n">Select</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="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span><span id="L-4944"><a href="#L-4944"><span class="linenos">4944</span></a>
-</span><span id="L-4945"><a href="#L-4945"><span class="linenos">4945</span></a><span class="sd"> Args:</span>
-</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a><span class="sd"> value (Any): a python object</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="sd"> Returns:</span>
-</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a><span class="sd"> Expression: the equivalent expression object</span>
-</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</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">Expression</span><span class="p">):</span>
-</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</span></a> <span class="k">return</span> <span class="n">value</span>
-</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</span></a> <span class="k">return</span> <span class="n">NULL</span>
-</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</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="nb">bool</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="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">value</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="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</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="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-4959"><a href="#L-4959"><span class="linenos">4959</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="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="n">math</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</span></a> <span class="k">return</span> <span class="n">NULL</span>
-</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</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">numbers</span><span class="o">.</span><span class="n">Number</span><span class="p">):</span>
-</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a> <span class="k">return</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-4963"><a href="#L-4963"><span class="linenos">4963</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="nb">tuple</span><span class="p">):</span>
-</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a> <span class="k">return</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">convert</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">value</span><span class="p">])</span>
-</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</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="nb">list</span><span class="p">):</span>
-</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</span></a> <span class="k">return</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">convert</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">value</span><span class="p">])</span>
-</span><span id="L-4967"><a href="#L-4967"><span class="linenos">4967</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="nb">dict</span><span class="p">):</span>
-</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
-</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</span></a> <span class="n">keys</span><span class="o">=</span><span class="p">[</span><span class="n">convert</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="n">value</span><span class="p">],</span>
-</span><span id="L-4970"><a href="#L-4970"><span class="linenos">4970</span></a> <span class="n">values</span><span class="o">=</span><span class="p">[</span><span class="n">convert</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">value</span><span class="o">.</span><span class="n">values</span><span class="p">()],</span>
-</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a> <span class="p">)</span>
-</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</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">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
-</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</span></a> <span class="n">datetime_literal</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-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="p">(</span><span class="n">value</span> <span class="k">if</span> <span class="n">value</span><span class="o">.</span><span class="n">tzinfo</span> <span class="k">else</span> <span class="n">value</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">))</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
-</span><span id="L-4975"><a href="#L-4975"><span class="linenos">4975</span></a> <span class="p">)</span>
-</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a> <span class="k">return</span> <span class="n">TimeStrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">datetime_literal</span><span class="p">)</span>
-</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</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">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
-</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a> <span class="n">date_literal</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="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a> <span class="k">return</span> <span class="n">DateStrToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date_literal</span><span class="p">)</span>
-</span><span id="L-4980"><a href="#L-4980"><span class="linenos">4980</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;Cannot convert </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a>
-</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a>
-</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</span></a><span class="k">def</span> <span class="nf">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fun</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-4984"><a href="#L-4984"><span class="linenos">4984</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a><span class="sd"> Replace children of an expression with the result of a lambda fun(child) -&gt; exp.</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">column</span><span class="p">(</span>
+</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
+</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</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="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a> <span class="n">db</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</span></a> <span class="n">catalog</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a> <span class="n">quoted</span><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-4952"><a href="#L-4952"><span class="linenos">4952</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</span></a><span class="sd"> Build a Column.</span>
+</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</span></a>
+</span><span id="L-4956"><a href="#L-4956"><span class="linenos">4956</span></a><span class="sd"> Args:</span>
+</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</span></a><span class="sd"> col: column name</span>
+</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</span></a><span class="sd"> table: table name</span>
+</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a><span class="sd"> db: db name</span>
+</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</span></a><span class="sd"> catalog: catalog name</span>
+</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a><span class="sd"> quoted: whether or not to force quote each part</span>
+</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a><span class="sd"> Returns:</span>
+</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</span></a><span class="sd"> Column: column instance</span>
+</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</span></a> <span class="k">return</span> <span class="n">Column</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="n">to_identifier</span><span class="p">(</span><span class="n">col</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-4967"><a href="#L-4967"><span class="linenos">4967</span></a> <span class="n">table</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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-4969"><a href="#L-4969"><span class="linenos">4969</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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-4970"><a href="#L-4970"><span class="linenos">4970</span></a> <span class="p">)</span>
+</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a>
+</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</span></a>
+</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</span></a><span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Cast</span><span class="p">:</span>
+</span><span id="L-4974"><a href="#L-4974"><span class="linenos">4974</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</span>
+</span><span id="L-4975"><a href="#L-4975"><span class="linenos">4975</span></a>
+</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a><span class="sd"> Example:</span>
+</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
+</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
+</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a>
+</span><span id="L-4980"><a href="#L-4980"><span class="linenos">4980</span></a><span class="sd"> Args:</span>
+</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a><span class="sd"> expression: The expression to cast.</span>
+</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a><span class="sd"> to: The datatype to cast to.</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="sd"> Returns:</span>
+</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a><span class="sd"> A cast node.</span>
</span><span id="L-4986"><a href="#L-4986"><span class="linenos">4986</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</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">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a> <span class="n">is_list_arg</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">list</span>
+</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a> <span class="k">return</span> <span class="n">Cast</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">to</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="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">))</span>
</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a>
-</span><span id="L-4990"><a href="#L-4990"><span class="linenos">4990</span></a> <span class="n">child_nodes</span> <span class="o">=</span> <span class="n">v</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="p">[</span><span class="n">v</span><span class="p">]</span>
-</span><span id="L-4991"><a href="#L-4991"><span class="linenos">4991</span></a> <span class="n">new_child_nodes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a>
-</span><span id="L-4993"><a href="#L-4993"><span class="linenos">4993</span></a> <span class="k">for</span> <span class="n">cn</span> <span class="ow">in</span> <span class="n">child_nodes</span><span class="p">:</span>
-</span><span id="L-4994"><a href="#L-4994"><span class="linenos">4994</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cn</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a> <span class="k">for</span> <span class="n">child_node</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">fun</span><span class="p">(</span><span class="n">cn</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-4996"><a href="#L-4996"><span class="linenos">4996</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_node</span><span class="p">)</span>
-</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-4998"><a href="#L-4998"><span class="linenos">4998</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">=</span> <span class="n">k</span>
-</span><span id="L-4999"><a href="#L-4999"><span class="linenos">4999</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cn</span><span class="p">)</span>
-</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a>
-</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_child_nodes</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">new_child_nodes</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a>
-</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</span></a>
-</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a><span class="k">def</span> <span class="nf">column_table_names</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-5006"><a href="#L-5006"><span class="linenos">5006</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
+</span><span id="L-4990"><a href="#L-4990"><span class="linenos">4990</span></a>
+</span><span id="L-4991"><a href="#L-4991"><span class="linenos">4991</span></a><span class="k">def</span> <span class="nf">table_</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
+</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</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="sd"> Args:</span>
+</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a><span class="sd"> table (str | Expression): column name</span>
+</span><span id="L-4996"><a href="#L-4996"><span class="linenos">4996</span></a><span class="sd"> db (str | Expression): db name</span>
+</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</span></a><span class="sd"> catalog (str | Expression): catalog name</span>
+</span><span id="L-4998"><a href="#L-4998"><span class="linenos">4998</span></a>
+</span><span id="L-4999"><a href="#L-4999"><span class="linenos">4999</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a><span class="sd"> Table: table instance</span>
+</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
+</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a> <span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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-5004"><a href="#L-5004"><span class="linenos">5004</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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-5005"><a href="#L-5005"><span class="linenos">5005</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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-5006"><a href="#L-5006"><span class="linenos">5006</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <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="sd"> Example:</span>
-</span><span id="L-5010"><a href="#L-5010"><span class="linenos">5010</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</span></a><span class="sd"> &gt;&gt;&gt; column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;))</span>
-</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a><span class="sd"> [&#39;c&#39;, &#39;a&#39;]</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="sd"> Args:</span>
-</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a><span class="sd"> expression (sqlglot.Expression): expression to find table names</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">def</span> <span class="nf">values</span><span class="p">(</span>
+</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</span></a> <span class="n">values</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="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">Any</span><span class="p">,</span> <span class="o">...</span><span class="p">]],</span>
+</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a> <span class="n">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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</span></a> <span class="n">columns</span><span 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">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</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">DataType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
+</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a>
-</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a><span class="sd"> list: A list of unique names</span>
-</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">for</span> <span class="n">column</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">Column</span><span class="p">)))</span>
-</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a>
-</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">def</span> <span class="nf">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the full name of a table as a string.</span>
-</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a>
-</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a><span class="sd"> Args:</span>
-</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a><span class="sd"> table (exp.Table | str): table expression node or string.</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="sd"> Examples:</span>
-</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a><span class="sd"> &gt;&gt;&gt; table_name(parse_one(&quot;select * from a.b.c&quot;).find(exp.Table))</span>
-</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a><span class="sd"> &#39;a.b.c&#39;</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="sd"> Returns:</span>
-</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a><span class="sd"> The table name.</span>
-</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</span></a>
-</span><span id="L-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="n">table</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">Table</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</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;Cannot parse </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a><span class="sd"> Example:</span>
+</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
+</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
+</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a>
+</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a><span class="sd"> Args:</span>
+</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
+</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a><span class="sd"> alias: optional alias</span>
+</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a><span class="sd"> columns: Optional list of ordered column names or ordered dictionary of column names to types.</span>
+</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a><span class="sd"> If either are provided then an alias is also required.</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="sd"> Returns:</span>
+</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a><span class="sd"> Values: the Values expression object</span>
+</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Alias is required when providing columns&quot;</span><span class="p">)</span>
+</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a>
+</span><span id="L-5033"><a href="#L-5033"><span class="linenos">5033</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
+</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">values</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="p">(</span>
+</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a> <span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">])</span>
+</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</span></a> <span class="k">if</span> <span class="n">columns</span>
+</span><span id="L-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="k">else</span> <span class="p">(</span><span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-5039"><a href="#L-5039"><span class="linenos">5039</span></a> <span class="p">),</span>
+</span><span id="L-5040"><a href="#L-5040"><span class="linenos">5040</span></a> <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><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</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><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a> <span class="n">part</span>
-</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</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-5046"><a href="#L-5046"><span class="linenos">5046</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
-</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
-</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-5049"><a href="#L-5049"><span class="linenos">5049</span></a> <span class="p">)</span>
-</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a> <span class="p">)</span>
+</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</span></a><span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Var</span><span class="p">:</span>
+</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</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="sd"> Example:</span>
+</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
+</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
+</span><span id="L-5049"><a href="#L-5049"><span class="linenos">5049</span></a>
+</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</span></a><span class="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
+</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a><span class="sd"> &#39;(VAR this: x)&#39;</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><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a><span class="k">def</span> <span class="nf">replace_tables</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">mapping</span><span class="p">):</span>
-</span><span id="L-5055"><a href="#L-5055"><span class="linenos">5055</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace all tables in expression according to the mapping.</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="sd"> Args:</span>
-</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
-</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a><span class="sd"> mapping (Dict[str, str]): mapping of table names.</span>
-</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a>
-</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a><span class="sd"> Examples:</span>
-</span><span id="L-5062"><a href="#L-5062"><span class="linenos">5062</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a><span class="sd"> &gt;&gt;&gt; replace_tables(parse_one(&quot;select * from a.b&quot;), {&quot;a.b&quot;: &quot;c&quot;}).sql()</span>
-</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</span>
+</span><span id="L-5053"><a href="#L-5053"><span class="linenos">5053</span></a><span class="sd"> Args:</span>
+</span><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a><span class="sd"> name: The name of the var or an expression who&#39;s name will become the var.</span>
+</span><span id="L-5055"><a href="#L-5055"><span class="linenos">5055</span></a>
+</span><span id="L-5056"><a href="#L-5056"><span class="linenos">5056</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a><span class="sd"> The new variable node.</span>
+</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
+</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cannot convert empty name into var.&quot;</span><span class="p">)</span>
+</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a>
+</span><span id="L-5062"><a href="#L-5062"><span class="linenos">5062</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a> <span class="k">return</span> <span class="n">Var</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-5065"><a href="#L-5065"><span class="linenos">5065</span></a>
-</span><span id="L-5066"><a href="#L-5066"><span class="linenos">5066</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a><span class="sd"> &quot;&quot;&quot;</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">def</span> <span class="nf">rename_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span> <span class="n">new_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AlterTable</span><span class="p">:</span>
+</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a>
-</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a> <span class="k">def</span> <span class="nf">_replace_tables</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
-</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
-</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a> <span class="n">new_name</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">))</span>
-</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a> <span class="k">return</span> <span class="n">to_table</span><span class="p">(</span>
-</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a> <span class="n">new_name</span><span class="p">,</span>
-</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a> <span class="o">**</span><span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</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">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">)},</span>
-</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</span></a> <span class="p">)</span>
-</span><span id="L-5078"><a href="#L-5078"><span class="linenos">5078</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="L-5079"><a href="#L-5079"><span class="linenos">5079</span></a>
-</span><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_tables</span><span class="p">)</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><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a><span class="k">def</span> <span class="nf">replace_placeholders</span><span class="p">(</span><span class="n">expression</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-5084"><a href="#L-5084"><span class="linenos">5084</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
+</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a><span class="sd"> Args:</span>
+</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a><span class="sd"> old_name: The old name of the table</span>
+</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a><span class="sd"> new_name: The new name of the table</span>
+</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a>
+</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a><span class="sd"> Alter table expression</span>
+</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</span></a> <span class="n">old_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
+</span><span id="L-5078"><a href="#L-5078"><span class="linenos">5078</span></a> <span class="n">new_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
+</span><span id="L-5079"><a href="#L-5079"><span class="linenos">5079</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
+</span><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a> <span class="n">this</span><span class="o">=</span><span class="n">old_table</span><span class="p">,</span>
+</span><span id="L-5081"><a href="#L-5081"><span class="linenos">5081</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a> <span class="n">RenameTable</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">new_table</span><span class="p">),</span>
+</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <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="sd"> Args:</span>
-</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
-</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
-</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</span>
-</span><span id="L-5090"><a href="#L-5090"><span class="linenos">5090</span></a>
-</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a><span class="sd"> Examples:</span>
-</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
-</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
-</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a><span class="sd"> ... exp.to_identifier(&quot;str_col&quot;), &quot;b&quot;, tbl=exp.to_identifier(&quot;foo&quot;)</span>
-</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a><span class="sd"> ... ).sql()</span>
-</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</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="sd"> Returns:</span>
-</span><span id="L-5100"><a href="#L-5100"><span class="linenos">5100</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</span></a><span class="sd"> &quot;&quot;&quot;</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="k">def</span> <span class="nf">_replace_placeholders</span><span class="p">(</span><span class="n">node</span><span class="p">,</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-5104"><a href="#L-5104"><span class="linenos">5104</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Placeholder</span><span class="p">):</span>
-</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
-</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a> <span class="n">new_name</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="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
-</span><span id="L-5109"><a href="#L-5109"><span class="linenos">5109</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
-</span><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
-</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a> <span class="k">pass</span>
-</span><span id="L-5114"><a href="#L-5114"><span class="linenos">5114</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="L-5115"><a href="#L-5115"><span class="linenos">5115</span></a>
-</span><span id="L-5116"><a href="#L-5116"><span class="linenos">5116</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_placeholders</span><span class="p">,</span> <span class="nb">iter</span><span class="p">(</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-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><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
-</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">Expression</span><span class="p">,</span> <span class="n">sources</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">Subqueryable</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><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a><span class="p">)</span> <span class="o">-&gt;</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="w"> </span><span class="sd">&quot;&quot;&quot;Transforms an expression by expanding all referenced sources into subqueries.</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="sd"> Examples:</span>
-</span><span id="L-5125"><a href="#L-5125"><span class="linenos">5125</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;)}).sql()</span>
-</span><span id="L-5127"><a href="#L-5127"><span class="linenos">5127</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
+</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a>
+</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</span></a><span class="k">def</span> <span class="nf">convert</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="n">copy</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">Expression</span><span class="p">:</span>
+</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a python value into an expression object.</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="sd"> Raises an error if a conversion is not possible.</span>
+</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a>
+</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a><span class="sd"> Args:</span>
+</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a><span class="sd"> value: A python object.</span>
+</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</span></a><span class="sd"> copy: Whether or not to copy `value` (only applies to Expressions and collections).</span>
+</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a>
+</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a><span class="sd"> Expression: the equivalent expression object.</span>
+</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5099"><a href="#L-5099"><span class="linenos">5099</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">Expression</span><span class="p">):</span>
+</span><span id="L-5100"><a href="#L-5100"><span class="linenos">5100</span></a> <span class="k">return</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</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="nb">str</span><span class="p">):</span>
+</span><span id="L-5102"><a href="#L-5102"><span class="linenos">5102</span></a> <span class="k">return</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-5103"><a href="#L-5103"><span class="linenos">5103</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="nb">bool</span><span class="p">):</span>
+</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</span></a> <span class="k">return</span> <span class="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="n">math</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">value</span><span class="p">)):</span>
+</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a> <span class="k">return</span> <span class="n">NULL</span>
+</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</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">numbers</span><span class="o">.</span><span class="n">Number</span><span class="p">):</span>
+</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</span></a> <span class="k">return</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-5109"><a href="#L-5109"><span class="linenos">5109</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">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
+</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a> <span class="n">datetime_literal</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-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="p">(</span><span class="n">value</span> <span class="k">if</span> <span class="n">value</span><span class="o">.</span><span class="n">tzinfo</span> <span class="k">else</span> <span class="n">value</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">))</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
+</span><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a> <span class="p">)</span>
+</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a> <span class="k">return</span> <span class="n">TimeStrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">datetime_literal</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="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
+</span><span id="L-5115"><a href="#L-5115"><span class="linenos">5115</span></a> <span class="n">date_literal</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="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="L-5116"><a href="#L-5116"><span class="linenos">5116</span></a> <span class="k">return</span> <span class="n">DateStrToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date_literal</span><span class="p">)</span>
+</span><span id="L-5117"><a href="#L-5117"><span class="linenos">5117</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="nb">tuple</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">Tuple</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">])</span>
+</span><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</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="nb">list</span><span class="p">):</span>
+</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a> <span class="k">return</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">convert</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">])</span>
+</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</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="nb">dict</span><span class="p">):</span>
+</span><span id="L-5122"><a href="#L-5122"><span class="linenos">5122</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
+</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a> <span class="n">keys</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">value</span><span class="p">],</span>
+</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a> <span class="n">values</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="o">.</span><span class="n">values</span><span class="p">()],</span>
+</span><span id="L-5125"><a href="#L-5125"><span class="linenos">5125</span></a> <span class="p">)</span>
+</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</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;Cannot convert </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-5127"><a href="#L-5127"><span class="linenos">5127</span></a>
</span><span id="L-5128"><a href="#L-5128"><span class="linenos">5128</span></a>
-</span><span id="L-5129"><a href="#L-5129"><span class="linenos">5129</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;), &quot;y&quot;: parse_one(&quot;select * from z&quot;)}).sql()</span>
-</span><span id="L-5130"><a href="#L-5130"><span class="linenos">5130</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM (SELECT * FROM z) AS y /* source: y */) AS z /* source: x */&#39;</span>
-</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a>
-</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a><span class="sd"> Args:</span>
-</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</span></a><span class="sd"> expression: The expression to expand.</span>
-</span><span id="L-5134"><a href="#L-5134"><span class="linenos">5134</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
-</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
-</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</span></a>
-</span><span id="L-5137"><a href="#L-5137"><span class="linenos">5137</span></a><span class="sd"> Returns:</span>
-</span><span id="L-5138"><a href="#L-5138"><span class="linenos">5138</span></a><span class="sd"> The transformed expression.</span>
-</span><span id="L-5139"><a href="#L-5139"><span class="linenos">5139</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5140"><a href="#L-5140"><span class="linenos">5140</span></a>
-</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a> <span class="k">def</span> <span class="nf">_expand</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
-</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="L-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="n">source</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">name</span><span class="p">)</span>
-</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
-</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="ow">or</span> <span class="n">name</span><span class="p">)</span>
-</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;source: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a> <span class="k">return</span> <span class="n">subquery</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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-5149"><a href="#L-5149"><span class="linenos">5149</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5129"><a href="#L-5129"><span class="linenos">5129</span></a><span class="k">def</span> <span class="nf">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fun</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-5130"><a href="#L-5130"><span class="linenos">5130</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a><span class="sd"> Replace children of an expression with the result of a lambda fun(child) -&gt; exp.</span>
+</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</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">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-5134"><a href="#L-5134"><span class="linenos">5134</span></a> <span class="n">is_list_arg</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">list</span>
+</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</span></a>
+</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</span></a> <span class="n">child_nodes</span> <span class="o">=</span> <span class="n">v</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="p">[</span><span class="n">v</span><span class="p">]</span>
+</span><span id="L-5137"><a href="#L-5137"><span class="linenos">5137</span></a> <span class="n">new_child_nodes</span> <span class="o">=</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">for</span> <span class="n">cn</span> <span class="ow">in</span> <span class="n">child_nodes</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="nb">isinstance</span><span class="p">(</span><span class="n">cn</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a> <span class="k">for</span> <span class="n">child_node</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">fun</span><span class="p">(</span><span class="n">cn</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-5142"><a href="#L-5142"><span class="linenos">5142</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_node</span><span class="p">)</span>
+</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">=</span> <span class="n">k</span>
+</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cn</span><span class="p">)</span>
+</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a>
+</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_child_nodes</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">new_child_nodes</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-5149"><a href="#L-5149"><span class="linenos">5149</span></a>
</span><span id="L-5150"><a href="#L-5150"><span class="linenos">5150</span></a>
-</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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-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><span id="L-5154"><a href="#L-5154"><span class="linenos">5154</span></a><span class="k">def</span> <span class="nf">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">*</span><span class="n">args</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Func</span><span class="p">:</span>
-</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a><span class="sd"> Returns a Func expression.</span>
-</span><span id="L-5157"><a href="#L-5157"><span class="linenos">5157</span></a>
-</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a><span class="sd"> Examples:</span>
-</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
-</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a><span class="sd"> &#39;ABS(5)&#39;</span>
-</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a>
-</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;cast&quot;, this=5, to=DataType.build(&quot;DOUBLE&quot;)).sql()</span>
-</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</span>
-</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a>
-</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</span></a><span class="sd"> Args:</span>
-</span><span id="L-5166"><a href="#L-5166"><span class="linenos">5166</span></a><span class="sd"> name: the name of the function to build.</span>
-</span><span id="L-5167"><a href="#L-5167"><span class="linenos">5167</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
-</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</span></a><span class="sd"> dialect: the source dialect.</span>
-</span><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</span>
-</span><span id="L-5170"><a href="#L-5170"><span class="linenos">5170</span></a>
-</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a><span class="sd"> Note:</span>
-</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</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="sd"> Returns:</span>
-</span><span id="L-5175"><a href="#L-5175"><span class="linenos">5175</span></a><span class="sd"> An instance of the function of interest, or an anonymous function, if `name` doesn&#39;t</span>
-</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
-</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a> <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">:</span>
-</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Can&#39;t use both args and kwargs to instantiate a function.&quot;</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="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">Dialect</span>
-</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</span></a>
-</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</span></a> <span class="n">converted</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert</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-5184"><a href="#L-5184"><span class="linenos">5184</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a><span class="k">def</span> <span class="nf">column_table_names</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-5152"><a href="#L-5152"><span class="linenos">5152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5153"><a href="#L-5153"><span class="linenos">5153</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
+</span><span id="L-5154"><a href="#L-5154"><span class="linenos">5154</span></a>
+</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</span></a><span class="sd"> Example:</span>
+</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-5157"><a href="#L-5157"><span class="linenos">5157</span></a><span class="sd"> &gt;&gt;&gt; column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;))</span>
+</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a><span class="sd"> [&#39;c&#39;, &#39;a&#39;]</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="sd"> Args:</span>
+</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a><span class="sd"> expression (sqlglot.Expression): expression to find table names</span>
+</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a>
+</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a><span class="sd"> list: A list of unique names</span>
+</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5166"><a href="#L-5166"><span class="linenos">5166</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">for</span> <span class="n">column</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">Column</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><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a><span class="k">def</span> <span class="nf">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-5170"><a href="#L-5170"><span class="linenos">5170</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the full name of a table as a string.</span>
+</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a>
+</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a><span class="sd"> Args:</span>
+</span><span id="L-5173"><a href="#L-5173"><span class="linenos">5173</span></a><span class="sd"> table (exp.Table | str): table expression node or string.</span>
+</span><span id="L-5174"><a href="#L-5174"><span class="linenos">5174</span></a>
+</span><span id="L-5175"><a href="#L-5175"><span class="linenos">5175</span></a><span class="sd"> Examples:</span>
+</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</span></a><span class="sd"> &gt;&gt;&gt; table_name(parse_one(&quot;select * from a.b.c&quot;).find(exp.Table))</span>
+</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a><span class="sd"> &#39;a.b.c&#39;</span>
+</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</span></a>
+</span><span id="L-5180"><a href="#L-5180"><span class="linenos">5180</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5181"><a href="#L-5181"><span class="linenos">5181</span></a><span class="sd"> The table name.</span>
+</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</span></a><span class="sd"> &quot;&quot;&quot;</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="n">table</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">Table</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="n">parser</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">parser</span><span class="p">()</span>
-</span><span id="L-5187"><a href="#L-5187"><span class="linenos">5187</span></a> <span class="n">from_args_list</span> <span class="o">=</span> <span class="n">parser</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">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-5186"><a href="#L-5186"><span class="linenos">5186</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-5187"><a href="#L-5187"><span class="linenos">5187</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;Cannot parse </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-5188"><a href="#L-5188"><span class="linenos">5188</span></a>
-</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
-</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">from_args_list</span><span class="p">(</span><span class="n">converted</span><span class="p">)</span> <span class="k">if</span> <span class="n">converted</span> <span class="k">else</span> <span class="n">from_args_list</span><span class="o">.</span><span class="vm">__self__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span> <span class="ow">or</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">converted</span><span class="p">}</span>
-</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a> <span class="n">function</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">name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a>
-</span><span id="L-5195"><a href="#L-5195"><span class="linenos">5195</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">converted</span><span class="p">):</span>
-</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
-</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</span></a>
-</span><span id="L-5198"><a href="#L-5198"><span class="linenos">5198</span></a> <span class="k">return</span> <span class="n">function</span>
+</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</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><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a> <span class="n">part</span>
+</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</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-5192"><a href="#L-5192"><span class="linenos">5192</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
+</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
+</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-5195"><a href="#L-5195"><span class="linenos">5195</span></a> <span class="p">)</span>
+</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</span></a> <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><span id="L-5200"><a href="#L-5200"><span class="linenos">5200</span></a>
-</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">():</span>
-</span><span id="L-5202"><a href="#L-5202"><span class="linenos">5202</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a><span class="sd"> Returns a true Boolean expression.</span>
-</span><span id="L-5204"><a href="#L-5204"><span class="linenos">5204</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a> <span class="k">return</span> <span class="n">Boolean</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-5200"><a href="#L-5200"><span class="linenos">5200</span></a><span class="k">def</span> <span class="nf">replace_tables</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">mapping</span><span class="p">):</span>
+</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace all tables in expression according to the mapping.</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="sd"> Args:</span>
+</span><span id="L-5204"><a href="#L-5204"><span class="linenos">5204</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
+</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a><span class="sd"> mapping (Dict[str, str]): mapping of table names.</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><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</span></a><span class="k">def</span> <span class="nf">false</span><span class="p">():</span>
-</span><span id="L-5209"><a href="#L-5209"><span class="linenos">5209</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5210"><a href="#L-5210"><span class="linenos">5210</span></a><span class="sd"> Returns a false Boolean expression.</span>
-</span><span id="L-5211"><a href="#L-5211"><span class="linenos">5211</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</span></a> <span class="k">return</span> <span class="n">Boolean</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-5213"><a href="#L-5213"><span class="linenos">5213</span></a>
-</span><span id="L-5214"><a href="#L-5214"><span class="linenos">5214</span></a>
-</span><span id="L-5215"><a href="#L-5215"><span class="linenos">5215</span></a><span class="k">def</span> <span class="nf">null</span><span class="p">():</span>
-</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-5217"><a href="#L-5217"><span class="linenos">5217</span></a><span class="sd"> Returns a Null expression.</span>
-</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</span></a> <span class="k">return</span> <span class="n">Null</span><span class="p">()</span>
-</span><span id="L-5220"><a href="#L-5220"><span class="linenos">5220</span></a>
-</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="c1"># TODO: deprecate this</span>
-</span><span id="L-5223"><a href="#L-5223"><span class="linenos">5223</span></a><span class="n">TRUE</span> <span class="o">=</span> <span class="n">Boolean</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-5224"><a href="#L-5224"><span class="linenos">5224</span></a><span class="n">FALSE</span> <span class="o">=</span> <span class="n">Boolean</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-5225"><a href="#L-5225"><span class="linenos">5225</span></a><span class="n">NULL</span> <span class="o">=</span> <span class="n">Null</span><span class="p">()</span>
+</span><span id="L-5207"><a href="#L-5207"><span class="linenos">5207</span></a><span class="sd"> Examples:</span>
+</span><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="L-5209"><a href="#L-5209"><span class="linenos">5209</span></a><span class="sd"> &gt;&gt;&gt; replace_tables(parse_one(&quot;select * from a.b&quot;), {&quot;a.b&quot;: &quot;c&quot;}).sql()</span>
+</span><span id="L-5210"><a href="#L-5210"><span class="linenos">5210</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</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="sd"> Returns:</span>
+</span><span id="L-5213"><a href="#L-5213"><span class="linenos">5213</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="L-5214"><a href="#L-5214"><span class="linenos">5214</span></a><span class="sd"> &quot;&quot;&quot;</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">_replace_tables</span><span class="p">(</span><span class="n">node</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="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
+</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a> <span class="n">new_name</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">))</span>
+</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</span></a> <span class="k">if</span> <span class="n">new_name</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="n">to_table</span><span class="p">(</span>
+</span><span id="L-5221"><a href="#L-5221"><span class="linenos">5221</span></a> <span class="n">new_name</span><span class="p">,</span>
+</span><span id="L-5222"><a href="#L-5222"><span class="linenos">5222</span></a> <span class="o">**</span><span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</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">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">)},</span>
+</span><span id="L-5223"><a href="#L-5223"><span class="linenos">5223</span></a> <span class="p">)</span>
+</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</span></a> <span class="k">return</span> <span class="n">node</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">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_tables</span><span class="p">)</span>
+</span><span id="L-5227"><a href="#L-5227"><span class="linenos">5227</span></a>
+</span><span id="L-5228"><a href="#L-5228"><span class="linenos">5228</span></a>
+</span><span id="L-5229"><a href="#L-5229"><span class="linenos">5229</span></a><span class="k">def</span> <span class="nf">replace_placeholders</span><span class="p">(</span><span class="n">expression</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-5230"><a href="#L-5230"><span class="linenos">5230</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
+</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a>
+</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</span></a><span class="sd"> Args:</span>
+</span><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
+</span><span id="L-5234"><a href="#L-5234"><span class="linenos">5234</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
+</span><span id="L-5235"><a href="#L-5235"><span class="linenos">5235</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</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="sd"> Examples:</span>
+</span><span id="L-5238"><a href="#L-5238"><span class="linenos">5238</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="L-5239"><a href="#L-5239"><span class="linenos">5239</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
+</span><span id="L-5240"><a href="#L-5240"><span class="linenos">5240</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
+</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</span></a><span class="sd"> ... exp.to_identifier(&quot;str_col&quot;), &quot;b&quot;, tbl=exp.to_identifier(&quot;foo&quot;)</span>
+</span><span id="L-5242"><a href="#L-5242"><span class="linenos">5242</span></a><span class="sd"> ... ).sql()</span>
+</span><span id="L-5243"><a href="#L-5243"><span class="linenos">5243</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</span>
+</span><span id="L-5244"><a href="#L-5244"><span class="linenos">5244</span></a>
+</span><span id="L-5245"><a href="#L-5245"><span class="linenos">5245</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="L-5247"><a href="#L-5247"><span class="linenos">5247</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a>
+</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a> <span class="k">def</span> <span class="nf">_replace_placeholders</span><span class="p">(</span><span class="n">node</span><span class="p">,</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-5250"><a href="#L-5250"><span class="linenos">5250</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Placeholder</span><span class="p">):</span>
+</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a> <span class="n">new_name</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="n">node</span><span class="o">.</span><span class="n">name</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="n">new_name</span><span class="p">:</span>
+</span><span id="L-5254"><a href="#L-5254"><span class="linenos">5254</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
+</span><span id="L-5255"><a href="#L-5255"><span class="linenos">5255</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-5257"><a href="#L-5257"><span class="linenos">5257</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
+</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="L-5259"><a href="#L-5259"><span class="linenos">5259</span></a> <span class="k">pass</span>
+</span><span id="L-5260"><a href="#L-5260"><span class="linenos">5260</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5261"><a href="#L-5261"><span class="linenos">5261</span></a>
+</span><span id="L-5262"><a href="#L-5262"><span class="linenos">5262</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_placeholders</span><span class="p">,</span> <span class="nb">iter</span><span class="p">(</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-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><span id="L-5265"><a href="#L-5265"><span class="linenos">5265</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
+</span><span id="L-5266"><a href="#L-5266"><span class="linenos">5266</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">Expression</span><span class="p">,</span> <span class="n">sources</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">Subqueryable</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><span id="L-5267"><a href="#L-5267"><span class="linenos">5267</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-5268"><a href="#L-5268"><span class="linenos">5268</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Transforms an expression by expanding all referenced sources into subqueries.</span>
+</span><span id="L-5269"><a href="#L-5269"><span class="linenos">5269</span></a>
+</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a><span class="sd"> Examples:</span>
+</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="L-5272"><a href="#L-5272"><span class="linenos">5272</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;)}).sql()</span>
+</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
+</span><span id="L-5274"><a href="#L-5274"><span class="linenos">5274</span></a>
+</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;), &quot;y&quot;: parse_one(&quot;select * from z&quot;)}).sql()</span>
+</span><span id="L-5276"><a href="#L-5276"><span class="linenos">5276</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM (SELECT * FROM z) AS y /* source: y */) AS z /* source: x */&#39;</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="sd"> Args:</span>
+</span><span id="L-5279"><a href="#L-5279"><span class="linenos">5279</span></a><span class="sd"> expression: The expression to expand.</span>
+</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
+</span><span id="L-5281"><a href="#L-5281"><span class="linenos">5281</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
+</span><span id="L-5282"><a href="#L-5282"><span class="linenos">5282</span></a>
+</span><span id="L-5283"><a href="#L-5283"><span class="linenos">5283</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</span></a><span class="sd"> The transformed expression.</span>
+</span><span id="L-5285"><a href="#L-5285"><span class="linenos">5285</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5286"><a href="#L-5286"><span class="linenos">5286</span></a>
+</span><span id="L-5287"><a href="#L-5287"><span class="linenos">5287</span></a> <span class="k">def</span> <span class="nf">_expand</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Expression</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="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
+</span><span id="L-5289"><a href="#L-5289"><span class="linenos">5289</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="L-5290"><a href="#L-5290"><span class="linenos">5290</span></a> <span class="n">source</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">name</span><span class="p">)</span>
+</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
+</span><span id="L-5292"><a href="#L-5292"><span class="linenos">5292</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="ow">or</span> <span class="n">name</span><span class="p">)</span>
+</span><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;source: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</span></a> <span class="k">return</span> <span class="n">subquery</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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-5295"><a href="#L-5295"><span class="linenos">5295</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5296"><a href="#L-5296"><span class="linenos">5296</span></a>
+</span><span id="L-5297"><a href="#L-5297"><span class="linenos">5297</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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-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><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</span></a><span class="k">def</span> <span class="nf">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">*</span><span class="n">args</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Func</span><span class="p">:</span>
+</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5302"><a href="#L-5302"><span class="linenos">5302</span></a><span class="sd"> Returns a Func expression.</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="sd"> Examples:</span>
+</span><span id="L-5305"><a href="#L-5305"><span class="linenos">5305</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
+</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a><span class="sd"> &#39;ABS(5)&#39;</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="sd"> &gt;&gt;&gt; func(&quot;cast&quot;, this=5, to=DataType.build(&quot;DOUBLE&quot;)).sql()</span>
+</span><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</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="sd"> Args:</span>
+</span><span id="L-5312"><a href="#L-5312"><span class="linenos">5312</span></a><span class="sd"> name: the name of the function to build.</span>
+</span><span id="L-5313"><a href="#L-5313"><span class="linenos">5313</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
+</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</span></a><span class="sd"> dialect: the source dialect.</span>
+</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</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="sd"> Note:</span>
+</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</span>
+</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a>
+</span><span id="L-5320"><a href="#L-5320"><span class="linenos">5320</span></a><span class="sd"> Returns:</span>
+</span><span id="L-5321"><a href="#L-5321"><span class="linenos">5321</span></a><span class="sd"> An instance of the function of interest, or an anonymous function, if `name` doesn&#39;t</span>
+</span><span id="L-5322"><a href="#L-5322"><span class="linenos">5322</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
+</span><span id="L-5323"><a href="#L-5323"><span class="linenos">5323</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</span></a> <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">:</span>
+</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Can&#39;t use both args and kwargs to instantiate a function.&quot;</span><span class="p">)</span>
+</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a>
+</span><span id="L-5327"><a href="#L-5327"><span class="linenos">5327</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">Dialect</span>
+</span><span id="L-5328"><a href="#L-5328"><span class="linenos">5328</span></a>
+</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a> <span class="n">converted</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">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">arg</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="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-5330"><a href="#L-5330"><span class="linenos">5330</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">maybe_parse</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="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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="L-5331"><a href="#L-5331"><span class="linenos">5331</span></a>
+</span><span id="L-5332"><a href="#L-5332"><span class="linenos">5332</span></a> <span class="n">parser</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">parser</span><span class="p">()</span>
+</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a> <span class="n">from_args_list</span> <span class="o">=</span> <span class="n">parser</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">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</span></a>
+</span><span id="L-5335"><a href="#L-5335"><span class="linenos">5335</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
+</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">from_args_list</span><span class="p">(</span><span class="n">converted</span><span class="p">)</span> <span class="k">if</span> <span class="n">converted</span> <span class="k">else</span> <span class="n">from_args_list</span><span class="o">.</span><span class="vm">__self__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-5337"><a href="#L-5337"><span class="linenos">5337</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5338"><a href="#L-5338"><span class="linenos">5338</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span> <span class="ow">or</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">converted</span><span class="p">}</span>
+</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a> <span class="n">function</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">name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</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="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">converted</span><span class="p">):</span>
+</span><span id="L-5342"><a href="#L-5342"><span class="linenos">5342</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</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="k">return</span> <span class="n">function</span>
+</span><span id="L-5345"><a href="#L-5345"><span class="linenos">5345</span></a>
+</span><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</span></a>
+</span><span id="L-5347"><a href="#L-5347"><span class="linenos">5347</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">():</span>
+</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a><span class="sd"> Returns a true Boolean expression.</span>
+</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</span></a> <span class="k">return</span> <span class="n">Boolean</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-5352"><a href="#L-5352"><span class="linenos">5352</span></a>
+</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">def</span> <span class="nf">false</span><span class="p">():</span>
+</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5356"><a href="#L-5356"><span class="linenos">5356</span></a><span class="sd"> Returns a false Boolean expression.</span>
+</span><span id="L-5357"><a href="#L-5357"><span class="linenos">5357</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a> <span class="k">return</span> <span class="n">Boolean</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-5359"><a href="#L-5359"><span class="linenos">5359</span></a>
+</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">def</span> <span class="nf">null</span><span class="p">():</span>
+</span><span id="L-5362"><a href="#L-5362"><span class="linenos">5362</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-5363"><a href="#L-5363"><span class="linenos">5363</span></a><span class="sd"> Returns a Null expression.</span>
+</span><span id="L-5364"><a href="#L-5364"><span class="linenos">5364</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-5365"><a href="#L-5365"><span class="linenos">5365</span></a> <span class="k">return</span> <span class="n">Null</span><span class="p">()</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><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a><span class="c1"># TODO: deprecate this</span>
+</span><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a><span class="n">TRUE</span> <span class="o">=</span> <span class="n">Boolean</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-5370"><a href="#L-5370"><span class="linenos">5370</span></a><span class="n">FALSE</span> <span class="o">=</span> <span class="n">Boolean</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-5371"><a href="#L-5371"><span class="linenos">5371</span></a><span class="n">NULL</span> <span class="o">=</span> <span class="n">Null</span><span class="p">()</span>
</span></pre></div>
@@ -10116,7 +10295,7 @@ to check that the provided arguments don't exceed the function argument limit.</
</div>
<a class="headerlink" href="#Condition"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Condition-653"><a href="#Condition-653"><span class="linenos">653</span></a><span class="k">class</span> <span class="nc">Condition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Condition-654"><a href="#Condition-654"><span class="linenos">654</span></a> <span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="Condition-654"><a href="#Condition-654"><span class="linenos">654</span></a> <span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Condition-655"><a href="#Condition-655"><span class="linenos">655</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Condition-656"><a href="#Condition-656"><span class="linenos">656</span></a><span class="sd"> AND this condition with one or multiple expressions.</span>
</span><span id="Condition-657"><a href="#Condition-657"><span class="linenos">657</span></a>
@@ -10128,44 +10307,167 @@ to check that the provided arguments don't exceed the function argument limit.</
</span><span id="Condition-663"><a href="#Condition-663"><span class="linenos">663</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
</span><span id="Condition-664"><a href="#Condition-664"><span class="linenos">664</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
</span><span id="Condition-665"><a href="#Condition-665"><span class="linenos">665</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Condition-666"><a href="#Condition-666"><span class="linenos">666</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Condition-667"><a href="#Condition-667"><span class="linenos">667</span></a>
-</span><span id="Condition-668"><a href="#Condition-668"><span class="linenos">668</span></a><span class="sd"> Returns:</span>
-</span><span id="Condition-669"><a href="#Condition-669"><span class="linenos">669</span></a><span class="sd"> And: the new condition.</span>
-</span><span id="Condition-670"><a href="#Condition-670"><span class="linenos">670</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Condition-671"><a href="#Condition-671"><span class="linenos">671</span></a> <span class="k">return</span> <span class="n">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Condition-672"><a href="#Condition-672"><span class="linenos">672</span></a>
-</span><span id="Condition-673"><a href="#Condition-673"><span class="linenos">673</span></a> <span class="k">def</span> <span class="nf">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Condition-674"><a href="#Condition-674"><span class="linenos">674</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Condition-675"><a href="#Condition-675"><span class="linenos">675</span></a><span class="sd"> OR this condition with one or multiple expressions.</span>
-</span><span id="Condition-676"><a href="#Condition-676"><span class="linenos">676</span></a>
-</span><span id="Condition-677"><a href="#Condition-677"><span class="linenos">677</span></a><span class="sd"> Example:</span>
-</span><span id="Condition-678"><a href="#Condition-678"><span class="linenos">678</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).or_(&quot;y=1&quot;).sql()</span>
-</span><span id="Condition-679"><a href="#Condition-679"><span class="linenos">679</span></a><span class="sd"> &#39;x = 1 OR y = 1&#39;</span>
-</span><span id="Condition-680"><a href="#Condition-680"><span class="linenos">680</span></a>
-</span><span id="Condition-681"><a href="#Condition-681"><span class="linenos">681</span></a><span class="sd"> Args:</span>
-</span><span id="Condition-682"><a href="#Condition-682"><span class="linenos">682</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Condition-683"><a href="#Condition-683"><span class="linenos">683</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Condition-684"><a href="#Condition-684"><span class="linenos">684</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Condition-685"><a href="#Condition-685"><span class="linenos">685</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Condition-686"><a href="#Condition-686"><span class="linenos">686</span></a>
-</span><span id="Condition-687"><a href="#Condition-687"><span class="linenos">687</span></a><span class="sd"> Returns:</span>
-</span><span id="Condition-688"><a href="#Condition-688"><span class="linenos">688</span></a><span class="sd"> Or: the new condition.</span>
-</span><span id="Condition-689"><a href="#Condition-689"><span class="linenos">689</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Condition-690"><a href="#Condition-690"><span class="linenos">690</span></a> <span class="k">return</span> <span class="n">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Condition-691"><a href="#Condition-691"><span class="linenos">691</span></a>
-</span><span id="Condition-692"><a href="#Condition-692"><span class="linenos">692</span></a> <span class="k">def</span> <span class="nf">not_</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Condition-693"><a href="#Condition-693"><span class="linenos">693</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Condition-694"><a href="#Condition-694"><span class="linenos">694</span></a><span class="sd"> Wrap this condition with NOT.</span>
-</span><span id="Condition-695"><a href="#Condition-695"><span class="linenos">695</span></a>
-</span><span id="Condition-696"><a href="#Condition-696"><span class="linenos">696</span></a><span class="sd"> Example:</span>
-</span><span id="Condition-697"><a href="#Condition-697"><span class="linenos">697</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).not_().sql()</span>
-</span><span id="Condition-698"><a href="#Condition-698"><span class="linenos">698</span></a><span class="sd"> &#39;NOT x = 1&#39;</span>
-</span><span id="Condition-699"><a href="#Condition-699"><span class="linenos">699</span></a>
-</span><span id="Condition-700"><a href="#Condition-700"><span class="linenos">700</span></a><span class="sd"> Returns:</span>
-</span><span id="Condition-701"><a href="#Condition-701"><span class="linenos">701</span></a><span class="sd"> Not: the new condition.</span>
-</span><span id="Condition-702"><a href="#Condition-702"><span class="linenos">702</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Condition-703"><a href="#Condition-703"><span class="linenos">703</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Condition-666"><a href="#Condition-666"><span class="linenos">666</span></a><span class="sd"> copy (bool): whether or not to copy the involved expressions (only applies to Expressions).</span>
+</span><span id="Condition-667"><a href="#Condition-667"><span class="linenos">667</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Condition-668"><a href="#Condition-668"><span class="linenos">668</span></a>
+</span><span id="Condition-669"><a href="#Condition-669"><span class="linenos">669</span></a><span class="sd"> Returns:</span>
+</span><span id="Condition-670"><a href="#Condition-670"><span class="linenos">670</span></a><span class="sd"> And: the new condition.</span>
+</span><span id="Condition-671"><a href="#Condition-671"><span class="linenos">671</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Condition-672"><a href="#Condition-672"><span class="linenos">672</span></a> <span class="k">return</span> <span class="n">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Condition-673"><a href="#Condition-673"><span class="linenos">673</span></a>
+</span><span id="Condition-674"><a href="#Condition-674"><span class="linenos">674</span></a> <span class="k">def</span> <span class="nf">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Condition-675"><a href="#Condition-675"><span class="linenos">675</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Condition-676"><a href="#Condition-676"><span class="linenos">676</span></a><span class="sd"> OR this condition with one or multiple expressions.</span>
+</span><span id="Condition-677"><a href="#Condition-677"><span class="linenos">677</span></a>
+</span><span id="Condition-678"><a href="#Condition-678"><span class="linenos">678</span></a><span class="sd"> Example:</span>
+</span><span id="Condition-679"><a href="#Condition-679"><span class="linenos">679</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).or_(&quot;y=1&quot;).sql()</span>
+</span><span id="Condition-680"><a href="#Condition-680"><span class="linenos">680</span></a><span class="sd"> &#39;x = 1 OR y = 1&#39;</span>
+</span><span id="Condition-681"><a href="#Condition-681"><span class="linenos">681</span></a>
+</span><span id="Condition-682"><a href="#Condition-682"><span class="linenos">682</span></a><span class="sd"> Args:</span>
+</span><span id="Condition-683"><a href="#Condition-683"><span class="linenos">683</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Condition-684"><a href="#Condition-684"><span class="linenos">684</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Condition-685"><a href="#Condition-685"><span class="linenos">685</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Condition-686"><a href="#Condition-686"><span class="linenos">686</span></a><span class="sd"> copy (bool): whether or not to copy the involved expressions (only applies to Expressions).</span>
+</span><span id="Condition-687"><a href="#Condition-687"><span class="linenos">687</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Condition-688"><a href="#Condition-688"><span class="linenos">688</span></a>
+</span><span id="Condition-689"><a href="#Condition-689"><span class="linenos">689</span></a><span class="sd"> Returns:</span>
+</span><span id="Condition-690"><a href="#Condition-690"><span class="linenos">690</span></a><span class="sd"> Or: the new condition.</span>
+</span><span id="Condition-691"><a href="#Condition-691"><span class="linenos">691</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Condition-692"><a href="#Condition-692"><span class="linenos">692</span></a> <span class="k">return</span> <span class="n">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Condition-693"><a href="#Condition-693"><span class="linenos">693</span></a>
+</span><span id="Condition-694"><a href="#Condition-694"><span class="linenos">694</span></a> <span class="k">def</span> <span class="nf">not_</span><span class="p">(</span><span class="bp">self</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="Condition-695"><a href="#Condition-695"><span class="linenos">695</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Condition-696"><a href="#Condition-696"><span class="linenos">696</span></a><span class="sd"> Wrap this condition with NOT.</span>
+</span><span id="Condition-697"><a href="#Condition-697"><span class="linenos">697</span></a>
+</span><span id="Condition-698"><a href="#Condition-698"><span class="linenos">698</span></a><span class="sd"> Example:</span>
+</span><span id="Condition-699"><a href="#Condition-699"><span class="linenos">699</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).not_().sql()</span>
+</span><span id="Condition-700"><a href="#Condition-700"><span class="linenos">700</span></a><span class="sd"> &#39;NOT x = 1&#39;</span>
+</span><span id="Condition-701"><a href="#Condition-701"><span class="linenos">701</span></a>
+</span><span id="Condition-702"><a href="#Condition-702"><span class="linenos">702</span></a><span class="sd"> Args:</span>
+</span><span id="Condition-703"><a href="#Condition-703"><span class="linenos">703</span></a><span class="sd"> copy (bool): whether or not to copy this object.</span>
+</span><span id="Condition-704"><a href="#Condition-704"><span class="linenos">704</span></a>
+</span><span id="Condition-705"><a href="#Condition-705"><span class="linenos">705</span></a><span class="sd"> Returns:</span>
+</span><span id="Condition-706"><a href="#Condition-706"><span class="linenos">706</span></a><span class="sd"> Not: the new condition.</span>
+</span><span id="Condition-707"><a href="#Condition-707"><span class="linenos">707</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Condition-708"><a href="#Condition-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</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="Condition-709"><a href="#Condition-709"><span class="linenos">709</span></a>
+</span><span id="Condition-710"><a href="#Condition-710"><span class="linenos">710</span></a> <span class="k">def</span> <span class="nf">_binop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">klass</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">other</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Condition-711"><a href="#Condition-711"><span class="linenos">711</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Condition-712"><a href="#Condition-712"><span class="linenos">712</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">convert</span><span class="p">(</span><span class="n">other</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="Condition-713"><a href="#Condition-713"><span class="linenos">713</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">klass</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">other</span><span class="p">,</span> <span class="n">klass</span><span class="p">):</span>
+</span><span id="Condition-714"><a href="#Condition-714"><span class="linenos">714</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_wrap</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">Binary</span><span class="p">)</span>
+</span><span id="Condition-715"><a href="#Condition-715"><span class="linenos">715</span></a> <span class="n">other</span> <span class="o">=</span> <span class="n">_wrap</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Binary</span><span class="p">)</span>
+</span><span id="Condition-716"><a href="#Condition-716"><span class="linenos">716</span></a> <span class="k">if</span> <span class="n">reverse</span><span class="p">:</span>
+</span><span id="Condition-717"><a href="#Condition-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="n">klass</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">other</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="Condition-718"><a href="#Condition-718"><span class="linenos">718</span></a> <span class="k">return</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="n">other</span><span class="p">)</span>
+</span><span id="Condition-719"><a href="#Condition-719"><span class="linenos">719</span></a>
+</span><span id="Condition-720"><a href="#Condition-720"><span class="linenos">720</span></a> <span class="k">def</span> <span class="fm">__getitem__</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">ExpOrStr</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="n">ExpOrStr</span><span class="p">]):</span>
+</span><span id="Condition-721"><a href="#Condition-721"><span class="linenos">721</span></a> <span class="k">return</span> <span class="n">Bracket</span><span class="p">(</span>
+</span><span id="Condition-722"><a href="#Condition-722"><span class="linenos">722</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">other</span><span class="p">)]</span>
+</span><span id="Condition-723"><a href="#Condition-723"><span class="linenos">723</span></a> <span class="p">)</span>
+</span><span id="Condition-724"><a href="#Condition-724"><span class="linenos">724</span></a>
+</span><span id="Condition-725"><a href="#Condition-725"><span class="linenos">725</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span>
+</span><span id="Condition-726"><a href="#Condition-726"><span class="linenos">726</span></a> <span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="n">query</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Condition-727"><a href="#Condition-727"><span class="linenos">727</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
+</span><span id="Condition-728"><a href="#Condition-728"><span class="linenos">728</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
+</span><span id="Condition-729"><a href="#Condition-729"><span class="linenos">729</span></a> <span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">),</span>
+</span><span id="Condition-730"><a href="#Condition-730"><span class="linenos">730</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</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="Condition-731"><a href="#Condition-731"><span class="linenos">731</span></a> <span class="n">query</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</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">query</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Condition-732"><a href="#Condition-732"><span class="linenos">732</span></a> <span class="p">)</span>
+</span><span id="Condition-733"><a href="#Condition-733"><span class="linenos">733</span></a>
+</span><span id="Condition-734"><a href="#Condition-734"><span class="linenos">734</span></a> <span class="k">def</span> <span class="nf">between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">low</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="n">high</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="n">copy</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="n">Between</span><span class="p">:</span>
+</span><span id="Condition-735"><a href="#Condition-735"><span class="linenos">735</span></a> <span class="k">return</span> <span class="n">Between</span><span class="p">(</span>
+</span><span id="Condition-736"><a href="#Condition-736"><span class="linenos">736</span></a> <span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">),</span>
+</span><span id="Condition-737"><a href="#Condition-737"><span class="linenos">737</span></a> <span class="n">low</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Condition-738"><a href="#Condition-738"><span class="linenos">738</span></a> <span class="n">high</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">high</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Condition-739"><a href="#Condition-739"><span class="linenos">739</span></a> <span class="p">)</span>
+</span><span id="Condition-740"><a href="#Condition-740"><span class="linenos">740</span></a>
+</span><span id="Condition-741"><a href="#Condition-741"><span class="linenos">741</span></a> <span class="k">def</span> <span class="nf">like</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Like</span><span class="p">:</span>
+</span><span id="Condition-742"><a href="#Condition-742"><span class="linenos">742</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Like</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-743"><a href="#Condition-743"><span class="linenos">743</span></a>
+</span><span id="Condition-744"><a href="#Condition-744"><span class="linenos">744</span></a> <span class="k">def</span> <span class="nf">ilike</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ILike</span><span class="p">:</span>
+</span><span id="Condition-745"><a href="#Condition-745"><span class="linenos">745</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">ILike</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-746"><a href="#Condition-746"><span class="linenos">746</span></a>
+</span><span id="Condition-747"><a href="#Condition-747"><span class="linenos">747</span></a> <span class="k">def</span> <span class="nf">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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">EQ</span><span class="p">:</span>
+</span><span id="Condition-748"><a href="#Condition-748"><span class="linenos">748</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">EQ</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-749"><a href="#Condition-749"><span class="linenos">749</span></a>
+</span><span id="Condition-750"><a href="#Condition-750"><span class="linenos">750</span></a> <span class="k">def</span> <span class="nf">neq</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NEQ</span><span class="p">:</span>
+</span><span id="Condition-751"><a href="#Condition-751"><span class="linenos">751</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">NEQ</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-752"><a href="#Condition-752"><span class="linenos">752</span></a>
+</span><span id="Condition-753"><a href="#Condition-753"><span class="linenos">753</span></a> <span class="k">def</span> <span class="nf">rlike</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RegexpLike</span><span class="p">:</span>
+</span><span id="Condition-754"><a href="#Condition-754"><span class="linenos">754</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">RegexpLike</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-755"><a href="#Condition-755"><span class="linenos">755</span></a>
+</span><span id="Condition-756"><a href="#Condition-756"><span class="linenos">756</span></a> <span class="k">def</span> <span class="fm">__lt__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">LT</span><span class="p">:</span>
+</span><span id="Condition-757"><a href="#Condition-757"><span class="linenos">757</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">LT</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-758"><a href="#Condition-758"><span class="linenos">758</span></a>
+</span><span id="Condition-759"><a href="#Condition-759"><span class="linenos">759</span></a> <span class="k">def</span> <span class="fm">__le__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">LTE</span><span class="p">:</span>
+</span><span id="Condition-760"><a href="#Condition-760"><span class="linenos">760</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">LTE</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-761"><a href="#Condition-761"><span class="linenos">761</span></a>
+</span><span id="Condition-762"><a href="#Condition-762"><span class="linenos">762</span></a> <span class="k">def</span> <span class="fm">__gt__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">GT</span><span class="p">:</span>
+</span><span id="Condition-763"><a href="#Condition-763"><span class="linenos">763</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">GT</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-764"><a href="#Condition-764"><span class="linenos">764</span></a>
+</span><span id="Condition-765"><a href="#Condition-765"><span class="linenos">765</span></a> <span class="k">def</span> <span class="fm">__ge__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">GTE</span><span class="p">:</span>
+</span><span id="Condition-766"><a href="#Condition-766"><span class="linenos">766</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">GTE</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-767"><a href="#Condition-767"><span class="linenos">767</span></a>
+</span><span id="Condition-768"><a href="#Condition-768"><span class="linenos">768</span></a> <span class="k">def</span> <span class="fm">__add__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Add</span><span class="p">:</span>
+</span><span id="Condition-769"><a href="#Condition-769"><span class="linenos">769</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Add</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-770"><a href="#Condition-770"><span class="linenos">770</span></a>
+</span><span id="Condition-771"><a href="#Condition-771"><span class="linenos">771</span></a> <span class="k">def</span> <span class="fm">__radd__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Add</span><span class="p">:</span>
+</span><span id="Condition-772"><a href="#Condition-772"><span class="linenos">772</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Add</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-773"><a href="#Condition-773"><span class="linenos">773</span></a>
+</span><span id="Condition-774"><a href="#Condition-774"><span class="linenos">774</span></a> <span class="k">def</span> <span class="fm">__sub__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Sub</span><span class="p">:</span>
+</span><span id="Condition-775"><a href="#Condition-775"><span class="linenos">775</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Sub</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-776"><a href="#Condition-776"><span class="linenos">776</span></a>
+</span><span id="Condition-777"><a href="#Condition-777"><span class="linenos">777</span></a> <span class="k">def</span> <span class="fm">__rsub__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Sub</span><span class="p">:</span>
+</span><span id="Condition-778"><a href="#Condition-778"><span class="linenos">778</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Sub</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-779"><a href="#Condition-779"><span class="linenos">779</span></a>
+</span><span id="Condition-780"><a href="#Condition-780"><span class="linenos">780</span></a> <span class="k">def</span> <span class="fm">__mul__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mul</span><span class="p">:</span>
+</span><span id="Condition-781"><a href="#Condition-781"><span class="linenos">781</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Mul</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-782"><a href="#Condition-782"><span class="linenos">782</span></a>
+</span><span id="Condition-783"><a href="#Condition-783"><span class="linenos">783</span></a> <span class="k">def</span> <span class="fm">__rmul__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mul</span><span class="p">:</span>
+</span><span id="Condition-784"><a href="#Condition-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Mul</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-785"><a href="#Condition-785"><span class="linenos">785</span></a>
+</span><span id="Condition-786"><a href="#Condition-786"><span class="linenos">786</span></a> <span class="k">def</span> <span class="fm">__truediv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Div</span><span class="p">:</span>
+</span><span id="Condition-787"><a href="#Condition-787"><span class="linenos">787</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Div</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-788"><a href="#Condition-788"><span class="linenos">788</span></a>
+</span><span id="Condition-789"><a href="#Condition-789"><span class="linenos">789</span></a> <span class="k">def</span> <span class="fm">__rtruediv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Div</span><span class="p">:</span>
+</span><span id="Condition-790"><a href="#Condition-790"><span class="linenos">790</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Div</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-791"><a href="#Condition-791"><span class="linenos">791</span></a>
+</span><span id="Condition-792"><a href="#Condition-792"><span class="linenos">792</span></a> <span class="k">def</span> <span class="fm">__floordiv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">IntDiv</span><span class="p">:</span>
+</span><span id="Condition-793"><a href="#Condition-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">IntDiv</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-794"><a href="#Condition-794"><span class="linenos">794</span></a>
+</span><span id="Condition-795"><a href="#Condition-795"><span class="linenos">795</span></a> <span class="k">def</span> <span class="fm">__rfloordiv__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">IntDiv</span><span class="p">:</span>
+</span><span id="Condition-796"><a href="#Condition-796"><span class="linenos">796</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">IntDiv</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-797"><a href="#Condition-797"><span class="linenos">797</span></a>
+</span><span id="Condition-798"><a href="#Condition-798"><span class="linenos">798</span></a> <span class="k">def</span> <span class="fm">__mod__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mod</span><span class="p">:</span>
+</span><span id="Condition-799"><a href="#Condition-799"><span class="linenos">799</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Mod</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-800"><a href="#Condition-800"><span class="linenos">800</span></a>
+</span><span id="Condition-801"><a href="#Condition-801"><span class="linenos">801</span></a> <span class="k">def</span> <span class="fm">__rmod__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mod</span><span class="p">:</span>
+</span><span id="Condition-802"><a href="#Condition-802"><span class="linenos">802</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Mod</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-803"><a href="#Condition-803"><span class="linenos">803</span></a>
+</span><span id="Condition-804"><a href="#Condition-804"><span class="linenos">804</span></a> <span class="k">def</span> <span class="fm">__pow__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Pow</span><span class="p">:</span>
+</span><span id="Condition-805"><a href="#Condition-805"><span class="linenos">805</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Pow</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-806"><a href="#Condition-806"><span class="linenos">806</span></a>
+</span><span id="Condition-807"><a href="#Condition-807"><span class="linenos">807</span></a> <span class="k">def</span> <span class="fm">__rpow__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Pow</span><span class="p">:</span>
+</span><span id="Condition-808"><a href="#Condition-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Pow</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-809"><a href="#Condition-809"><span class="linenos">809</span></a>
+</span><span id="Condition-810"><a href="#Condition-810"><span class="linenos">810</span></a> <span class="k">def</span> <span class="fm">__and__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">And</span><span class="p">:</span>
+</span><span id="Condition-811"><a href="#Condition-811"><span class="linenos">811</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">And</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-812"><a href="#Condition-812"><span class="linenos">812</span></a>
+</span><span id="Condition-813"><a href="#Condition-813"><span class="linenos">813</span></a> <span class="k">def</span> <span class="fm">__rand__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">And</span><span class="p">:</span>
+</span><span id="Condition-814"><a href="#Condition-814"><span class="linenos">814</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">And</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-815"><a href="#Condition-815"><span class="linenos">815</span></a>
+</span><span id="Condition-816"><a href="#Condition-816"><span class="linenos">816</span></a> <span class="k">def</span> <span class="fm">__or__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Or</span><span class="p">:</span>
+</span><span id="Condition-817"><a href="#Condition-817"><span class="linenos">817</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Or</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span><span id="Condition-818"><a href="#Condition-818"><span class="linenos">818</span></a>
+</span><span id="Condition-819"><a href="#Condition-819"><span class="linenos">819</span></a> <span class="k">def</span> <span class="fm">__ror__</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Or</span><span class="p">:</span>
+</span><span id="Condition-820"><a href="#Condition-820"><span class="linenos">820</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Or</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Condition-821"><a href="#Condition-821"><span class="linenos">821</span></a>
+</span><span id="Condition-822"><a href="#Condition-822"><span class="linenos">822</span></a> <span class="k">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Neg</span><span class="p">:</span>
+</span><span id="Condition-823"><a href="#Condition-823"><span class="linenos">823</span></a> <span class="k">return</span> <span class="n">Neg</span><span class="p">(</span><span class="n">this</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">copy</span><span class="p">(),</span> <span class="n">Binary</span><span class="p">))</span>
+</span><span id="Condition-824"><a href="#Condition-824"><span class="linenos">824</span></a>
+</span><span id="Condition-825"><a href="#Condition-825"><span class="linenos">825</span></a> <span class="k">def</span> <span class="fm">__invert__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Not</span><span class="p">:</span>
+</span><span id="Condition-826"><a href="#Condition-826"><span class="linenos">826</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
</span></pre></div>
@@ -10176,13 +10478,13 @@ to check that the provided arguments don't exceed the function argument limit.</
<div class="attr function">
<span class="def">def</span>
- <span class="name">and_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">):</span></span>
+ <span class="name">and_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Condition.and_-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Condition.and_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.and_-654"><a href="#Condition.and_-654"><span class="linenos">654</span></a> <span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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="Condition.and_-654"><a href="#Condition.and_-654"><span class="linenos">654</span></a> <span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Condition.and_-655"><a href="#Condition.and_-655"><span class="linenos">655</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Condition.and_-656"><a href="#Condition.and_-656"><span class="linenos">656</span></a><span class="sd"> AND this condition with one or multiple expressions.</span>
</span><span id="Condition.and_-657"><a href="#Condition.and_-657"><span class="linenos">657</span></a>
@@ -10194,12 +10496,13 @@ to check that the provided arguments don't exceed the function argument limit.</
</span><span id="Condition.and_-663"><a href="#Condition.and_-663"><span class="linenos">663</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
</span><span id="Condition.and_-664"><a href="#Condition.and_-664"><span class="linenos">664</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
</span><span id="Condition.and_-665"><a href="#Condition.and_-665"><span class="linenos">665</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Condition.and_-666"><a href="#Condition.and_-666"><span class="linenos">666</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Condition.and_-667"><a href="#Condition.and_-667"><span class="linenos">667</span></a>
-</span><span id="Condition.and_-668"><a href="#Condition.and_-668"><span class="linenos">668</span></a><span class="sd"> Returns:</span>
-</span><span id="Condition.and_-669"><a href="#Condition.and_-669"><span class="linenos">669</span></a><span class="sd"> And: the new condition.</span>
-</span><span id="Condition.and_-670"><a href="#Condition.and_-670"><span class="linenos">670</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Condition.and_-671"><a href="#Condition.and_-671"><span class="linenos">671</span></a> <span class="k">return</span> <span class="n">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Condition.and_-666"><a href="#Condition.and_-666"><span class="linenos">666</span></a><span class="sd"> copy (bool): whether or not to copy the involved expressions (only applies to Expressions).</span>
+</span><span id="Condition.and_-667"><a href="#Condition.and_-667"><span class="linenos">667</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Condition.and_-668"><a href="#Condition.and_-668"><span class="linenos">668</span></a>
+</span><span id="Condition.and_-669"><a href="#Condition.and_-669"><span class="linenos">669</span></a><span class="sd"> Returns:</span>
+</span><span id="Condition.and_-670"><a href="#Condition.and_-670"><span class="linenos">670</span></a><span class="sd"> And: the new condition.</span>
+</span><span id="Condition.and_-671"><a href="#Condition.and_-671"><span class="linenos">671</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Condition.and_-672"><a href="#Condition.and_-672"><span class="linenos">672</span></a> <span class="k">return</span> <span class="n">and_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -10221,6 +10524,7 @@ to check that the provided arguments don't exceed the function argument limit.</
<li><strong>*expressions (str | Expression):</strong> the SQL code strings to parse.
If an <code><a href="#Expression">Expression</a></code> instance is passed, it will be used as-is.</li>
<li><strong>dialect (str):</strong> the dialect used to parse the input expression.</li>
+<li><strong>copy (bool):</strong> whether or not to copy the involved expressions (only applies to Expressions).</li>
<li><strong>opts (kwargs):</strong> other options to use to parse the input expressions.</li>
</ul>
@@ -10238,30 +10542,31 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr function">
<span class="def">def</span>
- <span class="name">or_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">):</span></span>
+ <span class="name">or_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Condition.or_-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Condition.or_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.or_-673"><a href="#Condition.or_-673"><span class="linenos">673</span></a> <span class="k">def</span> <span class="nf">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Condition.or_-674"><a href="#Condition.or_-674"><span class="linenos">674</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Condition.or_-675"><a href="#Condition.or_-675"><span class="linenos">675</span></a><span class="sd"> OR this condition with one or multiple expressions.</span>
-</span><span id="Condition.or_-676"><a href="#Condition.or_-676"><span class="linenos">676</span></a>
-</span><span id="Condition.or_-677"><a href="#Condition.or_-677"><span class="linenos">677</span></a><span class="sd"> Example:</span>
-</span><span id="Condition.or_-678"><a href="#Condition.or_-678"><span class="linenos">678</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).or_(&quot;y=1&quot;).sql()</span>
-</span><span id="Condition.or_-679"><a href="#Condition.or_-679"><span class="linenos">679</span></a><span class="sd"> &#39;x = 1 OR y = 1&#39;</span>
-</span><span id="Condition.or_-680"><a href="#Condition.or_-680"><span class="linenos">680</span></a>
-</span><span id="Condition.or_-681"><a href="#Condition.or_-681"><span class="linenos">681</span></a><span class="sd"> Args:</span>
-</span><span id="Condition.or_-682"><a href="#Condition.or_-682"><span class="linenos">682</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Condition.or_-683"><a href="#Condition.or_-683"><span class="linenos">683</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Condition.or_-684"><a href="#Condition.or_-684"><span class="linenos">684</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Condition.or_-685"><a href="#Condition.or_-685"><span class="linenos">685</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Condition.or_-686"><a href="#Condition.or_-686"><span class="linenos">686</span></a>
-</span><span id="Condition.or_-687"><a href="#Condition.or_-687"><span class="linenos">687</span></a><span class="sd"> Returns:</span>
-</span><span id="Condition.or_-688"><a href="#Condition.or_-688"><span class="linenos">688</span></a><span class="sd"> Or: the new condition.</span>
-</span><span id="Condition.or_-689"><a href="#Condition.or_-689"><span class="linenos">689</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Condition.or_-690"><a href="#Condition.or_-690"><span class="linenos">690</span></a> <span class="k">return</span> <span class="n">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.or_-674"><a href="#Condition.or_-674"><span class="linenos">674</span></a> <span class="k">def</span> <span class="nf">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Condition.or_-675"><a href="#Condition.or_-675"><span class="linenos">675</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Condition.or_-676"><a href="#Condition.or_-676"><span class="linenos">676</span></a><span class="sd"> OR this condition with one or multiple expressions.</span>
+</span><span id="Condition.or_-677"><a href="#Condition.or_-677"><span class="linenos">677</span></a>
+</span><span id="Condition.or_-678"><a href="#Condition.or_-678"><span class="linenos">678</span></a><span class="sd"> Example:</span>
+</span><span id="Condition.or_-679"><a href="#Condition.or_-679"><span class="linenos">679</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).or_(&quot;y=1&quot;).sql()</span>
+</span><span id="Condition.or_-680"><a href="#Condition.or_-680"><span class="linenos">680</span></a><span class="sd"> &#39;x = 1 OR y = 1&#39;</span>
+</span><span id="Condition.or_-681"><a href="#Condition.or_-681"><span class="linenos">681</span></a>
+</span><span id="Condition.or_-682"><a href="#Condition.or_-682"><span class="linenos">682</span></a><span class="sd"> Args:</span>
+</span><span id="Condition.or_-683"><a href="#Condition.or_-683"><span class="linenos">683</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Condition.or_-684"><a href="#Condition.or_-684"><span class="linenos">684</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Condition.or_-685"><a href="#Condition.or_-685"><span class="linenos">685</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Condition.or_-686"><a href="#Condition.or_-686"><span class="linenos">686</span></a><span class="sd"> copy (bool): whether or not to copy the involved expressions (only applies to Expressions).</span>
+</span><span id="Condition.or_-687"><a href="#Condition.or_-687"><span class="linenos">687</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Condition.or_-688"><a href="#Condition.or_-688"><span class="linenos">688</span></a>
+</span><span id="Condition.or_-689"><a href="#Condition.or_-689"><span class="linenos">689</span></a><span class="sd"> Returns:</span>
+</span><span id="Condition.or_-690"><a href="#Condition.or_-690"><span class="linenos">690</span></a><span class="sd"> Or: the new condition.</span>
+</span><span id="Condition.or_-691"><a href="#Condition.or_-691"><span class="linenos">691</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Condition.or_-692"><a href="#Condition.or_-692"><span class="linenos">692</span></a> <span class="k">return</span> <span class="n">or_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -10283,6 +10588,7 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<li><strong>*expressions (str | Expression):</strong> the SQL code strings to parse.
If an <code><a href="#Expression">Expression</a></code> instance is passed, it will be used as-is.</li>
<li><strong>dialect (str):</strong> the dialect used to parse the input expression.</li>
+<li><strong>copy (bool):</strong> whether or not to copy the involved expressions (only applies to Expressions).</li>
<li><strong>opts (kwargs):</strong> other options to use to parse the input expressions.</li>
</ul>
@@ -10300,24 +10606,27 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<div class="attr function">
<span class="def">def</span>
- <span class="name">not_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
+ <span class="name">not_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Condition.not_-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Condition.not_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.not_-692"><a href="#Condition.not_-692"><span class="linenos">692</span></a> <span class="k">def</span> <span class="nf">not_</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Condition.not_-693"><a href="#Condition.not_-693"><span class="linenos">693</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Condition.not_-694"><a href="#Condition.not_-694"><span class="linenos">694</span></a><span class="sd"> Wrap this condition with NOT.</span>
-</span><span id="Condition.not_-695"><a href="#Condition.not_-695"><span class="linenos">695</span></a>
-</span><span id="Condition.not_-696"><a href="#Condition.not_-696"><span class="linenos">696</span></a><span class="sd"> Example:</span>
-</span><span id="Condition.not_-697"><a href="#Condition.not_-697"><span class="linenos">697</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).not_().sql()</span>
-</span><span id="Condition.not_-698"><a href="#Condition.not_-698"><span class="linenos">698</span></a><span class="sd"> &#39;NOT x = 1&#39;</span>
-</span><span id="Condition.not_-699"><a href="#Condition.not_-699"><span class="linenos">699</span></a>
-</span><span id="Condition.not_-700"><a href="#Condition.not_-700"><span class="linenos">700</span></a><span class="sd"> Returns:</span>
-</span><span id="Condition.not_-701"><a href="#Condition.not_-701"><span class="linenos">701</span></a><span class="sd"> Not: the new condition.</span>
-</span><span id="Condition.not_-702"><a href="#Condition.not_-702"><span class="linenos">702</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Condition.not_-703"><a href="#Condition.not_-703"><span class="linenos">703</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.not_-694"><a href="#Condition.not_-694"><span class="linenos">694</span></a> <span class="k">def</span> <span class="nf">not_</span><span class="p">(</span><span class="bp">self</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="Condition.not_-695"><a href="#Condition.not_-695"><span class="linenos">695</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Condition.not_-696"><a href="#Condition.not_-696"><span class="linenos">696</span></a><span class="sd"> Wrap this condition with NOT.</span>
+</span><span id="Condition.not_-697"><a href="#Condition.not_-697"><span class="linenos">697</span></a>
+</span><span id="Condition.not_-698"><a href="#Condition.not_-698"><span class="linenos">698</span></a><span class="sd"> Example:</span>
+</span><span id="Condition.not_-699"><a href="#Condition.not_-699"><span class="linenos">699</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).not_().sql()</span>
+</span><span id="Condition.not_-700"><a href="#Condition.not_-700"><span class="linenos">700</span></a><span class="sd"> &#39;NOT x = 1&#39;</span>
+</span><span id="Condition.not_-701"><a href="#Condition.not_-701"><span class="linenos">701</span></a>
+</span><span id="Condition.not_-702"><a href="#Condition.not_-702"><span class="linenos">702</span></a><span class="sd"> Args:</span>
+</span><span id="Condition.not_-703"><a href="#Condition.not_-703"><span class="linenos">703</span></a><span class="sd"> copy (bool): whether or not to copy this object.</span>
+</span><span id="Condition.not_-704"><a href="#Condition.not_-704"><span class="linenos">704</span></a>
+</span><span id="Condition.not_-705"><a href="#Condition.not_-705"><span class="linenos">705</span></a><span class="sd"> Returns:</span>
+</span><span id="Condition.not_-706"><a href="#Condition.not_-706"><span class="linenos">706</span></a><span class="sd"> Not: the new condition.</span>
+</span><span id="Condition.not_-707"><a href="#Condition.not_-707"><span class="linenos">707</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Condition.not_-708"><a href="#Condition.not_-708"><span class="linenos">708</span></a> <span class="k">return</span> <span class="n">not_</span><span class="p">(</span><span class="bp">self</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>
@@ -10333,6 +10642,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
</blockquote>
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>copy (bool):</strong> whether or not to copy this object.</li>
+</ul>
+
<h6 id="returns">Returns:</h6>
<blockquote>
@@ -10342,6 +10657,149 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
+ <div id="Condition.isin" class="classattr">
+ <input id="Condition.isin-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">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">expressions</span><span class="p">:</span> <span class="n">Any</span>,</span><span class="param"> <span class="n">query</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"><a href="#Expression">sqlglot.expressions.Expression</a></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">copy</span><span class="o">=</span><span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#In">sqlglot.expressions.In</a></span>:</span></span>
+
+ <label class="view-source-button" for="Condition.isin-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Condition.isin"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.isin-725"><a href="#Condition.isin-725"><span class="linenos">725</span></a> <span class="k">def</span> <span class="nf">isin</span><span class="p">(</span>
+</span><span id="Condition.isin-726"><a href="#Condition.isin-726"><span class="linenos">726</span></a> <span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</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="n">query</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Condition.isin-727"><a href="#Condition.isin-727"><span class="linenos">727</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">In</span><span class="p">:</span>
+</span><span id="Condition.isin-728"><a href="#Condition.isin-728"><span class="linenos">728</span></a> <span class="k">return</span> <span class="n">In</span><span class="p">(</span>
+</span><span id="Condition.isin-729"><a href="#Condition.isin-729"><span class="linenos">729</span></a> <span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">),</span>
+</span><span id="Condition.isin-730"><a href="#Condition.isin-730"><span class="linenos">730</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</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="Condition.isin-731"><a href="#Condition.isin-731"><span class="linenos">731</span></a> <span class="n">query</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</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">query</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Condition.isin-732"><a href="#Condition.isin-732"><span class="linenos">732</span></a> <span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Condition.between" class="classattr">
+ <input id="Condition.between-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">between</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">low</span><span class="p">:</span> <span class="n">Any</span>,</span><span class="param"> <span class="n">high</span><span class="p">:</span> <span class="n">Any</span>,</span><span class="param"> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Between">sqlglot.expressions.Between</a></span>:</span></span>
+
+ <label class="view-source-button" for="Condition.between-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Condition.between"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.between-734"><a href="#Condition.between-734"><span class="linenos">734</span></a> <span class="k">def</span> <span class="nf">between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">low</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="n">high</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="n">copy</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="n">Between</span><span class="p">:</span>
+</span><span id="Condition.between-735"><a href="#Condition.between-735"><span class="linenos">735</span></a> <span class="k">return</span> <span class="n">Between</span><span class="p">(</span>
+</span><span id="Condition.between-736"><a href="#Condition.between-736"><span class="linenos">736</span></a> <span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">),</span>
+</span><span id="Condition.between-737"><a href="#Condition.between-737"><span class="linenos">737</span></a> <span class="n">low</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Condition.between-738"><a href="#Condition.between-738"><span class="linenos">738</span></a> <span class="n">high</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">high</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Condition.between-739"><a href="#Condition.between-739"><span class="linenos">739</span></a> <span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Condition.like" class="classattr">
+ <input id="Condition.like-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">like</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">other</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#Like">sqlglot.expressions.Like</a></span>:</span></span>
+
+ <label class="view-source-button" for="Condition.like-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Condition.like"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.like-741"><a href="#Condition.like-741"><span class="linenos">741</span></a> <span class="k">def</span> <span class="nf">like</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Like</span><span class="p">:</span>
+</span><span id="Condition.like-742"><a href="#Condition.like-742"><span class="linenos">742</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">Like</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Condition.ilike" class="classattr">
+ <input id="Condition.ilike-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">ilike</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">other</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#ILike">sqlglot.expressions.ILike</a></span>:</span></span>
+
+ <label class="view-source-button" for="Condition.ilike-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Condition.ilike"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.ilike-744"><a href="#Condition.ilike-744"><span class="linenos">744</span></a> <span class="k">def</span> <span class="nf">ilike</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ILike</span><span class="p">:</span>
+</span><span id="Condition.ilike-745"><a href="#Condition.ilike-745"><span class="linenos">745</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">ILike</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Condition.eq" class="classattr">
+ <input id="Condition.eq-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">eq</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">other</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#EQ">sqlglot.expressions.EQ</a></span>:</span></span>
+
+ <label class="view-source-button" for="Condition.eq-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Condition.eq"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.eq-747"><a href="#Condition.eq-747"><span class="linenos">747</span></a> <span class="k">def</span> <span class="nf">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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">EQ</span><span class="p">:</span>
+</span><span id="Condition.eq-748"><a href="#Condition.eq-748"><span class="linenos">748</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">EQ</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Condition.neq" class="classattr">
+ <input id="Condition.neq-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">neq</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">other</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#NEQ">sqlglot.expressions.NEQ</a></span>:</span></span>
+
+ <label class="view-source-button" for="Condition.neq-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Condition.neq"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.neq-750"><a href="#Condition.neq-750"><span class="linenos">750</span></a> <span class="k">def</span> <span class="nf">neq</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NEQ</span><span class="p">:</span>
+</span><span id="Condition.neq-751"><a href="#Condition.neq-751"><span class="linenos">751</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">NEQ</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Condition.rlike" class="classattr">
+ <input id="Condition.rlike-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">rlike</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">other</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span></span><span class="return-annotation">) -> <span class="n"><a href="#RegexpLike">sqlglot.expressions.RegexpLike</a></span>:</span></span>
+
+ <label class="view-source-button" for="Condition.rlike-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Condition.rlike"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Condition.rlike-753"><a href="#Condition.rlike-753"><span class="linenos">753</span></a> <span class="k">def</span> <span class="nf">rlike</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">ExpOrStr</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">RegexpLike</span><span class="p">:</span>
+</span><span id="Condition.rlike-754"><a href="#Condition.rlike-754"><span class="linenos">754</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_binop</span><span class="p">(</span><span class="n">RegexpLike</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span>
+</span></pre></div>
+
+
+
+
+ </div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
@@ -10399,8 +10857,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Predicate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Predicate-706"><a href="#Predicate-706"><span class="linenos">706</span></a><span class="k">class</span> <span class="nc">Predicate</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Predicate-707"><a href="#Predicate-707"><span class="linenos">707</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Relationships like x = y, x &gt; 1, x &gt;= y.&quot;&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Predicate-829"><a href="#Predicate-829"><span class="linenos">829</span></a><span class="k">class</span> <span class="nc">Predicate</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Predicate-830"><a href="#Predicate-830"><span class="linenos">830</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Relationships like x = y, x &gt; 1, x &gt;= y.&quot;&quot;&quot;</span>
</span></pre></div>
@@ -10455,6 +10913,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<dd id="Predicate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Predicate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Predicate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Predicate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Predicate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Predicate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Predicate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Predicate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Predicate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Predicate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -10471,26 +10936,26 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DerivedTable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DerivedTable-710"><a href="#DerivedTable-710"><span class="linenos">710</span></a><span class="k">class</span> <span class="nc">DerivedTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="DerivedTable-711"><a href="#DerivedTable-711"><span class="linenos">711</span></a> <span class="nd">@property</span>
-</span><span id="DerivedTable-712"><a href="#DerivedTable-712"><span class="linenos">712</span></a> <span class="k">def</span> <span class="nf">alias_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DerivedTable-713"><a href="#DerivedTable-713"><span class="linenos">713</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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="DerivedTable-714"><a href="#DerivedTable-714"><span class="linenos">714</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_alias</span><span class="p">:</span>
-</span><span id="DerivedTable-715"><a href="#DerivedTable-715"><span class="linenos">715</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="DerivedTable-716"><a href="#DerivedTable-716"><span class="linenos">716</span></a> <span class="n">column_list</span> <span class="o">=</span> <span class="n">table_alias</span><span class="o">.</span><span class="n">assert_is</span><span class="p">(</span><span class="n">TableAlias</span><span class="p">)</span><span class="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="DerivedTable-717"><a href="#DerivedTable-717"><span class="linenos">717</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">column_list</span><span class="p">]</span>
-</span><span id="DerivedTable-718"><a href="#DerivedTable-718"><span class="linenos">718</span></a>
-</span><span id="DerivedTable-719"><a href="#DerivedTable-719"><span class="linenos">719</span></a> <span class="nd">@property</span>
-</span><span id="DerivedTable-720"><a href="#DerivedTable-720"><span class="linenos">720</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DerivedTable-721"><a href="#DerivedTable-721"><span class="linenos">721</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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="DerivedTable-722"><a href="#DerivedTable-722"><span class="linenos">722</span></a>
-</span><span id="DerivedTable-723"><a href="#DerivedTable-723"><span class="linenos">723</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="DerivedTable-724"><a href="#DerivedTable-724"><span class="linenos">724</span></a> <span class="k">return</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
-</span><span id="DerivedTable-725"><a href="#DerivedTable-725"><span class="linenos">725</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="DerivedTable-726"><a href="#DerivedTable-726"><span class="linenos">726</span></a>
-</span><span id="DerivedTable-727"><a href="#DerivedTable-727"><span class="linenos">727</span></a> <span class="nd">@property</span>
-</span><span id="DerivedTable-728"><a href="#DerivedTable-728"><span class="linenos">728</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="DerivedTable-729"><a href="#DerivedTable-729"><span class="linenos">729</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selects</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DerivedTable-833"><a href="#DerivedTable-833"><span class="linenos">833</span></a><span class="k">class</span> <span class="nc">DerivedTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="DerivedTable-834"><a href="#DerivedTable-834"><span class="linenos">834</span></a> <span class="nd">@property</span>
+</span><span id="DerivedTable-835"><a href="#DerivedTable-835"><span class="linenos">835</span></a> <span class="k">def</span> <span class="nf">alias_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DerivedTable-836"><a href="#DerivedTable-836"><span class="linenos">836</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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="DerivedTable-837"><a href="#DerivedTable-837"><span class="linenos">837</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_alias</span><span class="p">:</span>
+</span><span id="DerivedTable-838"><a href="#DerivedTable-838"><span class="linenos">838</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="DerivedTable-839"><a href="#DerivedTable-839"><span class="linenos">839</span></a> <span class="n">column_list</span> <span class="o">=</span> <span class="n">table_alias</span><span class="o">.</span><span class="n">assert_is</span><span class="p">(</span><span class="n">TableAlias</span><span class="p">)</span><span class="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="DerivedTable-840"><a href="#DerivedTable-840"><span class="linenos">840</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">column_list</span><span class="p">]</span>
+</span><span id="DerivedTable-841"><a href="#DerivedTable-841"><span class="linenos">841</span></a>
+</span><span id="DerivedTable-842"><a href="#DerivedTable-842"><span class="linenos">842</span></a> <span class="nd">@property</span>
+</span><span id="DerivedTable-843"><a href="#DerivedTable-843"><span class="linenos">843</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DerivedTable-844"><a href="#DerivedTable-844"><span class="linenos">844</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="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="DerivedTable-845"><a href="#DerivedTable-845"><span class="linenos">845</span></a>
+</span><span id="DerivedTable-846"><a href="#DerivedTable-846"><span class="linenos">846</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="DerivedTable-847"><a href="#DerivedTable-847"><span class="linenos">847</span></a> <span class="k">return</span> <span class="n">alias</span><span class="o">.</span><span class="n">columns</span>
+</span><span id="DerivedTable-848"><a href="#DerivedTable-848"><span class="linenos">848</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="DerivedTable-849"><a href="#DerivedTable-849"><span class="linenos">849</span></a>
+</span><span id="DerivedTable-850"><a href="#DerivedTable-850"><span class="linenos">850</span></a> <span class="nd">@property</span>
+</span><span id="DerivedTable-851"><a href="#DerivedTable-851"><span class="linenos">851</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="DerivedTable-852"><a href="#DerivedTable-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">select</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">selects</span><span class="p">]</span>
</span></pre></div>
@@ -10553,66 +11018,66 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Unionable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable-732"><a href="#Unionable-732"><span class="linenos">732</span></a><span class="k">class</span> <span class="nc">Unionable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Unionable-733"><a href="#Unionable-733"><span class="linenos">733</span></a> <span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Unionable-734"><a href="#Unionable-734"><span class="linenos">734</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Unionable-735"><a href="#Unionable-735"><span class="linenos">735</span></a><span class="sd"> Builds a UNION expression.</span>
-</span><span id="Unionable-736"><a href="#Unionable-736"><span class="linenos">736</span></a>
-</span><span id="Unionable-737"><a href="#Unionable-737"><span class="linenos">737</span></a><span class="sd"> Example:</span>
-</span><span id="Unionable-738"><a href="#Unionable-738"><span class="linenos">738</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Unionable-739"><a href="#Unionable-739"><span class="linenos">739</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).union(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="Unionable-740"><a href="#Unionable-740"><span class="linenos">740</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
-</span><span id="Unionable-741"><a href="#Unionable-741"><span class="linenos">741</span></a>
-</span><span id="Unionable-742"><a href="#Unionable-742"><span class="linenos">742</span></a><span class="sd"> Args:</span>
-</span><span id="Unionable-743"><a href="#Unionable-743"><span class="linenos">743</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="Unionable-744"><a href="#Unionable-744"><span class="linenos">744</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Unionable-745"><a href="#Unionable-745"><span class="linenos">745</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="Unionable-746"><a href="#Unionable-746"><span class="linenos">746</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Unionable-747"><a href="#Unionable-747"><span class="linenos">747</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Unionable-748"><a href="#Unionable-748"><span class="linenos">748</span></a><span class="sd"> Returns:</span>
-</span><span id="Unionable-749"><a href="#Unionable-749"><span class="linenos">749</span></a><span class="sd"> Union: the Union expression.</span>
-</span><span id="Unionable-750"><a href="#Unionable-750"><span class="linenos">750</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Unionable-751"><a href="#Unionable-751"><span class="linenos">751</span></a> <span class="k">return</span> <span class="n">union</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Unionable-752"><a href="#Unionable-752"><span class="linenos">752</span></a>
-</span><span id="Unionable-753"><a href="#Unionable-753"><span class="linenos">753</span></a> <span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Unionable-754"><a href="#Unionable-754"><span class="linenos">754</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Unionable-755"><a href="#Unionable-755"><span class="linenos">755</span></a><span class="sd"> Builds an INTERSECT expression.</span>
-</span><span id="Unionable-756"><a href="#Unionable-756"><span class="linenos">756</span></a>
-</span><span id="Unionable-757"><a href="#Unionable-757"><span class="linenos">757</span></a><span class="sd"> Example:</span>
-</span><span id="Unionable-758"><a href="#Unionable-758"><span class="linenos">758</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Unionable-759"><a href="#Unionable-759"><span class="linenos">759</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).intersect(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="Unionable-760"><a href="#Unionable-760"><span class="linenos">760</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
-</span><span id="Unionable-761"><a href="#Unionable-761"><span class="linenos">761</span></a>
-</span><span id="Unionable-762"><a href="#Unionable-762"><span class="linenos">762</span></a><span class="sd"> Args:</span>
-</span><span id="Unionable-763"><a href="#Unionable-763"><span class="linenos">763</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="Unionable-764"><a href="#Unionable-764"><span class="linenos">764</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Unionable-765"><a href="#Unionable-765"><span class="linenos">765</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="Unionable-766"><a href="#Unionable-766"><span class="linenos">766</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Unionable-767"><a href="#Unionable-767"><span class="linenos">767</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Unionable-768"><a href="#Unionable-768"><span class="linenos">768</span></a><span class="sd"> Returns:</span>
-</span><span id="Unionable-769"><a href="#Unionable-769"><span class="linenos">769</span></a><span class="sd"> Intersect: the Intersect expression</span>
-</span><span id="Unionable-770"><a href="#Unionable-770"><span class="linenos">770</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Unionable-771"><a href="#Unionable-771"><span class="linenos">771</span></a> <span class="k">return</span> <span class="n">intersect</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Unionable-772"><a href="#Unionable-772"><span class="linenos">772</span></a>
-</span><span id="Unionable-773"><a href="#Unionable-773"><span class="linenos">773</span></a> <span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Unionable-774"><a href="#Unionable-774"><span class="linenos">774</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Unionable-775"><a href="#Unionable-775"><span class="linenos">775</span></a><span class="sd"> Builds an EXCEPT expression.</span>
-</span><span id="Unionable-776"><a href="#Unionable-776"><span class="linenos">776</span></a>
-</span><span id="Unionable-777"><a href="#Unionable-777"><span class="linenos">777</span></a><span class="sd"> Example:</span>
-</span><span id="Unionable-778"><a href="#Unionable-778"><span class="linenos">778</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Unionable-779"><a href="#Unionable-779"><span class="linenos">779</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).except_(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="Unionable-780"><a href="#Unionable-780"><span class="linenos">780</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
-</span><span id="Unionable-781"><a href="#Unionable-781"><span class="linenos">781</span></a>
-</span><span id="Unionable-782"><a href="#Unionable-782"><span class="linenos">782</span></a><span class="sd"> Args:</span>
-</span><span id="Unionable-783"><a href="#Unionable-783"><span class="linenos">783</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="Unionable-784"><a href="#Unionable-784"><span class="linenos">784</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Unionable-785"><a href="#Unionable-785"><span class="linenos">785</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="Unionable-786"><a href="#Unionable-786"><span class="linenos">786</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Unionable-787"><a href="#Unionable-787"><span class="linenos">787</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Unionable-788"><a href="#Unionable-788"><span class="linenos">788</span></a><span class="sd"> Returns:</span>
-</span><span id="Unionable-789"><a href="#Unionable-789"><span class="linenos">789</span></a><span class="sd"> Except: the Except expression</span>
-</span><span id="Unionable-790"><a href="#Unionable-790"><span class="linenos">790</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Unionable-791"><a href="#Unionable-791"><span class="linenos">791</span></a> <span class="k">return</span> <span class="n">except_</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable-855"><a href="#Unionable-855"><span class="linenos">855</span></a><span class="k">class</span> <span class="nc">Unionable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Unionable-856"><a href="#Unionable-856"><span class="linenos">856</span></a> <span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="Unionable-857"><a href="#Unionable-857"><span class="linenos">857</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Unionable-858"><a href="#Unionable-858"><span class="linenos">858</span></a><span class="sd"> Builds a UNION expression.</span>
+</span><span id="Unionable-859"><a href="#Unionable-859"><span class="linenos">859</span></a>
+</span><span id="Unionable-860"><a href="#Unionable-860"><span class="linenos">860</span></a><span class="sd"> Example:</span>
+</span><span id="Unionable-861"><a href="#Unionable-861"><span class="linenos">861</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Unionable-862"><a href="#Unionable-862"><span class="linenos">862</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).union(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="Unionable-863"><a href="#Unionable-863"><span class="linenos">863</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
+</span><span id="Unionable-864"><a href="#Unionable-864"><span class="linenos">864</span></a>
+</span><span id="Unionable-865"><a href="#Unionable-865"><span class="linenos">865</span></a><span class="sd"> Args:</span>
+</span><span id="Unionable-866"><a href="#Unionable-866"><span class="linenos">866</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="Unionable-867"><a href="#Unionable-867"><span class="linenos">867</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Unionable-868"><a href="#Unionable-868"><span class="linenos">868</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="Unionable-869"><a href="#Unionable-869"><span class="linenos">869</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Unionable-870"><a href="#Unionable-870"><span class="linenos">870</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Unionable-871"><a href="#Unionable-871"><span class="linenos">871</span></a><span class="sd"> Returns:</span>
+</span><span id="Unionable-872"><a href="#Unionable-872"><span class="linenos">872</span></a><span class="sd"> Union: the Union expression.</span>
+</span><span id="Unionable-873"><a href="#Unionable-873"><span class="linenos">873</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Unionable-874"><a href="#Unionable-874"><span class="linenos">874</span></a> <span class="k">return</span> <span class="n">union</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Unionable-875"><a href="#Unionable-875"><span class="linenos">875</span></a>
+</span><span id="Unionable-876"><a href="#Unionable-876"><span class="linenos">876</span></a> <span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="Unionable-877"><a href="#Unionable-877"><span class="linenos">877</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Unionable-878"><a href="#Unionable-878"><span class="linenos">878</span></a><span class="sd"> Builds an INTERSECT expression.</span>
+</span><span id="Unionable-879"><a href="#Unionable-879"><span class="linenos">879</span></a>
+</span><span id="Unionable-880"><a href="#Unionable-880"><span class="linenos">880</span></a><span class="sd"> Example:</span>
+</span><span id="Unionable-881"><a href="#Unionable-881"><span class="linenos">881</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Unionable-882"><a href="#Unionable-882"><span class="linenos">882</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).intersect(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="Unionable-883"><a href="#Unionable-883"><span class="linenos">883</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
+</span><span id="Unionable-884"><a href="#Unionable-884"><span class="linenos">884</span></a>
+</span><span id="Unionable-885"><a href="#Unionable-885"><span class="linenos">885</span></a><span class="sd"> Args:</span>
+</span><span id="Unionable-886"><a href="#Unionable-886"><span class="linenos">886</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="Unionable-887"><a href="#Unionable-887"><span class="linenos">887</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Unionable-888"><a href="#Unionable-888"><span class="linenos">888</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="Unionable-889"><a href="#Unionable-889"><span class="linenos">889</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Unionable-890"><a href="#Unionable-890"><span class="linenos">890</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Unionable-891"><a href="#Unionable-891"><span class="linenos">891</span></a><span class="sd"> Returns:</span>
+</span><span id="Unionable-892"><a href="#Unionable-892"><span class="linenos">892</span></a><span class="sd"> Intersect: the Intersect expression</span>
+</span><span id="Unionable-893"><a href="#Unionable-893"><span class="linenos">893</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Unionable-894"><a href="#Unionable-894"><span class="linenos">894</span></a> <span class="k">return</span> <span class="n">intersect</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Unionable-895"><a href="#Unionable-895"><span class="linenos">895</span></a>
+</span><span id="Unionable-896"><a href="#Unionable-896"><span class="linenos">896</span></a> <span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="Unionable-897"><a href="#Unionable-897"><span class="linenos">897</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Unionable-898"><a href="#Unionable-898"><span class="linenos">898</span></a><span class="sd"> Builds an EXCEPT expression.</span>
+</span><span id="Unionable-899"><a href="#Unionable-899"><span class="linenos">899</span></a>
+</span><span id="Unionable-900"><a href="#Unionable-900"><span class="linenos">900</span></a><span class="sd"> Example:</span>
+</span><span id="Unionable-901"><a href="#Unionable-901"><span class="linenos">901</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Unionable-902"><a href="#Unionable-902"><span class="linenos">902</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).except_(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="Unionable-903"><a href="#Unionable-903"><span class="linenos">903</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
+</span><span id="Unionable-904"><a href="#Unionable-904"><span class="linenos">904</span></a>
+</span><span id="Unionable-905"><a href="#Unionable-905"><span class="linenos">905</span></a><span class="sd"> Args:</span>
+</span><span id="Unionable-906"><a href="#Unionable-906"><span class="linenos">906</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="Unionable-907"><a href="#Unionable-907"><span class="linenos">907</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Unionable-908"><a href="#Unionable-908"><span class="linenos">908</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="Unionable-909"><a href="#Unionable-909"><span class="linenos">909</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Unionable-910"><a href="#Unionable-910"><span class="linenos">910</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Unionable-911"><a href="#Unionable-911"><span class="linenos">911</span></a><span class="sd"> Returns:</span>
+</span><span id="Unionable-912"><a href="#Unionable-912"><span class="linenos">912</span></a><span class="sd"> Except: the Except expression</span>
+</span><span id="Unionable-913"><a href="#Unionable-913"><span class="linenos">913</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Unionable-914"><a href="#Unionable-914"><span class="linenos">914</span></a> <span class="k">return</span> <span class="n">except_</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -10629,25 +11094,25 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Unionable.union"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable.union-733"><a href="#Unionable.union-733"><span class="linenos">733</span></a> <span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Unionable.union-734"><a href="#Unionable.union-734"><span class="linenos">734</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Unionable.union-735"><a href="#Unionable.union-735"><span class="linenos">735</span></a><span class="sd"> Builds a UNION expression.</span>
-</span><span id="Unionable.union-736"><a href="#Unionable.union-736"><span class="linenos">736</span></a>
-</span><span id="Unionable.union-737"><a href="#Unionable.union-737"><span class="linenos">737</span></a><span class="sd"> Example:</span>
-</span><span id="Unionable.union-738"><a href="#Unionable.union-738"><span class="linenos">738</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Unionable.union-739"><a href="#Unionable.union-739"><span class="linenos">739</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).union(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="Unionable.union-740"><a href="#Unionable.union-740"><span class="linenos">740</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
-</span><span id="Unionable.union-741"><a href="#Unionable.union-741"><span class="linenos">741</span></a>
-</span><span id="Unionable.union-742"><a href="#Unionable.union-742"><span class="linenos">742</span></a><span class="sd"> Args:</span>
-</span><span id="Unionable.union-743"><a href="#Unionable.union-743"><span class="linenos">743</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="Unionable.union-744"><a href="#Unionable.union-744"><span class="linenos">744</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Unionable.union-745"><a href="#Unionable.union-745"><span class="linenos">745</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="Unionable.union-746"><a href="#Unionable.union-746"><span class="linenos">746</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Unionable.union-747"><a href="#Unionable.union-747"><span class="linenos">747</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Unionable.union-748"><a href="#Unionable.union-748"><span class="linenos">748</span></a><span class="sd"> Returns:</span>
-</span><span id="Unionable.union-749"><a href="#Unionable.union-749"><span class="linenos">749</span></a><span class="sd"> Union: the Union expression.</span>
-</span><span id="Unionable.union-750"><a href="#Unionable.union-750"><span class="linenos">750</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Unionable.union-751"><a href="#Unionable.union-751"><span class="linenos">751</span></a> <span class="k">return</span> <span class="n">union</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable.union-856"><a href="#Unionable.union-856"><span class="linenos">856</span></a> <span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="Unionable.union-857"><a href="#Unionable.union-857"><span class="linenos">857</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Unionable.union-858"><a href="#Unionable.union-858"><span class="linenos">858</span></a><span class="sd"> Builds a UNION expression.</span>
+</span><span id="Unionable.union-859"><a href="#Unionable.union-859"><span class="linenos">859</span></a>
+</span><span id="Unionable.union-860"><a href="#Unionable.union-860"><span class="linenos">860</span></a><span class="sd"> Example:</span>
+</span><span id="Unionable.union-861"><a href="#Unionable.union-861"><span class="linenos">861</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Unionable.union-862"><a href="#Unionable.union-862"><span class="linenos">862</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).union(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="Unionable.union-863"><a href="#Unionable.union-863"><span class="linenos">863</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
+</span><span id="Unionable.union-864"><a href="#Unionable.union-864"><span class="linenos">864</span></a>
+</span><span id="Unionable.union-865"><a href="#Unionable.union-865"><span class="linenos">865</span></a><span class="sd"> Args:</span>
+</span><span id="Unionable.union-866"><a href="#Unionable.union-866"><span class="linenos">866</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="Unionable.union-867"><a href="#Unionable.union-867"><span class="linenos">867</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Unionable.union-868"><a href="#Unionable.union-868"><span class="linenos">868</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="Unionable.union-869"><a href="#Unionable.union-869"><span class="linenos">869</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Unionable.union-870"><a href="#Unionable.union-870"><span class="linenos">870</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Unionable.union-871"><a href="#Unionable.union-871"><span class="linenos">871</span></a><span class="sd"> Returns:</span>
+</span><span id="Unionable.union-872"><a href="#Unionable.union-872"><span class="linenos">872</span></a><span class="sd"> Union: the Union expression.</span>
+</span><span id="Unionable.union-873"><a href="#Unionable.union-873"><span class="linenos">873</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Unionable.union-874"><a href="#Unionable.union-874"><span class="linenos">874</span></a> <span class="k">return</span> <span class="n">union</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -10694,25 +11159,25 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Unionable.intersect"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable.intersect-753"><a href="#Unionable.intersect-753"><span class="linenos">753</span></a> <span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Unionable.intersect-754"><a href="#Unionable.intersect-754"><span class="linenos">754</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Unionable.intersect-755"><a href="#Unionable.intersect-755"><span class="linenos">755</span></a><span class="sd"> Builds an INTERSECT expression.</span>
-</span><span id="Unionable.intersect-756"><a href="#Unionable.intersect-756"><span class="linenos">756</span></a>
-</span><span id="Unionable.intersect-757"><a href="#Unionable.intersect-757"><span class="linenos">757</span></a><span class="sd"> Example:</span>
-</span><span id="Unionable.intersect-758"><a href="#Unionable.intersect-758"><span class="linenos">758</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Unionable.intersect-759"><a href="#Unionable.intersect-759"><span class="linenos">759</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).intersect(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="Unionable.intersect-760"><a href="#Unionable.intersect-760"><span class="linenos">760</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
-</span><span id="Unionable.intersect-761"><a href="#Unionable.intersect-761"><span class="linenos">761</span></a>
-</span><span id="Unionable.intersect-762"><a href="#Unionable.intersect-762"><span class="linenos">762</span></a><span class="sd"> Args:</span>
-</span><span id="Unionable.intersect-763"><a href="#Unionable.intersect-763"><span class="linenos">763</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="Unionable.intersect-764"><a href="#Unionable.intersect-764"><span class="linenos">764</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Unionable.intersect-765"><a href="#Unionable.intersect-765"><span class="linenos">765</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="Unionable.intersect-766"><a href="#Unionable.intersect-766"><span class="linenos">766</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Unionable.intersect-767"><a href="#Unionable.intersect-767"><span class="linenos">767</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Unionable.intersect-768"><a href="#Unionable.intersect-768"><span class="linenos">768</span></a><span class="sd"> Returns:</span>
-</span><span id="Unionable.intersect-769"><a href="#Unionable.intersect-769"><span class="linenos">769</span></a><span class="sd"> Intersect: the Intersect expression</span>
-</span><span id="Unionable.intersect-770"><a href="#Unionable.intersect-770"><span class="linenos">770</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Unionable.intersect-771"><a href="#Unionable.intersect-771"><span class="linenos">771</span></a> <span class="k">return</span> <span class="n">intersect</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable.intersect-876"><a href="#Unionable.intersect-876"><span class="linenos">876</span></a> <span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="Unionable.intersect-877"><a href="#Unionable.intersect-877"><span class="linenos">877</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Unionable.intersect-878"><a href="#Unionable.intersect-878"><span class="linenos">878</span></a><span class="sd"> Builds an INTERSECT expression.</span>
+</span><span id="Unionable.intersect-879"><a href="#Unionable.intersect-879"><span class="linenos">879</span></a>
+</span><span id="Unionable.intersect-880"><a href="#Unionable.intersect-880"><span class="linenos">880</span></a><span class="sd"> Example:</span>
+</span><span id="Unionable.intersect-881"><a href="#Unionable.intersect-881"><span class="linenos">881</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Unionable.intersect-882"><a href="#Unionable.intersect-882"><span class="linenos">882</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).intersect(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="Unionable.intersect-883"><a href="#Unionable.intersect-883"><span class="linenos">883</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
+</span><span id="Unionable.intersect-884"><a href="#Unionable.intersect-884"><span class="linenos">884</span></a>
+</span><span id="Unionable.intersect-885"><a href="#Unionable.intersect-885"><span class="linenos">885</span></a><span class="sd"> Args:</span>
+</span><span id="Unionable.intersect-886"><a href="#Unionable.intersect-886"><span class="linenos">886</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="Unionable.intersect-887"><a href="#Unionable.intersect-887"><span class="linenos">887</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Unionable.intersect-888"><a href="#Unionable.intersect-888"><span class="linenos">888</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="Unionable.intersect-889"><a href="#Unionable.intersect-889"><span class="linenos">889</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Unionable.intersect-890"><a href="#Unionable.intersect-890"><span class="linenos">890</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Unionable.intersect-891"><a href="#Unionable.intersect-891"><span class="linenos">891</span></a><span class="sd"> Returns:</span>
+</span><span id="Unionable.intersect-892"><a href="#Unionable.intersect-892"><span class="linenos">892</span></a><span class="sd"> Intersect: the Intersect expression</span>
+</span><span id="Unionable.intersect-893"><a href="#Unionable.intersect-893"><span class="linenos">893</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Unionable.intersect-894"><a href="#Unionable.intersect-894"><span class="linenos">894</span></a> <span class="k">return</span> <span class="n">intersect</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -10759,25 +11224,25 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Unionable.except_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable.except_-773"><a href="#Unionable.except_-773"><span class="linenos">773</span></a> <span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="Unionable.except_-774"><a href="#Unionable.except_-774"><span class="linenos">774</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Unionable.except_-775"><a href="#Unionable.except_-775"><span class="linenos">775</span></a><span class="sd"> Builds an EXCEPT expression.</span>
-</span><span id="Unionable.except_-776"><a href="#Unionable.except_-776"><span class="linenos">776</span></a>
-</span><span id="Unionable.except_-777"><a href="#Unionable.except_-777"><span class="linenos">777</span></a><span class="sd"> Example:</span>
-</span><span id="Unionable.except_-778"><a href="#Unionable.except_-778"><span class="linenos">778</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Unionable.except_-779"><a href="#Unionable.except_-779"><span class="linenos">779</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).except_(&quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="Unionable.except_-780"><a href="#Unionable.except_-780"><span class="linenos">780</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
-</span><span id="Unionable.except_-781"><a href="#Unionable.except_-781"><span class="linenos">781</span></a>
-</span><span id="Unionable.except_-782"><a href="#Unionable.except_-782"><span class="linenos">782</span></a><span class="sd"> Args:</span>
-</span><span id="Unionable.except_-783"><a href="#Unionable.except_-783"><span class="linenos">783</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
-</span><span id="Unionable.except_-784"><a href="#Unionable.except_-784"><span class="linenos">784</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Unionable.except_-785"><a href="#Unionable.except_-785"><span class="linenos">785</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="Unionable.except_-786"><a href="#Unionable.except_-786"><span class="linenos">786</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Unionable.except_-787"><a href="#Unionable.except_-787"><span class="linenos">787</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Unionable.except_-788"><a href="#Unionable.except_-788"><span class="linenos">788</span></a><span class="sd"> Returns:</span>
-</span><span id="Unionable.except_-789"><a href="#Unionable.except_-789"><span class="linenos">789</span></a><span class="sd"> Except: the Except expression</span>
-</span><span id="Unionable.except_-790"><a href="#Unionable.except_-790"><span class="linenos">790</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Unionable.except_-791"><a href="#Unionable.except_-791"><span class="linenos">791</span></a> <span class="k">return</span> <span class="n">except_</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unionable.except_-896"><a href="#Unionable.except_-896"><span class="linenos">896</span></a> <span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="Unionable.except_-897"><a href="#Unionable.except_-897"><span class="linenos">897</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Unionable.except_-898"><a href="#Unionable.except_-898"><span class="linenos">898</span></a><span class="sd"> Builds an EXCEPT expression.</span>
+</span><span id="Unionable.except_-899"><a href="#Unionable.except_-899"><span class="linenos">899</span></a>
+</span><span id="Unionable.except_-900"><a href="#Unionable.except_-900"><span class="linenos">900</span></a><span class="sd"> Example:</span>
+</span><span id="Unionable.except_-901"><a href="#Unionable.except_-901"><span class="linenos">901</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Unionable.except_-902"><a href="#Unionable.except_-902"><span class="linenos">902</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;SELECT * FROM foo&quot;).except_(&quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="Unionable.except_-903"><a href="#Unionable.except_-903"><span class="linenos">903</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
+</span><span id="Unionable.except_-904"><a href="#Unionable.except_-904"><span class="linenos">904</span></a>
+</span><span id="Unionable.except_-905"><a href="#Unionable.except_-905"><span class="linenos">905</span></a><span class="sd"> Args:</span>
+</span><span id="Unionable.except_-906"><a href="#Unionable.except_-906"><span class="linenos">906</span></a><span class="sd"> expression (str | Expression): the SQL code string.</span>
+</span><span id="Unionable.except_-907"><a href="#Unionable.except_-907"><span class="linenos">907</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Unionable.except_-908"><a href="#Unionable.except_-908"><span class="linenos">908</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="Unionable.except_-909"><a href="#Unionable.except_-909"><span class="linenos">909</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Unionable.except_-910"><a href="#Unionable.except_-910"><span class="linenos">910</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Unionable.except_-911"><a href="#Unionable.except_-911"><span class="linenos">911</span></a><span class="sd"> Returns:</span>
+</span><span id="Unionable.except_-912"><a href="#Unionable.except_-912"><span class="linenos">912</span></a><span class="sd"> Except: the Except expression</span>
+</span><span id="Unionable.except_-913"><a href="#Unionable.except_-913"><span class="linenos">913</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Unionable.except_-914"><a href="#Unionable.except_-914"><span class="linenos">914</span></a> <span class="k">return</span> <span class="n">except_</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -10870,8 +11335,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#UDTF"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="UDTF-794"><a href="#UDTF-794"><span class="linenos">794</span></a><span class="k">class</span> <span class="nc">UDTF</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
-</span><span id="UDTF-795"><a href="#UDTF-795"><span class="linenos">795</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UDTF-917"><a href="#UDTF-917"><span class="linenos">917</span></a><span class="k">class</span> <span class="nc">UDTF</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
+</span><span id="UDTF-918"><a href="#UDTF-918"><span class="linenos">918</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -10940,14 +11405,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Cache"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Cache-798"><a href="#Cache-798"><span class="linenos">798</span></a><span class="k">class</span> <span class="nc">Cache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Cache-799"><a href="#Cache-799"><span class="linenos">799</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Cache-800"><a href="#Cache-800"><span class="linenos">800</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Cache-801"><a href="#Cache-801"><span class="linenos">801</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Cache-802"><a href="#Cache-802"><span class="linenos">802</span></a> <span class="s2">&quot;lazy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Cache-803"><a href="#Cache-803"><span class="linenos">803</span></a> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Cache-804"><a href="#Cache-804"><span class="linenos">804</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Cache-805"><a href="#Cache-805"><span class="linenos">805</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Cache-921"><a href="#Cache-921"><span class="linenos">921</span></a><span class="k">class</span> <span class="nc">Cache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Cache-922"><a href="#Cache-922"><span class="linenos">922</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Cache-923"><a href="#Cache-923"><span class="linenos">923</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Cache-924"><a href="#Cache-924"><span class="linenos">924</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Cache-925"><a href="#Cache-925"><span class="linenos">925</span></a> <span class="s2">&quot;lazy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Cache-926"><a href="#Cache-926"><span class="linenos">926</span></a> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Cache-927"><a href="#Cache-927"><span class="linenos">927</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Cache-928"><a href="#Cache-928"><span class="linenos">928</span></a> <span class="p">}</span>
</span></pre></div>
@@ -11010,8 +11475,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Uncache"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Uncache-808"><a href="#Uncache-808"><span class="linenos">808</span></a><span class="k">class</span> <span class="nc">Uncache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Uncache-809"><a href="#Uncache-809"><span class="linenos">809</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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Uncache-931"><a href="#Uncache-931"><span class="linenos">931</span></a><span class="k">class</span> <span class="nc">Uncache</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Uncache-932"><a href="#Uncache-932"><span class="linenos">932</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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -11074,20 +11539,20 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Create"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Create-812"><a href="#Create-812"><span class="linenos">812</span></a><span class="k">class</span> <span class="nc">Create</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Create-813"><a href="#Create-813"><span class="linenos">813</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Create-814"><a href="#Create-814"><span class="linenos">814</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-815"><a href="#Create-815"><span class="linenos">815</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Create-816"><a href="#Create-816"><span class="linenos">816</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Create-817"><a href="#Create-817"><span class="linenos">817</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-818"><a href="#Create-818"><span class="linenos">818</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-819"><a href="#Create-819"><span class="linenos">819</span></a> <span class="s2">&quot;properties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-820"><a href="#Create-820"><span class="linenos">820</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-821"><a href="#Create-821"><span class="linenos">821</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-822"><a href="#Create-822"><span class="linenos">822</span></a> <span class="s2">&quot;indexes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-823"><a href="#Create-823"><span class="linenos">823</span></a> <span class="s2">&quot;no_schema_binding&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-824"><a href="#Create-824"><span class="linenos">824</span></a> <span class="s2">&quot;begin&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Create-825"><a href="#Create-825"><span class="linenos">825</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Create-935"><a href="#Create-935"><span class="linenos">935</span></a><span class="k">class</span> <span class="nc">Create</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Create-936"><a href="#Create-936"><span class="linenos">936</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Create-937"><a href="#Create-937"><span class="linenos">937</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-938"><a href="#Create-938"><span class="linenos">938</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Create-939"><a href="#Create-939"><span class="linenos">939</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Create-940"><a href="#Create-940"><span class="linenos">940</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-941"><a href="#Create-941"><span class="linenos">941</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-942"><a href="#Create-942"><span class="linenos">942</span></a> <span class="s2">&quot;properties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-943"><a href="#Create-943"><span class="linenos">943</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-944"><a href="#Create-944"><span class="linenos">944</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-945"><a href="#Create-945"><span class="linenos">945</span></a> <span class="s2">&quot;indexes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-946"><a href="#Create-946"><span class="linenos">946</span></a> <span class="s2">&quot;no_schema_binding&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-947"><a href="#Create-947"><span class="linenos">947</span></a> <span class="s2">&quot;begin&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Create-948"><a href="#Create-948"><span class="linenos">948</span></a> <span class="p">}</span>
</span></pre></div>
@@ -11150,8 +11615,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Describe"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Describe-828"><a href="#Describe-828"><span class="linenos">828</span></a><span class="k">class</span> <span class="nc">Describe</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Describe-829"><a href="#Describe-829"><span class="linenos">829</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Describe-951"><a href="#Describe-951"><span class="linenos">951</span></a><span class="k">class</span> <span class="nc">Describe</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Describe-952"><a href="#Describe-952"><span class="linenos">952</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -11214,8 +11679,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Pragma"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Pragma-832"><a href="#Pragma-832"><span class="linenos">832</span></a><span class="k">class</span> <span class="nc">Pragma</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Pragma-833"><a href="#Pragma-833"><span class="linenos">833</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Pragma-955"><a href="#Pragma-955"><span class="linenos">955</span></a><span class="k">class</span> <span class="nc">Pragma</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Pragma-956"><a href="#Pragma-956"><span class="linenos">956</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -11278,8 +11743,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Set"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Set-836"><a href="#Set-836"><span class="linenos">836</span></a><span class="k">class</span> <span class="nc">Set</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Set-837"><a href="#Set-837"><span class="linenos">837</span></a> <span class="n">arg_types</span> <span class="o">=</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Set-959"><a href="#Set-959"><span class="linenos">959</span></a><span class="k">class</span> <span class="nc">Set</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Set-960"><a href="#Set-960"><span class="linenos">960</span></a> <span class="n">arg_types</span> <span class="o">=</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>
@@ -11342,14 +11807,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#SetItem"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SetItem-840"><a href="#SetItem-840"><span class="linenos">840</span></a><span class="k">class</span> <span class="nc">SetItem</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="SetItem-841"><a href="#SetItem-841"><span class="linenos">841</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SetItem-842"><a href="#SetItem-842"><span class="linenos">842</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="SetItem-843"><a href="#SetItem-843"><span class="linenos">843</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="SetItem-844"><a href="#SetItem-844"><span class="linenos">844</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="SetItem-845"><a href="#SetItem-845"><span class="linenos">845</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># MySQL SET NAMES statement</span>
-</span><span id="SetItem-846"><a href="#SetItem-846"><span class="linenos">846</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="SetItem-847"><a href="#SetItem-847"><span class="linenos">847</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SetItem-963"><a href="#SetItem-963"><span class="linenos">963</span></a><span class="k">class</span> <span class="nc">SetItem</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="SetItem-964"><a href="#SetItem-964"><span class="linenos">964</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SetItem-965"><a href="#SetItem-965"><span class="linenos">965</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="SetItem-966"><a href="#SetItem-966"><span class="linenos">966</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="SetItem-967"><a href="#SetItem-967"><span class="linenos">967</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="SetItem-968"><a href="#SetItem-968"><span class="linenos">968</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># MySQL SET NAMES statement</span>
+</span><span id="SetItem-969"><a href="#SetItem-969"><span class="linenos">969</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="SetItem-970"><a href="#SetItem-970"><span class="linenos">970</span></a> <span class="p">}</span>
</span></pre></div>
@@ -11412,24 +11877,24 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Show"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Show-850"><a href="#Show-850"><span class="linenos">850</span></a><span class="k">class</span> <span class="nc">Show</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Show-851"><a href="#Show-851"><span class="linenos">851</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Show-852"><a href="#Show-852"><span class="linenos">852</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Show-853"><a href="#Show-853"><span class="linenos">853</span></a> <span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-854"><a href="#Show-854"><span class="linenos">854</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-855"><a href="#Show-855"><span class="linenos">855</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-856"><a href="#Show-856"><span class="linenos">856</span></a> <span class="s2">&quot;like&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-857"><a href="#Show-857"><span class="linenos">857</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-858"><a href="#Show-858"><span class="linenos">858</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-859"><a href="#Show-859"><span class="linenos">859</span></a> <span class="s2">&quot;full&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-860"><a href="#Show-860"><span class="linenos">860</span></a> <span class="s2">&quot;mutex&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-861"><a href="#Show-861"><span class="linenos">861</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-862"><a href="#Show-862"><span class="linenos">862</span></a> <span class="s2">&quot;channel&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-863"><a href="#Show-863"><span class="linenos">863</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-864"><a href="#Show-864"><span class="linenos">864</span></a> <span class="s2">&quot;log&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-865"><a href="#Show-865"><span class="linenos">865</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-866"><a href="#Show-866"><span class="linenos">866</span></a> <span class="s2">&quot;types&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Show-867"><a href="#Show-867"><span class="linenos">867</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Show-973"><a href="#Show-973"><span class="linenos">973</span></a><span class="k">class</span> <span class="nc">Show</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Show-974"><a href="#Show-974"><span class="linenos">974</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Show-975"><a href="#Show-975"><span class="linenos">975</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Show-976"><a href="#Show-976"><span class="linenos">976</span></a> <span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-977"><a href="#Show-977"><span class="linenos">977</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-978"><a href="#Show-978"><span class="linenos">978</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-979"><a href="#Show-979"><span class="linenos">979</span></a> <span class="s2">&quot;like&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-980"><a href="#Show-980"><span class="linenos">980</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-981"><a href="#Show-981"><span class="linenos">981</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-982"><a href="#Show-982"><span class="linenos">982</span></a> <span class="s2">&quot;full&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-983"><a href="#Show-983"><span class="linenos">983</span></a> <span class="s2">&quot;mutex&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-984"><a href="#Show-984"><span class="linenos">984</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-985"><a href="#Show-985"><span class="linenos">985</span></a> <span class="s2">&quot;channel&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-986"><a href="#Show-986"><span class="linenos">986</span></a> <span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-987"><a href="#Show-987"><span class="linenos">987</span></a> <span class="s2">&quot;log&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-988"><a href="#Show-988"><span class="linenos">988</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-989"><a href="#Show-989"><span class="linenos">989</span></a> <span class="s2">&quot;types&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Show-990"><a href="#Show-990"><span class="linenos">990</span></a> <span class="p">}</span>
</span></pre></div>
@@ -11492,8 +11957,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#UserDefinedFunction"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="UserDefinedFunction-870"><a href="#UserDefinedFunction-870"><span class="linenos">870</span></a><span class="k">class</span> <span class="nc">UserDefinedFunction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="UserDefinedFunction-871"><a href="#UserDefinedFunction-871"><span class="linenos">871</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UserDefinedFunction-993"><a href="#UserDefinedFunction-993"><span class="linenos">993</span></a><span class="k">class</span> <span class="nc">UserDefinedFunction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="UserDefinedFunction-994"><a href="#UserDefinedFunction-994"><span class="linenos">994</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -11556,8 +12021,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CharacterSet"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CharacterSet-874"><a href="#CharacterSet-874"><span class="linenos">874</span></a><span class="k">class</span> <span class="nc">CharacterSet</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="CharacterSet-875"><a href="#CharacterSet-875"><span class="linenos">875</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;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CharacterSet-997"><a href="#CharacterSet-997"><span class="linenos">997</span></a><span class="k">class</span> <span class="nc">CharacterSet</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="CharacterSet-998"><a href="#CharacterSet-998"><span class="linenos">998</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;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -11620,12 +12085,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#With"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="With-878"><a href="#With-878"><span class="linenos">878</span></a><span class="k">class</span> <span class="nc">With</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="With-879"><a href="#With-879"><span class="linenos">879</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="With-880"><a href="#With-880"><span class="linenos">880</span></a>
-</span><span id="With-881"><a href="#With-881"><span class="linenos">881</span></a> <span class="nd">@property</span>
-</span><span id="With-882"><a href="#With-882"><span class="linenos">882</span></a> <span class="k">def</span> <span class="nf">recursive</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="With-883"><a href="#With-883"><span class="linenos">883</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="With-1001"><a href="#With-1001"><span class="linenos">1001</span></a><span class="k">class</span> <span class="nc">With</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="With-1002"><a href="#With-1002"><span class="linenos">1002</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="With-1003"><a href="#With-1003"><span class="linenos">1003</span></a>
+</span><span id="With-1004"><a href="#With-1004"><span class="linenos">1004</span></a> <span class="nd">@property</span>
+</span><span id="With-1005"><a href="#With-1005"><span class="linenos">1005</span></a> <span class="k">def</span> <span class="nf">recursive</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="With-1006"><a href="#With-1006"><span class="linenos">1006</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="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></pre></div>
@@ -11688,8 +12153,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#WithinGroup"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WithinGroup-886"><a href="#WithinGroup-886"><span class="linenos">886</span></a><span class="k">class</span> <span class="nc">WithinGroup</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="WithinGroup-887"><a href="#WithinGroup-887"><span class="linenos">887</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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WithinGroup-1009"><a href="#WithinGroup-1009"><span class="linenos">1009</span></a><span class="k">class</span> <span class="nc">WithinGroup</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="WithinGroup-1010"><a href="#WithinGroup-1010"><span class="linenos">1010</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -11752,8 +12217,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CTE"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CTE-890"><a href="#CTE-890"><span class="linenos">890</span></a><span class="k">class</span> <span class="nc">CTE</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">):</span>
-</span><span id="CTE-891"><a href="#CTE-891"><span class="linenos">891</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;alias&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CTE-1013"><a href="#CTE-1013"><span class="linenos">1013</span></a><span class="k">class</span> <span class="nc">CTE</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">):</span>
+</span><span id="CTE-1014"><a href="#CTE-1014"><span class="linenos">1014</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;alias&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -11816,12 +12281,12 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#TableAlias"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TableAlias-894"><a href="#TableAlias-894"><span class="linenos">894</span></a><span class="k">class</span> <span class="nc">TableAlias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="TableAlias-895"><a href="#TableAlias-895"><span class="linenos">895</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;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="TableAlias-896"><a href="#TableAlias-896"><span class="linenos">896</span></a>
-</span><span id="TableAlias-897"><a href="#TableAlias-897"><span class="linenos">897</span></a> <span class="nd">@property</span>
-</span><span id="TableAlias-898"><a href="#TableAlias-898"><span class="linenos">898</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="TableAlias-899"><a href="#TableAlias-899"><span class="linenos">899</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TableAlias-1017"><a href="#TableAlias-1017"><span class="linenos">1017</span></a><span class="k">class</span> <span class="nc">TableAlias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="TableAlias-1018"><a href="#TableAlias-1018"><span class="linenos">1018</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;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="TableAlias-1019"><a href="#TableAlias-1019"><span class="linenos">1019</span></a>
+</span><span id="TableAlias-1020"><a href="#TableAlias-1020"><span class="linenos">1020</span></a> <span class="nd">@property</span>
+</span><span id="TableAlias-1021"><a href="#TableAlias-1021"><span class="linenos">1021</span></a> <span class="k">def</span> <span class="nf">columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="TableAlias-1022"><a href="#TableAlias-1022"><span class="linenos">1022</span></a> <span class="k">return</span> <span class="bp">self</span><span class="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></pre></div>
@@ -11884,8 +12349,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#BitString"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitString-902"><a href="#BitString-902"><span class="linenos">902</span></a><span class="k">class</span> <span class="nc">BitString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="BitString-903"><a href="#BitString-903"><span class="linenos">903</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitString-1025"><a href="#BitString-1025"><span class="linenos">1025</span></a><span class="k">class</span> <span class="nc">BitString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="BitString-1026"><a href="#BitString-1026"><span class="linenos">1026</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -11938,6 +12403,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<dd id="BitString.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="BitString.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="BitString.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="BitString.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="BitString.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="BitString.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="BitString.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="BitString.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="BitString.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="BitString.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -11954,8 +12426,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#HexString"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="HexString-906"><a href="#HexString-906"><span class="linenos">906</span></a><span class="k">class</span> <span class="nc">HexString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="HexString-907"><a href="#HexString-907"><span class="linenos">907</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="HexString-1029"><a href="#HexString-1029"><span class="linenos">1029</span></a><span class="k">class</span> <span class="nc">HexString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="HexString-1030"><a href="#HexString-1030"><span class="linenos">1030</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -12008,6 +12480,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<dd id="HexString.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="HexString.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="HexString.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="HexString.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="HexString.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="HexString.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="HexString.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="HexString.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="HexString.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="HexString.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -12024,8 +12503,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ByteString"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ByteString-910"><a href="#ByteString-910"><span class="linenos">910</span></a><span class="k">class</span> <span class="nc">ByteString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="ByteString-911"><a href="#ByteString-911"><span class="linenos">911</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ByteString-1033"><a href="#ByteString-1033"><span class="linenos">1033</span></a><span class="k">class</span> <span class="nc">ByteString</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="ByteString-1034"><a href="#ByteString-1034"><span class="linenos">1034</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -12078,6 +12557,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<dd id="ByteString.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ByteString.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ByteString.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ByteString.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ByteString.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ByteString.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ByteString.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ByteString.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ByteString.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ByteString.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -12094,41 +12580,41 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Column"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column-914"><a href="#Column-914"><span class="linenos">914</span></a><span class="k">class</span> <span class="nc">Column</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Column-915"><a href="#Column-915"><span class="linenos">915</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;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;join_mark&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Column-916"><a href="#Column-916"><span class="linenos">916</span></a>
-</span><span id="Column-917"><a href="#Column-917"><span class="linenos">917</span></a> <span class="nd">@property</span>
-</span><span id="Column-918"><a href="#Column-918"><span class="linenos">918</span></a> <span class="k">def</span> <span class="nf">table</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="Column-919"><a href="#Column-919"><span class="linenos">919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="Column-920"><a href="#Column-920"><span class="linenos">920</span></a>
-</span><span id="Column-921"><a href="#Column-921"><span class="linenos">921</span></a> <span class="nd">@property</span>
-</span><span id="Column-922"><a href="#Column-922"><span class="linenos">922</span></a> <span class="k">def</span> <span class="nf">db</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="Column-923"><a href="#Column-923"><span class="linenos">923</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">)</span>
-</span><span id="Column-924"><a href="#Column-924"><span class="linenos">924</span></a>
-</span><span id="Column-925"><a href="#Column-925"><span class="linenos">925</span></a> <span class="nd">@property</span>
-</span><span id="Column-926"><a href="#Column-926"><span class="linenos">926</span></a> <span class="k">def</span> <span class="nf">catalog</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="Column-927"><a href="#Column-927"><span class="linenos">927</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">)</span>
-</span><span id="Column-928"><a href="#Column-928"><span class="linenos">928</span></a>
-</span><span id="Column-929"><a href="#Column-929"><span class="linenos">929</span></a> <span class="nd">@property</span>
-</span><span id="Column-930"><a href="#Column-930"><span class="linenos">930</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="Column-931"><a href="#Column-931"><span class="linenos">931</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Column-932"><a href="#Column-932"><span class="linenos">932</span></a>
-</span><span id="Column-933"><a href="#Column-933"><span class="linenos">933</span></a> <span class="nd">@property</span>
-</span><span id="Column-934"><a href="#Column-934"><span class="linenos">934</span></a> <span class="k">def</span> <span class="nf">parts</span><span class="p">(</span><span class="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">Identifier</span><span class="p">]:</span>
-</span><span id="Column-935"><a href="#Column-935"><span class="linenos">935</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the parts of a column in order catalog, db, table, name.&quot;&quot;&quot;</span>
-</span><span id="Column-936"><a href="#Column-936"><span class="linenos">936</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">part</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span> <span class="k">if</span> <span class="n">part</span><span class="p">]</span>
-</span><span id="Column-937"><a href="#Column-937"><span class="linenos">937</span></a>
-</span><span id="Column-938"><a href="#Column-938"><span class="linenos">938</span></a> <span class="k">def</span> <span class="nf">to_dot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
-</span><span id="Column-939"><a href="#Column-939"><span class="linenos">939</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts the column into a dot expression.&quot;&quot;&quot;</span>
-</span><span id="Column-940"><a href="#Column-940"><span class="linenos">940</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parts</span>
-</span><span id="Column-941"><a href="#Column-941"><span class="linenos">941</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="Column-942"><a href="#Column-942"><span class="linenos">942</span></a>
-</span><span id="Column-943"><a href="#Column-943"><span class="linenos">943</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
-</span><span id="Column-944"><a href="#Column-944"><span class="linenos">944</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
-</span><span id="Column-945"><a href="#Column-945"><span class="linenos">945</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Column-946"><a href="#Column-946"><span class="linenos">946</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="Column-947"><a href="#Column-947"><span class="linenos">947</span></a>
-</span><span id="Column-948"><a href="#Column-948"><span class="linenos">948</span></a> <span class="k">return</span> <span class="n">Dot</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column-1037"><a href="#Column-1037"><span class="linenos">1037</span></a><span class="k">class</span> <span class="nc">Column</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Column-1038"><a href="#Column-1038"><span class="linenos">1038</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;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;join_mark&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Column-1039"><a href="#Column-1039"><span class="linenos">1039</span></a>
+</span><span id="Column-1040"><a href="#Column-1040"><span class="linenos">1040</span></a> <span class="nd">@property</span>
+</span><span id="Column-1041"><a href="#Column-1041"><span class="linenos">1041</span></a> <span class="k">def</span> <span class="nf">table</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="Column-1042"><a href="#Column-1042"><span class="linenos">1042</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="Column-1043"><a href="#Column-1043"><span class="linenos">1043</span></a>
+</span><span id="Column-1044"><a href="#Column-1044"><span class="linenos">1044</span></a> <span class="nd">@property</span>
+</span><span id="Column-1045"><a href="#Column-1045"><span class="linenos">1045</span></a> <span class="k">def</span> <span class="nf">db</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="Column-1046"><a href="#Column-1046"><span class="linenos">1046</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="Column-1047"><a href="#Column-1047"><span class="linenos">1047</span></a>
+</span><span id="Column-1048"><a href="#Column-1048"><span class="linenos">1048</span></a> <span class="nd">@property</span>
+</span><span id="Column-1049"><a href="#Column-1049"><span class="linenos">1049</span></a> <span class="k">def</span> <span class="nf">catalog</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="Column-1050"><a href="#Column-1050"><span class="linenos">1050</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">)</span>
+</span><span id="Column-1051"><a href="#Column-1051"><span class="linenos">1051</span></a>
+</span><span id="Column-1052"><a href="#Column-1052"><span class="linenos">1052</span></a> <span class="nd">@property</span>
+</span><span id="Column-1053"><a href="#Column-1053"><span class="linenos">1053</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="Column-1054"><a href="#Column-1054"><span class="linenos">1054</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Column-1055"><a href="#Column-1055"><span class="linenos">1055</span></a>
+</span><span id="Column-1056"><a href="#Column-1056"><span class="linenos">1056</span></a> <span class="nd">@property</span>
+</span><span id="Column-1057"><a href="#Column-1057"><span class="linenos">1057</span></a> <span class="k">def</span> <span class="nf">parts</span><span class="p">(</span><span class="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">Identifier</span><span class="p">]:</span>
+</span><span id="Column-1058"><a href="#Column-1058"><span class="linenos">1058</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the parts of a column in order catalog, db, table, name.&quot;&quot;&quot;</span>
+</span><span id="Column-1059"><a href="#Column-1059"><span class="linenos">1059</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">part</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span> <span class="k">if</span> <span class="n">part</span><span class="p">]</span>
+</span><span id="Column-1060"><a href="#Column-1060"><span class="linenos">1060</span></a>
+</span><span id="Column-1061"><a href="#Column-1061"><span class="linenos">1061</span></a> <span class="k">def</span> <span class="nf">to_dot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
+</span><span id="Column-1062"><a href="#Column-1062"><span class="linenos">1062</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts the column into a dot expression.&quot;&quot;&quot;</span>
+</span><span id="Column-1063"><a href="#Column-1063"><span class="linenos">1063</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parts</span>
+</span><span id="Column-1064"><a href="#Column-1064"><span class="linenos">1064</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Column-1065"><a href="#Column-1065"><span class="linenos">1065</span></a>
+</span><span id="Column-1066"><a href="#Column-1066"><span class="linenos">1066</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
+</span><span id="Column-1067"><a href="#Column-1067"><span class="linenos">1067</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
+</span><span id="Column-1068"><a href="#Column-1068"><span class="linenos">1068</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Column-1069"><a href="#Column-1069"><span class="linenos">1069</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="Column-1070"><a href="#Column-1070"><span class="linenos">1070</span></a>
+</span><span id="Column-1071"><a href="#Column-1071"><span class="linenos">1071</span></a> <span class="k">return</span> <span class="n">Dot</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
</span></pre></div>
@@ -12188,17 +12674,17 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Column.to_dot"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Column.to_dot-938"><a href="#Column.to_dot-938"><span class="linenos">938</span></a> <span class="k">def</span> <span class="nf">to_dot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
-</span><span id="Column.to_dot-939"><a href="#Column.to_dot-939"><span class="linenos">939</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts the column into a dot expression.&quot;&quot;&quot;</span>
-</span><span id="Column.to_dot-940"><a href="#Column.to_dot-940"><span class="linenos">940</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parts</span>
-</span><span id="Column.to_dot-941"><a href="#Column.to_dot-941"><span class="linenos">941</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="Column.to_dot-942"><a href="#Column.to_dot-942"><span class="linenos">942</span></a>
-</span><span id="Column.to_dot-943"><a href="#Column.to_dot-943"><span class="linenos">943</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
-</span><span id="Column.to_dot-944"><a href="#Column.to_dot-944"><span class="linenos">944</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
-</span><span id="Column.to_dot-945"><a href="#Column.to_dot-945"><span class="linenos">945</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Column.to_dot-946"><a href="#Column.to_dot-946"><span class="linenos">946</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="Column.to_dot-947"><a href="#Column.to_dot-947"><span class="linenos">947</span></a>
-</span><span id="Column.to_dot-948"><a href="#Column.to_dot-948"><span class="linenos">948</span></a> <span class="k">return</span> <span class="n">Dot</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Column.to_dot-1061"><a href="#Column.to_dot-1061"><span class="linenos">1061</span></a> <span class="k">def</span> <span class="nf">to_dot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
+</span><span id="Column.to_dot-1062"><a href="#Column.to_dot-1062"><span class="linenos">1062</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Converts the column into a dot expression.&quot;&quot;&quot;</span>
+</span><span id="Column.to_dot-1063"><a href="#Column.to_dot-1063"><span class="linenos">1063</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parts</span>
+</span><span id="Column.to_dot-1064"><a href="#Column.to_dot-1064"><span class="linenos">1064</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Column.to_dot-1065"><a href="#Column.to_dot-1065"><span class="linenos">1065</span></a>
+</span><span id="Column.to_dot-1066"><a href="#Column.to_dot-1066"><span class="linenos">1066</span></a> <span class="k">while</span> <span class="n">parent</span><span class="p">:</span>
+</span><span id="Column.to_dot-1067"><a href="#Column.to_dot-1067"><span class="linenos">1067</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">Dot</span><span class="p">):</span>
+</span><span id="Column.to_dot-1068"><a href="#Column.to_dot-1068"><span class="linenos">1068</span></a> <span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Column.to_dot-1069"><a href="#Column.to_dot-1069"><span class="linenos">1069</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="Column.to_dot-1070"><a href="#Column.to_dot-1070"><span class="linenos">1070</span></a>
+</span><span id="Column.to_dot-1071"><a href="#Column.to_dot-1071"><span class="linenos">1071</span></a> <span class="k">return</span> <span class="n">Dot</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span>
</span></pre></div>
@@ -12253,6 +12739,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<dd id="Column.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Column.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Column.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Column.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Column.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Column.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Column.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Column.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Column.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Column.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -12269,8 +12762,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ColumnPosition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnPosition-951"><a href="#ColumnPosition-951"><span class="linenos">951</span></a><span class="k">class</span> <span class="nc">ColumnPosition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="ColumnPosition-952"><a href="#ColumnPosition-952"><span class="linenos">952</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;position&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnPosition-1074"><a href="#ColumnPosition-1074"><span class="linenos">1074</span></a><span class="k">class</span> <span class="nc">ColumnPosition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="ColumnPosition-1075"><a href="#ColumnPosition-1075"><span class="linenos">1075</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;position&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -12333,14 +12826,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ColumnDef"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnDef-955"><a href="#ColumnDef-955"><span class="linenos">955</span></a><span class="k">class</span> <span class="nc">ColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="ColumnDef-956"><a href="#ColumnDef-956"><span class="linenos">956</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ColumnDef-957"><a href="#ColumnDef-957"><span class="linenos">957</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="ColumnDef-958"><a href="#ColumnDef-958"><span class="linenos">958</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ColumnDef-959"><a href="#ColumnDef-959"><span class="linenos">959</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ColumnDef-960"><a href="#ColumnDef-960"><span class="linenos">960</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ColumnDef-961"><a href="#ColumnDef-961"><span class="linenos">961</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ColumnDef-962"><a href="#ColumnDef-962"><span class="linenos">962</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnDef-1078"><a href="#ColumnDef-1078"><span class="linenos">1078</span></a><span class="k">class</span> <span class="nc">ColumnDef</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="ColumnDef-1079"><a href="#ColumnDef-1079"><span class="linenos">1079</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ColumnDef-1080"><a href="#ColumnDef-1080"><span class="linenos">1080</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="ColumnDef-1081"><a href="#ColumnDef-1081"><span class="linenos">1081</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ColumnDef-1082"><a href="#ColumnDef-1082"><span class="linenos">1082</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ColumnDef-1083"><a href="#ColumnDef-1083"><span class="linenos">1083</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ColumnDef-1084"><a href="#ColumnDef-1084"><span class="linenos">1084</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ColumnDef-1085"><a href="#ColumnDef-1085"><span class="linenos">1085</span></a> <span class="p">}</span>
</span></pre></div>
@@ -12403,15 +12896,15 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#AlterColumn"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AlterColumn-965"><a href="#AlterColumn-965"><span class="linenos">965</span></a><span class="k">class</span> <span class="nc">AlterColumn</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="AlterColumn-966"><a href="#AlterColumn-966"><span class="linenos">966</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="AlterColumn-967"><a href="#AlterColumn-967"><span class="linenos">967</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="AlterColumn-968"><a href="#AlterColumn-968"><span class="linenos">968</span></a> <span class="s2">&quot;dtype&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="AlterColumn-969"><a href="#AlterColumn-969"><span class="linenos">969</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="AlterColumn-970"><a href="#AlterColumn-970"><span class="linenos">970</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="AlterColumn-971"><a href="#AlterColumn-971"><span class="linenos">971</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="AlterColumn-972"><a href="#AlterColumn-972"><span class="linenos">972</span></a> <span class="s2">&quot;drop&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="AlterColumn-973"><a href="#AlterColumn-973"><span class="linenos">973</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AlterColumn-1088"><a href="#AlterColumn-1088"><span class="linenos">1088</span></a><span class="k">class</span> <span class="nc">AlterColumn</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="AlterColumn-1089"><a href="#AlterColumn-1089"><span class="linenos">1089</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="AlterColumn-1090"><a href="#AlterColumn-1090"><span class="linenos">1090</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="AlterColumn-1091"><a href="#AlterColumn-1091"><span class="linenos">1091</span></a> <span class="s2">&quot;dtype&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="AlterColumn-1092"><a href="#AlterColumn-1092"><span class="linenos">1092</span></a> <span class="s2">&quot;collate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="AlterColumn-1093"><a href="#AlterColumn-1093"><span class="linenos">1093</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="AlterColumn-1094"><a href="#AlterColumn-1094"><span class="linenos">1094</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="AlterColumn-1095"><a href="#AlterColumn-1095"><span class="linenos">1095</span></a> <span class="s2">&quot;drop&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="AlterColumn-1096"><a href="#AlterColumn-1096"><span class="linenos">1096</span></a> <span class="p">}</span>
</span></pre></div>
@@ -12474,8 +12967,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#RenameTable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RenameTable-976"><a href="#RenameTable-976"><span class="linenos">976</span></a><span class="k">class</span> <span class="nc">RenameTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="RenameTable-977"><a href="#RenameTable-977"><span class="linenos">977</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RenameTable-1099"><a href="#RenameTable-1099"><span class="linenos">1099</span></a><span class="k">class</span> <span class="nc">RenameTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="RenameTable-1100"><a href="#RenameTable-1100"><span class="linenos">1100</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -12538,8 +13031,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#SetTag"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SetTag-980"><a href="#SetTag-980"><span class="linenos">980</span></a><span class="k">class</span> <span class="nc">SetTag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="SetTag-981"><a href="#SetTag-981"><span class="linenos">981</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;unset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SetTag-1103"><a href="#SetTag-1103"><span class="linenos">1103</span></a><span class="k">class</span> <span class="nc">SetTag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="SetTag-1104"><a href="#SetTag-1104"><span class="linenos">1104</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;unset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -12602,8 +13095,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Comment"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Comment-984"><a href="#Comment-984"><span class="linenos">984</span></a><span class="k">class</span> <span class="nc">Comment</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Comment-985"><a href="#Comment-985"><span class="linenos">985</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;kind&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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Comment-1107"><a href="#Comment-1107"><span class="linenos">1107</span></a><span class="k">class</span> <span class="nc">Comment</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Comment-1108"><a href="#Comment-1108"><span class="linenos">1108</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;kind&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;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -12666,8 +13159,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnConstraint-988"><a href="#ColumnConstraint-988"><span class="linenos">988</span></a><span class="k">class</span> <span class="nc">ColumnConstraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="ColumnConstraint-989"><a href="#ColumnConstraint-989"><span class="linenos">989</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;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnConstraint-1111"><a href="#ColumnConstraint-1111"><span class="linenos">1111</span></a><span class="k">class</span> <span class="nc">ColumnConstraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="ColumnConstraint-1112"><a href="#ColumnConstraint-1112"><span class="linenos">1112</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;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -12730,8 +13223,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ColumnConstraintKind"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnConstraintKind-992"><a href="#ColumnConstraintKind-992"><span class="linenos">992</span></a><span class="k">class</span> <span class="nc">ColumnConstraintKind</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="ColumnConstraintKind-993"><a href="#ColumnConstraintKind-993"><span class="linenos">993</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ColumnConstraintKind-1115"><a href="#ColumnConstraintKind-1115"><span class="linenos">1115</span></a><span class="k">class</span> <span class="nc">ColumnConstraintKind</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="ColumnConstraintKind-1116"><a href="#ColumnConstraintKind-1116"><span class="linenos">1116</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -12794,8 +13287,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#AutoIncrementColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AutoIncrementColumnConstraint-996"><a href="#AutoIncrementColumnConstraint-996"><span class="linenos">996</span></a><span class="k">class</span> <span class="nc">AutoIncrementColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="AutoIncrementColumnConstraint-997"><a href="#AutoIncrementColumnConstraint-997"><span class="linenos">997</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AutoIncrementColumnConstraint-1119"><a href="#AutoIncrementColumnConstraint-1119"><span class="linenos">1119</span></a><span class="k">class</span> <span class="nc">AutoIncrementColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="AutoIncrementColumnConstraint-1120"><a href="#AutoIncrementColumnConstraint-1120"><span class="linenos">1120</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -12858,8 +13351,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CaseSpecificColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CaseSpecificColumnConstraint-1000"><a href="#CaseSpecificColumnConstraint-1000"><span class="linenos">1000</span></a><span class="k">class</span> <span class="nc">CaseSpecificColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="CaseSpecificColumnConstraint-1001"><a href="#CaseSpecificColumnConstraint-1001"><span class="linenos">1001</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;not_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CaseSpecificColumnConstraint-1123"><a href="#CaseSpecificColumnConstraint-1123"><span class="linenos">1123</span></a><span class="k">class</span> <span class="nc">CaseSpecificColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="CaseSpecificColumnConstraint-1124"><a href="#CaseSpecificColumnConstraint-1124"><span class="linenos">1124</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;not_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -12922,8 +13415,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CharacterSetColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CharacterSetColumnConstraint-1004"><a href="#CharacterSetColumnConstraint-1004"><span class="linenos">1004</span></a><span class="k">class</span> <span class="nc">CharacterSetColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="CharacterSetColumnConstraint-1005"><a href="#CharacterSetColumnConstraint-1005"><span class="linenos">1005</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CharacterSetColumnConstraint-1127"><a href="#CharacterSetColumnConstraint-1127"><span class="linenos">1127</span></a><span class="k">class</span> <span class="nc">CharacterSetColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="CharacterSetColumnConstraint-1128"><a href="#CharacterSetColumnConstraint-1128"><span class="linenos">1128</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></pre></div>
@@ -12986,8 +13479,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CheckColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CheckColumnConstraint-1008"><a href="#CheckColumnConstraint-1008"><span class="linenos">1008</span></a><span class="k">class</span> <span class="nc">CheckColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="CheckColumnConstraint-1009"><a href="#CheckColumnConstraint-1009"><span class="linenos">1009</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CheckColumnConstraint-1131"><a href="#CheckColumnConstraint-1131"><span class="linenos">1131</span></a><span class="k">class</span> <span class="nc">CheckColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="CheckColumnConstraint-1132"><a href="#CheckColumnConstraint-1132"><span class="linenos">1132</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13050,8 +13543,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CollateColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CollateColumnConstraint-1012"><a href="#CollateColumnConstraint-1012"><span class="linenos">1012</span></a><span class="k">class</span> <span class="nc">CollateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="CollateColumnConstraint-1013"><a href="#CollateColumnConstraint-1013"><span class="linenos">1013</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CollateColumnConstraint-1135"><a href="#CollateColumnConstraint-1135"><span class="linenos">1135</span></a><span class="k">class</span> <span class="nc">CollateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="CollateColumnConstraint-1136"><a href="#CollateColumnConstraint-1136"><span class="linenos">1136</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13114,8 +13607,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CommentColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CommentColumnConstraint-1016"><a href="#CommentColumnConstraint-1016"><span class="linenos">1016</span></a><span class="k">class</span> <span class="nc">CommentColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="CommentColumnConstraint-1017"><a href="#CommentColumnConstraint-1017"><span class="linenos">1017</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CommentColumnConstraint-1139"><a href="#CommentColumnConstraint-1139"><span class="linenos">1139</span></a><span class="k">class</span> <span class="nc">CommentColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="CommentColumnConstraint-1140"><a href="#CommentColumnConstraint-1140"><span class="linenos">1140</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13178,8 +13671,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#CompressColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CompressColumnConstraint-1020"><a href="#CompressColumnConstraint-1020"><span class="linenos">1020</span></a><span class="k">class</span> <span class="nc">CompressColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="CompressColumnConstraint-1021"><a href="#CompressColumnConstraint-1021"><span class="linenos">1021</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CompressColumnConstraint-1143"><a href="#CompressColumnConstraint-1143"><span class="linenos">1143</span></a><span class="k">class</span> <span class="nc">CompressColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="CompressColumnConstraint-1144"><a href="#CompressColumnConstraint-1144"><span class="linenos">1144</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13242,8 +13735,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DateFormatColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateFormatColumnConstraint-1024"><a href="#DateFormatColumnConstraint-1024"><span class="linenos">1024</span></a><span class="k">class</span> <span class="nc">DateFormatColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="DateFormatColumnConstraint-1025"><a href="#DateFormatColumnConstraint-1025"><span class="linenos">1025</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateFormatColumnConstraint-1147"><a href="#DateFormatColumnConstraint-1147"><span class="linenos">1147</span></a><span class="k">class</span> <span class="nc">DateFormatColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="DateFormatColumnConstraint-1148"><a href="#DateFormatColumnConstraint-1148"><span class="linenos">1148</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></pre></div>
@@ -13306,8 +13799,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#DefaultColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DefaultColumnConstraint-1028"><a href="#DefaultColumnConstraint-1028"><span class="linenos">1028</span></a><span class="k">class</span> <span class="nc">DefaultColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="DefaultColumnConstraint-1029"><a href="#DefaultColumnConstraint-1029"><span class="linenos">1029</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DefaultColumnConstraint-1151"><a href="#DefaultColumnConstraint-1151"><span class="linenos">1151</span></a><span class="k">class</span> <span class="nc">DefaultColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="DefaultColumnConstraint-1152"><a href="#DefaultColumnConstraint-1152"><span class="linenos">1152</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13370,8 +13863,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#EncodeColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="EncodeColumnConstraint-1032"><a href="#EncodeColumnConstraint-1032"><span class="linenos">1032</span></a><span class="k">class</span> <span class="nc">EncodeColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="EncodeColumnConstraint-1033"><a href="#EncodeColumnConstraint-1033"><span class="linenos">1033</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="EncodeColumnConstraint-1155"><a href="#EncodeColumnConstraint-1155"><span class="linenos">1155</span></a><span class="k">class</span> <span class="nc">EncodeColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="EncodeColumnConstraint-1156"><a href="#EncodeColumnConstraint-1156"><span class="linenos">1156</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13434,16 +13927,16 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#GeneratedAsIdentityColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GeneratedAsIdentityColumnConstraint-1036"><a href="#GeneratedAsIdentityColumnConstraint-1036"><span class="linenos">1036</span></a><span class="k">class</span> <span class="nc">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1037"><a href="#GeneratedAsIdentityColumnConstraint-1037"><span class="linenos">1037</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1038"><a href="#GeneratedAsIdentityColumnConstraint-1038"><span class="linenos">1038</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1039"><a href="#GeneratedAsIdentityColumnConstraint-1039"><span class="linenos">1039</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1040"><a href="#GeneratedAsIdentityColumnConstraint-1040"><span class="linenos">1040</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1041"><a href="#GeneratedAsIdentityColumnConstraint-1041"><span class="linenos">1041</span></a> <span class="s2">&quot;increment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1042"><a href="#GeneratedAsIdentityColumnConstraint-1042"><span class="linenos">1042</span></a> <span class="s2">&quot;minvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1043"><a href="#GeneratedAsIdentityColumnConstraint-1043"><span class="linenos">1043</span></a> <span class="s2">&quot;maxvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1044"><a href="#GeneratedAsIdentityColumnConstraint-1044"><span class="linenos">1044</span></a> <span class="s2">&quot;cycle&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="GeneratedAsIdentityColumnConstraint-1045"><a href="#GeneratedAsIdentityColumnConstraint-1045"><span class="linenos">1045</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GeneratedAsIdentityColumnConstraint-1159"><a href="#GeneratedAsIdentityColumnConstraint-1159"><span class="linenos">1159</span></a><span class="k">class</span> <span class="nc">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1160"><a href="#GeneratedAsIdentityColumnConstraint-1160"><span class="linenos">1160</span></a> <span class="c1"># this: True -&gt; ALWAYS, this: False -&gt; BY DEFAULT</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1161"><a href="#GeneratedAsIdentityColumnConstraint-1161"><span class="linenos">1161</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1162"><a href="#GeneratedAsIdentityColumnConstraint-1162"><span class="linenos">1162</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1163"><a href="#GeneratedAsIdentityColumnConstraint-1163"><span class="linenos">1163</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1164"><a href="#GeneratedAsIdentityColumnConstraint-1164"><span class="linenos">1164</span></a> <span class="s2">&quot;increment&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1165"><a href="#GeneratedAsIdentityColumnConstraint-1165"><span class="linenos">1165</span></a> <span class="s2">&quot;minvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1166"><a href="#GeneratedAsIdentityColumnConstraint-1166"><span class="linenos">1166</span></a> <span class="s2">&quot;maxvalue&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1167"><a href="#GeneratedAsIdentityColumnConstraint-1167"><span class="linenos">1167</span></a> <span class="s2">&quot;cycle&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="GeneratedAsIdentityColumnConstraint-1168"><a href="#GeneratedAsIdentityColumnConstraint-1168"><span class="linenos">1168</span></a> <span class="p">}</span>
</span></pre></div>
@@ -13506,8 +13999,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#InlineLengthColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="InlineLengthColumnConstraint-1048"><a href="#InlineLengthColumnConstraint-1048"><span class="linenos">1048</span></a><span class="k">class</span> <span class="nc">InlineLengthColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="InlineLengthColumnConstraint-1049"><a href="#InlineLengthColumnConstraint-1049"><span class="linenos">1049</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="InlineLengthColumnConstraint-1171"><a href="#InlineLengthColumnConstraint-1171"><span class="linenos">1171</span></a><span class="k">class</span> <span class="nc">InlineLengthColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="InlineLengthColumnConstraint-1172"><a href="#InlineLengthColumnConstraint-1172"><span class="linenos">1172</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13570,8 +14063,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#NotNullColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NotNullColumnConstraint-1052"><a href="#NotNullColumnConstraint-1052"><span class="linenos">1052</span></a><span class="k">class</span> <span class="nc">NotNullColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="NotNullColumnConstraint-1053"><a href="#NotNullColumnConstraint-1053"><span class="linenos">1053</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;allow_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NotNullColumnConstraint-1175"><a href="#NotNullColumnConstraint-1175"><span class="linenos">1175</span></a><span class="k">class</span> <span class="nc">NotNullColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="NotNullColumnConstraint-1176"><a href="#NotNullColumnConstraint-1176"><span class="linenos">1176</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;allow_null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -13634,8 +14127,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#OnUpdateColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OnUpdateColumnConstraint-1057"><a href="#OnUpdateColumnConstraint-1057"><span class="linenos">1057</span></a><span class="k">class</span> <span class="nc">OnUpdateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="OnUpdateColumnConstraint-1058"><a href="#OnUpdateColumnConstraint-1058"><span class="linenos">1058</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="OnUpdateColumnConstraint-1180"><a href="#OnUpdateColumnConstraint-1180"><span class="linenos">1180</span></a><span class="k">class</span> <span class="nc">OnUpdateColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="OnUpdateColumnConstraint-1181"><a href="#OnUpdateColumnConstraint-1181"><span class="linenos">1181</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13698,8 +14191,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#PrimaryKeyColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PrimaryKeyColumnConstraint-1061"><a href="#PrimaryKeyColumnConstraint-1061"><span class="linenos">1061</span></a><span class="k">class</span> <span class="nc">PrimaryKeyColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="PrimaryKeyColumnConstraint-1062"><a href="#PrimaryKeyColumnConstraint-1062"><span class="linenos">1062</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PrimaryKeyColumnConstraint-1184"><a href="#PrimaryKeyColumnConstraint-1184"><span class="linenos">1184</span></a><span class="k">class</span> <span class="nc">PrimaryKeyColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="PrimaryKeyColumnConstraint-1185"><a href="#PrimaryKeyColumnConstraint-1185"><span class="linenos">1185</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -13762,8 +14255,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#TitleColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TitleColumnConstraint-1065"><a href="#TitleColumnConstraint-1065"><span class="linenos">1065</span></a><span class="k">class</span> <span class="nc">TitleColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="TitleColumnConstraint-1066"><a href="#TitleColumnConstraint-1066"><span class="linenos">1066</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TitleColumnConstraint-1188"><a href="#TitleColumnConstraint-1188"><span class="linenos">1188</span></a><span class="k">class</span> <span class="nc">TitleColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="TitleColumnConstraint-1189"><a href="#TitleColumnConstraint-1189"><span class="linenos">1189</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -13826,8 +14319,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#UniqueColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="UniqueColumnConstraint-1069"><a href="#UniqueColumnConstraint-1069"><span class="linenos">1069</span></a><span class="k">class</span> <span class="nc">UniqueColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="UniqueColumnConstraint-1070"><a href="#UniqueColumnConstraint-1070"><span class="linenos">1070</span></a> <span class="n">arg_types</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UniqueColumnConstraint-1192"><a href="#UniqueColumnConstraint-1192"><span class="linenos">1192</span></a><span class="k">class</span> <span class="nc">UniqueColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="UniqueColumnConstraint-1193"><a href="#UniqueColumnConstraint-1193"><span class="linenos">1193</span></a> <span class="n">arg_types</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></pre></div>
@@ -13890,8 +14383,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#UppercaseColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="UppercaseColumnConstraint-1073"><a href="#UppercaseColumnConstraint-1073"><span class="linenos">1073</span></a><span class="k">class</span> <span class="nc">UppercaseColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="UppercaseColumnConstraint-1074"><a href="#UppercaseColumnConstraint-1074"><span class="linenos">1074</span></a> <span class="n">arg_types</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UppercaseColumnConstraint-1196"><a href="#UppercaseColumnConstraint-1196"><span class="linenos">1196</span></a><span class="k">class</span> <span class="nc">UppercaseColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="UppercaseColumnConstraint-1197"><a href="#UppercaseColumnConstraint-1197"><span class="linenos">1197</span></a> <span class="n">arg_types</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></pre></div>
@@ -13954,8 +14447,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#PathColumnConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PathColumnConstraint-1077"><a href="#PathColumnConstraint-1077"><span class="linenos">1077</span></a><span class="k">class</span> <span class="nc">PathColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
-</span><span id="PathColumnConstraint-1078"><a href="#PathColumnConstraint-1078"><span class="linenos">1078</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PathColumnConstraint-1200"><a href="#PathColumnConstraint-1200"><span class="linenos">1200</span></a><span class="k">class</span> <span class="nc">PathColumnConstraint</span><span class="p">(</span><span class="n">ColumnConstraintKind</span><span class="p">):</span>
+</span><span id="PathColumnConstraint-1201"><a href="#PathColumnConstraint-1201"><span class="linenos">1201</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -14018,8 +14511,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Constraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Constraint-1081"><a href="#Constraint-1081"><span class="linenos">1081</span></a><span class="k">class</span> <span class="nc">Constraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Constraint-1082"><a href="#Constraint-1082"><span class="linenos">1082</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Constraint-1204"><a href="#Constraint-1204"><span class="linenos">1204</span></a><span class="k">class</span> <span class="nc">Constraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Constraint-1205"><a href="#Constraint-1205"><span class="linenos">1205</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -14082,115 +14575,115 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Delete"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Delete-1085"><a href="#Delete-1085"><span class="linenos">1085</span></a><span class="k">class</span> <span class="nc">Delete</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Delete-1086"><a href="#Delete-1086"><span class="linenos">1086</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</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;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Delete-1087"><a href="#Delete-1087"><span class="linenos">1087</span></a>
-</span><span id="Delete-1088"><a href="#Delete-1088"><span class="linenos">1088</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="Delete-1089"><a href="#Delete-1089"><span class="linenos">1089</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1090"><a href="#Delete-1090"><span class="linenos">1090</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete-1091"><a href="#Delete-1091"><span class="linenos">1091</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="Delete-1092"><a href="#Delete-1092"><span class="linenos">1092</span></a> <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><span id="Delete-1093"><a href="#Delete-1093"><span class="linenos">1093</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1094"><a href="#Delete-1094"><span class="linenos">1094</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete-1095"><a href="#Delete-1095"><span class="linenos">1095</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete-1096"><a href="#Delete-1096"><span class="linenos">1096</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
-</span><span id="Delete-1097"><a href="#Delete-1097"><span class="linenos">1097</span></a>
-</span><span id="Delete-1098"><a href="#Delete-1098"><span class="linenos">1098</span></a><span class="sd"> Example:</span>
-</span><span id="Delete-1099"><a href="#Delete-1099"><span class="linenos">1099</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
-</span><span id="Delete-1100"><a href="#Delete-1100"><span class="linenos">1100</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
-</span><span id="Delete-1101"><a href="#Delete-1101"><span class="linenos">1101</span></a>
-</span><span id="Delete-1102"><a href="#Delete-1102"><span class="linenos">1102</span></a><span class="sd"> Args:</span>
-</span><span id="Delete-1103"><a href="#Delete-1103"><span class="linenos">1103</span></a><span class="sd"> table: the table from which to delete.</span>
-</span><span id="Delete-1104"><a href="#Delete-1104"><span class="linenos">1104</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Delete-1105"><a href="#Delete-1105"><span class="linenos">1105</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete-1106"><a href="#Delete-1106"><span class="linenos">1106</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete-1107"><a href="#Delete-1107"><span class="linenos">1107</span></a>
-</span><span id="Delete-1108"><a href="#Delete-1108"><span class="linenos">1108</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete-1109"><a href="#Delete-1109"><span class="linenos">1109</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete-1110"><a href="#Delete-1110"><span class="linenos">1110</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete-1111"><a href="#Delete-1111"><span class="linenos">1111</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete-1112"><a href="#Delete-1112"><span class="linenos">1112</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Delete-1113"><a href="#Delete-1113"><span class="linenos">1113</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1114"><a href="#Delete-1114"><span class="linenos">1114</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="Delete-1115"><a href="#Delete-1115"><span class="linenos">1115</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete-1116"><a href="#Delete-1116"><span class="linenos">1116</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="Delete-1117"><a href="#Delete-1117"><span class="linenos">1117</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete-1118"><a href="#Delete-1118"><span class="linenos">1118</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1119"><a href="#Delete-1119"><span class="linenos">1119</span></a> <span class="p">)</span>
-</span><span id="Delete-1120"><a href="#Delete-1120"><span class="linenos">1120</span></a>
-</span><span id="Delete-1121"><a href="#Delete-1121"><span class="linenos">1121</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="Delete-1122"><a href="#Delete-1122"><span class="linenos">1122</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1123"><a href="#Delete-1123"><span class="linenos">1123</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete-1124"><a href="#Delete-1124"><span class="linenos">1124</span></a> <span class="n">append</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="Delete-1125"><a href="#Delete-1125"><span class="linenos">1125</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="Delete-1126"><a href="#Delete-1126"><span class="linenos">1126</span></a> <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><span id="Delete-1127"><a href="#Delete-1127"><span class="linenos">1127</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1128"><a href="#Delete-1128"><span class="linenos">1128</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete-1129"><a href="#Delete-1129"><span class="linenos">1129</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete-1130"><a href="#Delete-1130"><span class="linenos">1130</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="Delete-1131"><a href="#Delete-1131"><span class="linenos">1131</span></a>
-</span><span id="Delete-1132"><a href="#Delete-1132"><span class="linenos">1132</span></a><span class="sd"> Example:</span>
-</span><span id="Delete-1133"><a href="#Delete-1133"><span class="linenos">1133</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
-</span><span id="Delete-1134"><a href="#Delete-1134"><span class="linenos">1134</span></a><span class="sd"> &quot;DELETE FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
-</span><span id="Delete-1135"><a href="#Delete-1135"><span class="linenos">1135</span></a>
-</span><span id="Delete-1136"><a href="#Delete-1136"><span class="linenos">1136</span></a><span class="sd"> Args:</span>
-</span><span id="Delete-1137"><a href="#Delete-1137"><span class="linenos">1137</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Delete-1138"><a href="#Delete-1138"><span class="linenos">1138</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete-1139"><a href="#Delete-1139"><span class="linenos">1139</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Delete-1140"><a href="#Delete-1140"><span class="linenos">1140</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Delete-1141"><a href="#Delete-1141"><span class="linenos">1141</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Delete-1142"><a href="#Delete-1142"><span class="linenos">1142</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete-1143"><a href="#Delete-1143"><span class="linenos">1143</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete-1144"><a href="#Delete-1144"><span class="linenos">1144</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete-1145"><a href="#Delete-1145"><span class="linenos">1145</span></a>
-</span><span id="Delete-1146"><a href="#Delete-1146"><span class="linenos">1146</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete-1147"><a href="#Delete-1147"><span class="linenos">1147</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete-1148"><a href="#Delete-1148"><span class="linenos">1148</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete-1149"><a href="#Delete-1149"><span class="linenos">1149</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Delete-1150"><a href="#Delete-1150"><span class="linenos">1150</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Delete-1151"><a href="#Delete-1151"><span class="linenos">1151</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1152"><a href="#Delete-1152"><span class="linenos">1152</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="Delete-1153"><a href="#Delete-1153"><span class="linenos">1153</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Delete-1154"><a href="#Delete-1154"><span class="linenos">1154</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Delete-1155"><a href="#Delete-1155"><span class="linenos">1155</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete-1156"><a href="#Delete-1156"><span class="linenos">1156</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete-1157"><a href="#Delete-1157"><span class="linenos">1157</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1158"><a href="#Delete-1158"><span class="linenos">1158</span></a> <span class="p">)</span>
-</span><span id="Delete-1159"><a href="#Delete-1159"><span class="linenos">1159</span></a>
-</span><span id="Delete-1160"><a href="#Delete-1160"><span class="linenos">1160</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
-</span><span id="Delete-1161"><a href="#Delete-1161"><span class="linenos">1161</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1162"><a href="#Delete-1162"><span class="linenos">1162</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete-1163"><a href="#Delete-1163"><span class="linenos">1163</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="Delete-1164"><a href="#Delete-1164"><span class="linenos">1164</span></a> <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><span id="Delete-1165"><a href="#Delete-1165"><span class="linenos">1165</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1166"><a href="#Delete-1166"><span class="linenos">1166</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete-1167"><a href="#Delete-1167"><span class="linenos">1167</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete-1168"><a href="#Delete-1168"><span class="linenos">1168</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
-</span><span id="Delete-1169"><a href="#Delete-1169"><span class="linenos">1169</span></a>
-</span><span id="Delete-1170"><a href="#Delete-1170"><span class="linenos">1170</span></a><span class="sd"> Example:</span>
-</span><span id="Delete-1171"><a href="#Delete-1171"><span class="linenos">1171</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).returning(&quot;*&quot;, dialect=&quot;postgres&quot;).sql()</span>
-</span><span id="Delete-1172"><a href="#Delete-1172"><span class="linenos">1172</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
-</span><span id="Delete-1173"><a href="#Delete-1173"><span class="linenos">1173</span></a>
-</span><span id="Delete-1174"><a href="#Delete-1174"><span class="linenos">1174</span></a><span class="sd"> Args:</span>
-</span><span id="Delete-1175"><a href="#Delete-1175"><span class="linenos">1175</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="Delete-1176"><a href="#Delete-1176"><span class="linenos">1176</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete-1177"><a href="#Delete-1177"><span class="linenos">1177</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete-1178"><a href="#Delete-1178"><span class="linenos">1178</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete-1179"><a href="#Delete-1179"><span class="linenos">1179</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete-1180"><a href="#Delete-1180"><span class="linenos">1180</span></a>
-</span><span id="Delete-1181"><a href="#Delete-1181"><span class="linenos">1181</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete-1182"><a href="#Delete-1182"><span class="linenos">1182</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete-1183"><a href="#Delete-1183"><span class="linenos">1183</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete-1184"><a href="#Delete-1184"><span class="linenos">1184</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete-1185"><a href="#Delete-1185"><span class="linenos">1185</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Delete-1186"><a href="#Delete-1186"><span class="linenos">1186</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete-1187"><a href="#Delete-1187"><span class="linenos">1187</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;returning&quot;</span><span class="p">,</span>
-</span><span id="Delete-1188"><a href="#Delete-1188"><span class="linenos">1188</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span>
-</span><span id="Delete-1189"><a href="#Delete-1189"><span class="linenos">1189</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete-1190"><a href="#Delete-1190"><span class="linenos">1190</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete-1191"><a href="#Delete-1191"><span class="linenos">1191</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
-</span><span id="Delete-1192"><a href="#Delete-1192"><span class="linenos">1192</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete-1193"><a href="#Delete-1193"><span class="linenos">1193</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete-1208"><a href="#Delete-1208"><span class="linenos">1208</span></a><span class="k">class</span> <span class="nc">Delete</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Delete-1209"><a href="#Delete-1209"><span class="linenos">1209</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</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;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Delete-1210"><a href="#Delete-1210"><span class="linenos">1210</span></a>
+</span><span id="Delete-1211"><a href="#Delete-1211"><span class="linenos">1211</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="Delete-1212"><a href="#Delete-1212"><span class="linenos">1212</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1213"><a href="#Delete-1213"><span class="linenos">1213</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete-1214"><a href="#Delete-1214"><span class="linenos">1214</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="Delete-1215"><a href="#Delete-1215"><span class="linenos">1215</span></a> <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><span id="Delete-1216"><a href="#Delete-1216"><span class="linenos">1216</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1217"><a href="#Delete-1217"><span class="linenos">1217</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete-1218"><a href="#Delete-1218"><span class="linenos">1218</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete-1219"><a href="#Delete-1219"><span class="linenos">1219</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
+</span><span id="Delete-1220"><a href="#Delete-1220"><span class="linenos">1220</span></a>
+</span><span id="Delete-1221"><a href="#Delete-1221"><span class="linenos">1221</span></a><span class="sd"> Example:</span>
+</span><span id="Delete-1222"><a href="#Delete-1222"><span class="linenos">1222</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
+</span><span id="Delete-1223"><a href="#Delete-1223"><span class="linenos">1223</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
+</span><span id="Delete-1224"><a href="#Delete-1224"><span class="linenos">1224</span></a>
+</span><span id="Delete-1225"><a href="#Delete-1225"><span class="linenos">1225</span></a><span class="sd"> Args:</span>
+</span><span id="Delete-1226"><a href="#Delete-1226"><span class="linenos">1226</span></a><span class="sd"> table: the table from which to delete.</span>
+</span><span id="Delete-1227"><a href="#Delete-1227"><span class="linenos">1227</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Delete-1228"><a href="#Delete-1228"><span class="linenos">1228</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete-1229"><a href="#Delete-1229"><span class="linenos">1229</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete-1230"><a href="#Delete-1230"><span class="linenos">1230</span></a>
+</span><span id="Delete-1231"><a href="#Delete-1231"><span class="linenos">1231</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete-1232"><a href="#Delete-1232"><span class="linenos">1232</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete-1233"><a href="#Delete-1233"><span class="linenos">1233</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete-1234"><a href="#Delete-1234"><span class="linenos">1234</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete-1235"><a href="#Delete-1235"><span class="linenos">1235</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Delete-1236"><a href="#Delete-1236"><span class="linenos">1236</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1237"><a href="#Delete-1237"><span class="linenos">1237</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="Delete-1238"><a href="#Delete-1238"><span class="linenos">1238</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete-1239"><a href="#Delete-1239"><span class="linenos">1239</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="Delete-1240"><a href="#Delete-1240"><span class="linenos">1240</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete-1241"><a href="#Delete-1241"><span class="linenos">1241</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1242"><a href="#Delete-1242"><span class="linenos">1242</span></a> <span class="p">)</span>
+</span><span id="Delete-1243"><a href="#Delete-1243"><span class="linenos">1243</span></a>
+</span><span id="Delete-1244"><a href="#Delete-1244"><span class="linenos">1244</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="Delete-1245"><a href="#Delete-1245"><span class="linenos">1245</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1246"><a href="#Delete-1246"><span class="linenos">1246</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete-1247"><a href="#Delete-1247"><span class="linenos">1247</span></a> <span class="n">append</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="Delete-1248"><a href="#Delete-1248"><span class="linenos">1248</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="Delete-1249"><a href="#Delete-1249"><span class="linenos">1249</span></a> <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><span id="Delete-1250"><a href="#Delete-1250"><span class="linenos">1250</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1251"><a href="#Delete-1251"><span class="linenos">1251</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete-1252"><a href="#Delete-1252"><span class="linenos">1252</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete-1253"><a href="#Delete-1253"><span class="linenos">1253</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Delete-1254"><a href="#Delete-1254"><span class="linenos">1254</span></a>
+</span><span id="Delete-1255"><a href="#Delete-1255"><span class="linenos">1255</span></a><span class="sd"> Example:</span>
+</span><span id="Delete-1256"><a href="#Delete-1256"><span class="linenos">1256</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
+</span><span id="Delete-1257"><a href="#Delete-1257"><span class="linenos">1257</span></a><span class="sd"> &quot;DELETE FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
+</span><span id="Delete-1258"><a href="#Delete-1258"><span class="linenos">1258</span></a>
+</span><span id="Delete-1259"><a href="#Delete-1259"><span class="linenos">1259</span></a><span class="sd"> Args:</span>
+</span><span id="Delete-1260"><a href="#Delete-1260"><span class="linenos">1260</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Delete-1261"><a href="#Delete-1261"><span class="linenos">1261</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete-1262"><a href="#Delete-1262"><span class="linenos">1262</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Delete-1263"><a href="#Delete-1263"><span class="linenos">1263</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Delete-1264"><a href="#Delete-1264"><span class="linenos">1264</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Delete-1265"><a href="#Delete-1265"><span class="linenos">1265</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete-1266"><a href="#Delete-1266"><span class="linenos">1266</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete-1267"><a href="#Delete-1267"><span class="linenos">1267</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete-1268"><a href="#Delete-1268"><span class="linenos">1268</span></a>
+</span><span id="Delete-1269"><a href="#Delete-1269"><span class="linenos">1269</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete-1270"><a href="#Delete-1270"><span class="linenos">1270</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete-1271"><a href="#Delete-1271"><span class="linenos">1271</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete-1272"><a href="#Delete-1272"><span class="linenos">1272</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Delete-1273"><a href="#Delete-1273"><span class="linenos">1273</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Delete-1274"><a href="#Delete-1274"><span class="linenos">1274</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1275"><a href="#Delete-1275"><span class="linenos">1275</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="Delete-1276"><a href="#Delete-1276"><span class="linenos">1276</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Delete-1277"><a href="#Delete-1277"><span class="linenos">1277</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Delete-1278"><a href="#Delete-1278"><span class="linenos">1278</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete-1279"><a href="#Delete-1279"><span class="linenos">1279</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete-1280"><a href="#Delete-1280"><span class="linenos">1280</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1281"><a href="#Delete-1281"><span class="linenos">1281</span></a> <span class="p">)</span>
+</span><span id="Delete-1282"><a href="#Delete-1282"><span class="linenos">1282</span></a>
+</span><span id="Delete-1283"><a href="#Delete-1283"><span class="linenos">1283</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
+</span><span id="Delete-1284"><a href="#Delete-1284"><span class="linenos">1284</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1285"><a href="#Delete-1285"><span class="linenos">1285</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete-1286"><a href="#Delete-1286"><span class="linenos">1286</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="Delete-1287"><a href="#Delete-1287"><span class="linenos">1287</span></a> <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><span id="Delete-1288"><a href="#Delete-1288"><span class="linenos">1288</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1289"><a href="#Delete-1289"><span class="linenos">1289</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete-1290"><a href="#Delete-1290"><span class="linenos">1290</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete-1291"><a href="#Delete-1291"><span class="linenos">1291</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
+</span><span id="Delete-1292"><a href="#Delete-1292"><span class="linenos">1292</span></a>
+</span><span id="Delete-1293"><a href="#Delete-1293"><span class="linenos">1293</span></a><span class="sd"> Example:</span>
+</span><span id="Delete-1294"><a href="#Delete-1294"><span class="linenos">1294</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).returning(&quot;*&quot;, dialect=&quot;postgres&quot;).sql()</span>
+</span><span id="Delete-1295"><a href="#Delete-1295"><span class="linenos">1295</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
+</span><span id="Delete-1296"><a href="#Delete-1296"><span class="linenos">1296</span></a>
+</span><span id="Delete-1297"><a href="#Delete-1297"><span class="linenos">1297</span></a><span class="sd"> Args:</span>
+</span><span id="Delete-1298"><a href="#Delete-1298"><span class="linenos">1298</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="Delete-1299"><a href="#Delete-1299"><span class="linenos">1299</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete-1300"><a href="#Delete-1300"><span class="linenos">1300</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete-1301"><a href="#Delete-1301"><span class="linenos">1301</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete-1302"><a href="#Delete-1302"><span class="linenos">1302</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete-1303"><a href="#Delete-1303"><span class="linenos">1303</span></a>
+</span><span id="Delete-1304"><a href="#Delete-1304"><span class="linenos">1304</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete-1305"><a href="#Delete-1305"><span class="linenos">1305</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete-1306"><a href="#Delete-1306"><span class="linenos">1306</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete-1307"><a href="#Delete-1307"><span class="linenos">1307</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete-1308"><a href="#Delete-1308"><span class="linenos">1308</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Delete-1309"><a href="#Delete-1309"><span class="linenos">1309</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete-1310"><a href="#Delete-1310"><span class="linenos">1310</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;returning&quot;</span><span class="p">,</span>
+</span><span id="Delete-1311"><a href="#Delete-1311"><span class="linenos">1311</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span>
+</span><span id="Delete-1312"><a href="#Delete-1312"><span class="linenos">1312</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete-1313"><a href="#Delete-1313"><span class="linenos">1313</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete-1314"><a href="#Delete-1314"><span class="linenos">1314</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
+</span><span id="Delete-1315"><a href="#Delete-1315"><span class="linenos">1315</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete-1316"><a href="#Delete-1316"><span class="linenos">1316</span></a> <span class="p">)</span>
</span></pre></div>
@@ -14207,38 +14700,38 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Delete.delete"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.delete-1088"><a href="#Delete.delete-1088"><span class="linenos">1088</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="Delete.delete-1089"><a href="#Delete.delete-1089"><span class="linenos">1089</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.delete-1090"><a href="#Delete.delete-1090"><span class="linenos">1090</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete.delete-1091"><a href="#Delete.delete-1091"><span class="linenos">1091</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="Delete.delete-1092"><a href="#Delete.delete-1092"><span class="linenos">1092</span></a> <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><span id="Delete.delete-1093"><a href="#Delete.delete-1093"><span class="linenos">1093</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.delete-1094"><a href="#Delete.delete-1094"><span class="linenos">1094</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete.delete-1095"><a href="#Delete.delete-1095"><span class="linenos">1095</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete.delete-1096"><a href="#Delete.delete-1096"><span class="linenos">1096</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
-</span><span id="Delete.delete-1097"><a href="#Delete.delete-1097"><span class="linenos">1097</span></a>
-</span><span id="Delete.delete-1098"><a href="#Delete.delete-1098"><span class="linenos">1098</span></a><span class="sd"> Example:</span>
-</span><span id="Delete.delete-1099"><a href="#Delete.delete-1099"><span class="linenos">1099</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
-</span><span id="Delete.delete-1100"><a href="#Delete.delete-1100"><span class="linenos">1100</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
-</span><span id="Delete.delete-1101"><a href="#Delete.delete-1101"><span class="linenos">1101</span></a>
-</span><span id="Delete.delete-1102"><a href="#Delete.delete-1102"><span class="linenos">1102</span></a><span class="sd"> Args:</span>
-</span><span id="Delete.delete-1103"><a href="#Delete.delete-1103"><span class="linenos">1103</span></a><span class="sd"> table: the table from which to delete.</span>
-</span><span id="Delete.delete-1104"><a href="#Delete.delete-1104"><span class="linenos">1104</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="Delete.delete-1105"><a href="#Delete.delete-1105"><span class="linenos">1105</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete.delete-1106"><a href="#Delete.delete-1106"><span class="linenos">1106</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete.delete-1107"><a href="#Delete.delete-1107"><span class="linenos">1107</span></a>
-</span><span id="Delete.delete-1108"><a href="#Delete.delete-1108"><span class="linenos">1108</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete.delete-1109"><a href="#Delete.delete-1109"><span class="linenos">1109</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete.delete-1110"><a href="#Delete.delete-1110"><span class="linenos">1110</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete.delete-1111"><a href="#Delete.delete-1111"><span class="linenos">1111</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete.delete-1112"><a href="#Delete.delete-1112"><span class="linenos">1112</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Delete.delete-1113"><a href="#Delete.delete-1113"><span class="linenos">1113</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.delete-1114"><a href="#Delete.delete-1114"><span class="linenos">1114</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span>
-</span><span id="Delete.delete-1115"><a href="#Delete.delete-1115"><span class="linenos">1115</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete.delete-1116"><a href="#Delete.delete-1116"><span class="linenos">1116</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="Delete.delete-1117"><a href="#Delete.delete-1117"><span class="linenos">1117</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete.delete-1118"><a href="#Delete.delete-1118"><span class="linenos">1118</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.delete-1119"><a href="#Delete.delete-1119"><span class="linenos">1119</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.delete-1211"><a href="#Delete.delete-1211"><span class="linenos">1211</span></a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="Delete.delete-1212"><a href="#Delete.delete-1212"><span class="linenos">1212</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.delete-1213"><a href="#Delete.delete-1213"><span class="linenos">1213</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete.delete-1214"><a href="#Delete.delete-1214"><span class="linenos">1214</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="Delete.delete-1215"><a href="#Delete.delete-1215"><span class="linenos">1215</span></a> <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><span id="Delete.delete-1216"><a href="#Delete.delete-1216"><span class="linenos">1216</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.delete-1217"><a href="#Delete.delete-1217"><span class="linenos">1217</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete.delete-1218"><a href="#Delete.delete-1218"><span class="linenos">1218</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete.delete-1219"><a href="#Delete.delete-1219"><span class="linenos">1219</span></a><span class="sd"> Create a DELETE expression or replace the table on an existing DELETE expression.</span>
+</span><span id="Delete.delete-1220"><a href="#Delete.delete-1220"><span class="linenos">1220</span></a>
+</span><span id="Delete.delete-1221"><a href="#Delete.delete-1221"><span class="linenos">1221</span></a><span class="sd"> Example:</span>
+</span><span id="Delete.delete-1222"><a href="#Delete.delete-1222"><span class="linenos">1222</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).sql()</span>
+</span><span id="Delete.delete-1223"><a href="#Delete.delete-1223"><span class="linenos">1223</span></a><span class="sd"> &#39;DELETE FROM tbl&#39;</span>
+</span><span id="Delete.delete-1224"><a href="#Delete.delete-1224"><span class="linenos">1224</span></a>
+</span><span id="Delete.delete-1225"><a href="#Delete.delete-1225"><span class="linenos">1225</span></a><span class="sd"> Args:</span>
+</span><span id="Delete.delete-1226"><a href="#Delete.delete-1226"><span class="linenos">1226</span></a><span class="sd"> table: the table from which to delete.</span>
+</span><span id="Delete.delete-1227"><a href="#Delete.delete-1227"><span class="linenos">1227</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="Delete.delete-1228"><a href="#Delete.delete-1228"><span class="linenos">1228</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete.delete-1229"><a href="#Delete.delete-1229"><span class="linenos">1229</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete.delete-1230"><a href="#Delete.delete-1230"><span class="linenos">1230</span></a>
+</span><span id="Delete.delete-1231"><a href="#Delete.delete-1231"><span class="linenos">1231</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete.delete-1232"><a href="#Delete.delete-1232"><span class="linenos">1232</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete.delete-1233"><a href="#Delete.delete-1233"><span class="linenos">1233</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete.delete-1234"><a href="#Delete.delete-1234"><span class="linenos">1234</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete.delete-1235"><a href="#Delete.delete-1235"><span class="linenos">1235</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Delete.delete-1236"><a href="#Delete.delete-1236"><span class="linenos">1236</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.delete-1237"><a href="#Delete.delete-1237"><span class="linenos">1237</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;this&quot;</span><span class="p">,</span>
+</span><span id="Delete.delete-1238"><a href="#Delete.delete-1238"><span class="linenos">1238</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete.delete-1239"><a href="#Delete.delete-1239"><span class="linenos">1239</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="Delete.delete-1240"><a href="#Delete.delete-1240"><span class="linenos">1240</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete.delete-1241"><a href="#Delete.delete-1241"><span class="linenos">1241</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.delete-1242"><a href="#Delete.delete-1242"><span class="linenos">1242</span></a> <span class="p">)</span>
</span></pre></div>
@@ -14283,44 +14776,44 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Delete.where"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.where-1121"><a href="#Delete.where-1121"><span class="linenos">1121</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
-</span><span id="Delete.where-1122"><a href="#Delete.where-1122"><span class="linenos">1122</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.where-1123"><a href="#Delete.where-1123"><span class="linenos">1123</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete.where-1124"><a href="#Delete.where-1124"><span class="linenos">1124</span></a> <span class="n">append</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="Delete.where-1125"><a href="#Delete.where-1125"><span class="linenos">1125</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="Delete.where-1126"><a href="#Delete.where-1126"><span class="linenos">1126</span></a> <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><span id="Delete.where-1127"><a href="#Delete.where-1127"><span class="linenos">1127</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.where-1128"><a href="#Delete.where-1128"><span class="linenos">1128</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete.where-1129"><a href="#Delete.where-1129"><span class="linenos">1129</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete.where-1130"><a href="#Delete.where-1130"><span class="linenos">1130</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="Delete.where-1131"><a href="#Delete.where-1131"><span class="linenos">1131</span></a>
-</span><span id="Delete.where-1132"><a href="#Delete.where-1132"><span class="linenos">1132</span></a><span class="sd"> Example:</span>
-</span><span id="Delete.where-1133"><a href="#Delete.where-1133"><span class="linenos">1133</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
-</span><span id="Delete.where-1134"><a href="#Delete.where-1134"><span class="linenos">1134</span></a><span class="sd"> &quot;DELETE FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
-</span><span id="Delete.where-1135"><a href="#Delete.where-1135"><span class="linenos">1135</span></a>
-</span><span id="Delete.where-1136"><a href="#Delete.where-1136"><span class="linenos">1136</span></a><span class="sd"> Args:</span>
-</span><span id="Delete.where-1137"><a href="#Delete.where-1137"><span class="linenos">1137</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Delete.where-1138"><a href="#Delete.where-1138"><span class="linenos">1138</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete.where-1139"><a href="#Delete.where-1139"><span class="linenos">1139</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Delete.where-1140"><a href="#Delete.where-1140"><span class="linenos">1140</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Delete.where-1141"><a href="#Delete.where-1141"><span class="linenos">1141</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Delete.where-1142"><a href="#Delete.where-1142"><span class="linenos">1142</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete.where-1143"><a href="#Delete.where-1143"><span class="linenos">1143</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete.where-1144"><a href="#Delete.where-1144"><span class="linenos">1144</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete.where-1145"><a href="#Delete.where-1145"><span class="linenos">1145</span></a>
-</span><span id="Delete.where-1146"><a href="#Delete.where-1146"><span class="linenos">1146</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete.where-1147"><a href="#Delete.where-1147"><span class="linenos">1147</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete.where-1148"><a href="#Delete.where-1148"><span class="linenos">1148</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete.where-1149"><a href="#Delete.where-1149"><span class="linenos">1149</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Delete.where-1150"><a href="#Delete.where-1150"><span class="linenos">1150</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Delete.where-1151"><a href="#Delete.where-1151"><span class="linenos">1151</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.where-1152"><a href="#Delete.where-1152"><span class="linenos">1152</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="Delete.where-1153"><a href="#Delete.where-1153"><span class="linenos">1153</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Delete.where-1154"><a href="#Delete.where-1154"><span class="linenos">1154</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Delete.where-1155"><a href="#Delete.where-1155"><span class="linenos">1155</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete.where-1156"><a href="#Delete.where-1156"><span class="linenos">1156</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete.where-1157"><a href="#Delete.where-1157"><span class="linenos">1157</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.where-1158"><a href="#Delete.where-1158"><span class="linenos">1158</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.where-1244"><a href="#Delete.where-1244"><span class="linenos">1244</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span>
+</span><span id="Delete.where-1245"><a href="#Delete.where-1245"><span class="linenos">1245</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.where-1246"><a href="#Delete.where-1246"><span class="linenos">1246</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete.where-1247"><a href="#Delete.where-1247"><span class="linenos">1247</span></a> <span class="n">append</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="Delete.where-1248"><a href="#Delete.where-1248"><span class="linenos">1248</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="Delete.where-1249"><a href="#Delete.where-1249"><span class="linenos">1249</span></a> <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><span id="Delete.where-1250"><a href="#Delete.where-1250"><span class="linenos">1250</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.where-1251"><a href="#Delete.where-1251"><span class="linenos">1251</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete.where-1252"><a href="#Delete.where-1252"><span class="linenos">1252</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete.where-1253"><a href="#Delete.where-1253"><span class="linenos">1253</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Delete.where-1254"><a href="#Delete.where-1254"><span class="linenos">1254</span></a>
+</span><span id="Delete.where-1255"><a href="#Delete.where-1255"><span class="linenos">1255</span></a><span class="sd"> Example:</span>
+</span><span id="Delete.where-1256"><a href="#Delete.where-1256"><span class="linenos">1256</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
+</span><span id="Delete.where-1257"><a href="#Delete.where-1257"><span class="linenos">1257</span></a><span class="sd"> &quot;DELETE FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
+</span><span id="Delete.where-1258"><a href="#Delete.where-1258"><span class="linenos">1258</span></a>
+</span><span id="Delete.where-1259"><a href="#Delete.where-1259"><span class="linenos">1259</span></a><span class="sd"> Args:</span>
+</span><span id="Delete.where-1260"><a href="#Delete.where-1260"><span class="linenos">1260</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Delete.where-1261"><a href="#Delete.where-1261"><span class="linenos">1261</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete.where-1262"><a href="#Delete.where-1262"><span class="linenos">1262</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Delete.where-1263"><a href="#Delete.where-1263"><span class="linenos">1263</span></a><span class="sd"> append: if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Delete.where-1264"><a href="#Delete.where-1264"><span class="linenos">1264</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Delete.where-1265"><a href="#Delete.where-1265"><span class="linenos">1265</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete.where-1266"><a href="#Delete.where-1266"><span class="linenos">1266</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete.where-1267"><a href="#Delete.where-1267"><span class="linenos">1267</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete.where-1268"><a href="#Delete.where-1268"><span class="linenos">1268</span></a>
+</span><span id="Delete.where-1269"><a href="#Delete.where-1269"><span class="linenos">1269</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete.where-1270"><a href="#Delete.where-1270"><span class="linenos">1270</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete.where-1271"><a href="#Delete.where-1271"><span class="linenos">1271</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete.where-1272"><a href="#Delete.where-1272"><span class="linenos">1272</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Delete.where-1273"><a href="#Delete.where-1273"><span class="linenos">1273</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Delete.where-1274"><a href="#Delete.where-1274"><span class="linenos">1274</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.where-1275"><a href="#Delete.where-1275"><span class="linenos">1275</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="Delete.where-1276"><a href="#Delete.where-1276"><span class="linenos">1276</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Delete.where-1277"><a href="#Delete.where-1277"><span class="linenos">1277</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Delete.where-1278"><a href="#Delete.where-1278"><span class="linenos">1278</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete.where-1279"><a href="#Delete.where-1279"><span class="linenos">1279</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete.where-1280"><a href="#Delete.where-1280"><span class="linenos">1280</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.where-1281"><a href="#Delete.where-1281"><span class="linenos">1281</span></a> <span class="p">)</span>
</span></pre></div>
@@ -14369,40 +14862,40 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Delete.returning"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.returning-1160"><a href="#Delete.returning-1160"><span class="linenos">1160</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
-</span><span id="Delete.returning-1161"><a href="#Delete.returning-1161"><span class="linenos">1161</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.returning-1162"><a href="#Delete.returning-1162"><span class="linenos">1162</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Delete.returning-1163"><a href="#Delete.returning-1163"><span class="linenos">1163</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="Delete.returning-1164"><a href="#Delete.returning-1164"><span class="linenos">1164</span></a> <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><span id="Delete.returning-1165"><a href="#Delete.returning-1165"><span class="linenos">1165</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.returning-1166"><a href="#Delete.returning-1166"><span class="linenos">1166</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="Delete.returning-1167"><a href="#Delete.returning-1167"><span class="linenos">1167</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Delete.returning-1168"><a href="#Delete.returning-1168"><span class="linenos">1168</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
-</span><span id="Delete.returning-1169"><a href="#Delete.returning-1169"><span class="linenos">1169</span></a>
-</span><span id="Delete.returning-1170"><a href="#Delete.returning-1170"><span class="linenos">1170</span></a><span class="sd"> Example:</span>
-</span><span id="Delete.returning-1171"><a href="#Delete.returning-1171"><span class="linenos">1171</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).returning(&quot;*&quot;, dialect=&quot;postgres&quot;).sql()</span>
-</span><span id="Delete.returning-1172"><a href="#Delete.returning-1172"><span class="linenos">1172</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
-</span><span id="Delete.returning-1173"><a href="#Delete.returning-1173"><span class="linenos">1173</span></a>
-</span><span id="Delete.returning-1174"><a href="#Delete.returning-1174"><span class="linenos">1174</span></a><span class="sd"> Args:</span>
-</span><span id="Delete.returning-1175"><a href="#Delete.returning-1175"><span class="linenos">1175</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="Delete.returning-1176"><a href="#Delete.returning-1176"><span class="linenos">1176</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Delete.returning-1177"><a href="#Delete.returning-1177"><span class="linenos">1177</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Delete.returning-1178"><a href="#Delete.returning-1178"><span class="linenos">1178</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Delete.returning-1179"><a href="#Delete.returning-1179"><span class="linenos">1179</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Delete.returning-1180"><a href="#Delete.returning-1180"><span class="linenos">1180</span></a>
-</span><span id="Delete.returning-1181"><a href="#Delete.returning-1181"><span class="linenos">1181</span></a><span class="sd"> Returns:</span>
-</span><span id="Delete.returning-1182"><a href="#Delete.returning-1182"><span class="linenos">1182</span></a><span class="sd"> Delete: the modified expression.</span>
-</span><span id="Delete.returning-1183"><a href="#Delete.returning-1183"><span class="linenos">1183</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Delete.returning-1184"><a href="#Delete.returning-1184"><span class="linenos">1184</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Delete.returning-1185"><a href="#Delete.returning-1185"><span class="linenos">1185</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Delete.returning-1186"><a href="#Delete.returning-1186"><span class="linenos">1186</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Delete.returning-1187"><a href="#Delete.returning-1187"><span class="linenos">1187</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;returning&quot;</span><span class="p">,</span>
-</span><span id="Delete.returning-1188"><a href="#Delete.returning-1188"><span class="linenos">1188</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span>
-</span><span id="Delete.returning-1189"><a href="#Delete.returning-1189"><span class="linenos">1189</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Delete.returning-1190"><a href="#Delete.returning-1190"><span class="linenos">1190</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Delete.returning-1191"><a href="#Delete.returning-1191"><span class="linenos">1191</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
-</span><span id="Delete.returning-1192"><a href="#Delete.returning-1192"><span class="linenos">1192</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Delete.returning-1193"><a href="#Delete.returning-1193"><span class="linenos">1193</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Delete.returning-1283"><a href="#Delete.returning-1283"><span class="linenos">1283</span></a> <span class="k">def</span> <span class="nf">returning</span><span class="p">(</span>
+</span><span id="Delete.returning-1284"><a href="#Delete.returning-1284"><span class="linenos">1284</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.returning-1285"><a href="#Delete.returning-1285"><span class="linenos">1285</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Delete.returning-1286"><a href="#Delete.returning-1286"><span class="linenos">1286</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="Delete.returning-1287"><a href="#Delete.returning-1287"><span class="linenos">1287</span></a> <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><span id="Delete.returning-1288"><a href="#Delete.returning-1288"><span class="linenos">1288</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.returning-1289"><a href="#Delete.returning-1289"><span class="linenos">1289</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="Delete.returning-1290"><a href="#Delete.returning-1290"><span class="linenos">1290</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Delete.returning-1291"><a href="#Delete.returning-1291"><span class="linenos">1291</span></a><span class="sd"> Set the RETURNING expression. Not supported by all dialects.</span>
+</span><span id="Delete.returning-1292"><a href="#Delete.returning-1292"><span class="linenos">1292</span></a>
+</span><span id="Delete.returning-1293"><a href="#Delete.returning-1293"><span class="linenos">1293</span></a><span class="sd"> Example:</span>
+</span><span id="Delete.returning-1294"><a href="#Delete.returning-1294"><span class="linenos">1294</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;tbl&quot;).returning(&quot;*&quot;, dialect=&quot;postgres&quot;).sql()</span>
+</span><span id="Delete.returning-1295"><a href="#Delete.returning-1295"><span class="linenos">1295</span></a><span class="sd"> &#39;DELETE FROM tbl RETURNING *&#39;</span>
+</span><span id="Delete.returning-1296"><a href="#Delete.returning-1296"><span class="linenos">1296</span></a>
+</span><span id="Delete.returning-1297"><a href="#Delete.returning-1297"><span class="linenos">1297</span></a><span class="sd"> Args:</span>
+</span><span id="Delete.returning-1298"><a href="#Delete.returning-1298"><span class="linenos">1298</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="Delete.returning-1299"><a href="#Delete.returning-1299"><span class="linenos">1299</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Delete.returning-1300"><a href="#Delete.returning-1300"><span class="linenos">1300</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Delete.returning-1301"><a href="#Delete.returning-1301"><span class="linenos">1301</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Delete.returning-1302"><a href="#Delete.returning-1302"><span class="linenos">1302</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Delete.returning-1303"><a href="#Delete.returning-1303"><span class="linenos">1303</span></a>
+</span><span id="Delete.returning-1304"><a href="#Delete.returning-1304"><span class="linenos">1304</span></a><span class="sd"> Returns:</span>
+</span><span id="Delete.returning-1305"><a href="#Delete.returning-1305"><span class="linenos">1305</span></a><span class="sd"> Delete: the modified expression.</span>
+</span><span id="Delete.returning-1306"><a href="#Delete.returning-1306"><span class="linenos">1306</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Delete.returning-1307"><a href="#Delete.returning-1307"><span class="linenos">1307</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Delete.returning-1308"><a href="#Delete.returning-1308"><span class="linenos">1308</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Delete.returning-1309"><a href="#Delete.returning-1309"><span class="linenos">1309</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Delete.returning-1310"><a href="#Delete.returning-1310"><span class="linenos">1310</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;returning&quot;</span><span class="p">,</span>
+</span><span id="Delete.returning-1311"><a href="#Delete.returning-1311"><span class="linenos">1311</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span>
+</span><span id="Delete.returning-1312"><a href="#Delete.returning-1312"><span class="linenos">1312</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Delete.returning-1313"><a href="#Delete.returning-1313"><span class="linenos">1313</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Delete.returning-1314"><a href="#Delete.returning-1314"><span class="linenos">1314</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Returning</span><span class="p">,</span>
+</span><span id="Delete.returning-1315"><a href="#Delete.returning-1315"><span class="linenos">1315</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Delete.returning-1316"><a href="#Delete.returning-1316"><span class="linenos">1316</span></a> <span class="p">)</span>
</span></pre></div>
@@ -14494,17 +14987,17 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Drop"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Drop-1196"><a href="#Drop-1196"><span class="linenos">1196</span></a><span class="k">class</span> <span class="nc">Drop</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Drop-1197"><a href="#Drop-1197"><span class="linenos">1197</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Drop-1198"><a href="#Drop-1198"><span class="linenos">1198</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1199"><a href="#Drop-1199"><span class="linenos">1199</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1200"><a href="#Drop-1200"><span class="linenos">1200</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1201"><a href="#Drop-1201"><span class="linenos">1201</span></a> <span class="s2">&quot;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1202"><a href="#Drop-1202"><span class="linenos">1202</span></a> <span class="s2">&quot;materialized&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1203"><a href="#Drop-1203"><span class="linenos">1203</span></a> <span class="s2">&quot;cascade&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1204"><a href="#Drop-1204"><span class="linenos">1204</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1205"><a href="#Drop-1205"><span class="linenos">1205</span></a> <span class="s2">&quot;purge&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Drop-1206"><a href="#Drop-1206"><span class="linenos">1206</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Drop-1319"><a href="#Drop-1319"><span class="linenos">1319</span></a><span class="k">class</span> <span class="nc">Drop</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Drop-1320"><a href="#Drop-1320"><span class="linenos">1320</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Drop-1321"><a href="#Drop-1321"><span class="linenos">1321</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1322"><a href="#Drop-1322"><span class="linenos">1322</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1323"><a href="#Drop-1323"><span class="linenos">1323</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1324"><a href="#Drop-1324"><span class="linenos">1324</span></a> <span class="s2">&quot;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1325"><a href="#Drop-1325"><span class="linenos">1325</span></a> <span class="s2">&quot;materialized&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1326"><a href="#Drop-1326"><span class="linenos">1326</span></a> <span class="s2">&quot;cascade&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1327"><a href="#Drop-1327"><span class="linenos">1327</span></a> <span class="s2">&quot;constraints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1328"><a href="#Drop-1328"><span class="linenos">1328</span></a> <span class="s2">&quot;purge&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Drop-1329"><a href="#Drop-1329"><span class="linenos">1329</span></a> <span class="p">}</span>
</span></pre></div>
@@ -14567,8 +15060,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Filter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Filter-1209"><a href="#Filter-1209"><span class="linenos">1209</span></a><span class="k">class</span> <span class="nc">Filter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Filter-1210"><a href="#Filter-1210"><span class="linenos">1210</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Filter-1332"><a href="#Filter-1332"><span class="linenos">1332</span></a><span class="k">class</span> <span class="nc">Filter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Filter-1333"><a href="#Filter-1333"><span class="linenos">1333</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></pre></div>
@@ -14631,8 +15124,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Check"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Check-1213"><a href="#Check-1213"><span class="linenos">1213</span></a><span class="k">class</span> <span class="nc">Check</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Check-1214"><a href="#Check-1214"><span class="linenos">1214</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Check-1336"><a href="#Check-1336"><span class="linenos">1336</span></a><span class="k">class</span> <span class="nc">Check</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Check-1337"><a href="#Check-1337"><span class="linenos">1337</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -14695,9 +15188,9 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Directory"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Directory-1217"><a href="#Directory-1217"><span class="linenos">1217</span></a><span class="k">class</span> <span class="nc">Directory</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Directory-1218"><a href="#Directory-1218"><span class="linenos">1218</span></a> <span class="c1"># https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-dml-insert-overwrite-directory-hive.html</span>
-</span><span id="Directory-1219"><a href="#Directory-1219"><span class="linenos">1219</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;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Directory-1340"><a href="#Directory-1340"><span class="linenos">1340</span></a><span class="k">class</span> <span class="nc">Directory</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Directory-1341"><a href="#Directory-1341"><span class="linenos">1341</span></a> <span class="c1"># https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-dml-insert-overwrite-directory-hive.html</span>
+</span><span id="Directory-1342"><a href="#Directory-1342"><span class="linenos">1342</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;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;row_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -14760,13 +15253,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#ForeignKey"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ForeignKey-1222"><a href="#ForeignKey-1222"><span class="linenos">1222</span></a><span class="k">class</span> <span class="nc">ForeignKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="ForeignKey-1223"><a href="#ForeignKey-1223"><span class="linenos">1223</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="ForeignKey-1224"><a href="#ForeignKey-1224"><span class="linenos">1224</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="ForeignKey-1225"><a href="#ForeignKey-1225"><span class="linenos">1225</span></a> <span class="s2">&quot;reference&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ForeignKey-1226"><a href="#ForeignKey-1226"><span class="linenos">1226</span></a> <span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ForeignKey-1227"><a href="#ForeignKey-1227"><span class="linenos">1227</span></a> <span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="ForeignKey-1228"><a href="#ForeignKey-1228"><span class="linenos">1228</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ForeignKey-1345"><a href="#ForeignKey-1345"><span class="linenos">1345</span></a><span class="k">class</span> <span class="nc">ForeignKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="ForeignKey-1346"><a href="#ForeignKey-1346"><span class="linenos">1346</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="ForeignKey-1347"><a href="#ForeignKey-1347"><span class="linenos">1347</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="ForeignKey-1348"><a href="#ForeignKey-1348"><span class="linenos">1348</span></a> <span class="s2">&quot;reference&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ForeignKey-1349"><a href="#ForeignKey-1349"><span class="linenos">1349</span></a> <span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ForeignKey-1350"><a href="#ForeignKey-1350"><span class="linenos">1350</span></a> <span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="ForeignKey-1351"><a href="#ForeignKey-1351"><span class="linenos">1351</span></a> <span class="p">}</span>
</span></pre></div>
@@ -14829,8 +15322,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#PrimaryKey"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PrimaryKey-1231"><a href="#PrimaryKey-1231"><span class="linenos">1231</span></a><span class="k">class</span> <span class="nc">PrimaryKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="PrimaryKey-1232"><a href="#PrimaryKey-1232"><span class="linenos">1232</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PrimaryKey-1354"><a href="#PrimaryKey-1354"><span class="linenos">1354</span></a><span class="k">class</span> <span class="nc">PrimaryKey</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="PrimaryKey-1355"><a href="#PrimaryKey-1355"><span class="linenos">1355</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -14893,8 +15386,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Unique"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unique-1235"><a href="#Unique-1235"><span class="linenos">1235</span></a><span class="k">class</span> <span class="nc">Unique</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Unique-1236"><a href="#Unique-1236"><span class="linenos">1236</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unique-1358"><a href="#Unique-1358"><span class="linenos">1358</span></a><span class="k">class</span> <span class="nc">Unique</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Unique-1359"><a href="#Unique-1359"><span class="linenos">1359</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -14957,8 +15450,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Into"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Into-1241"><a href="#Into-1241"><span class="linenos">1241</span></a><span class="k">class</span> <span class="nc">Into</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Into-1242"><a href="#Into-1242"><span class="linenos">1242</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;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;unlogged&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Into-1364"><a href="#Into-1364"><span class="linenos">1364</span></a><span class="k">class</span> <span class="nc">Into</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Into-1365"><a href="#Into-1365"><span class="linenos">1365</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;temporary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;unlogged&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -15021,8 +15514,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#From"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="From-1245"><a href="#From-1245"><span class="linenos">1245</span></a><span class="k">class</span> <span class="nc">From</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="From-1246"><a href="#From-1246"><span class="linenos">1246</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="From-1368"><a href="#From-1368"><span class="linenos">1368</span></a><span class="k">class</span> <span class="nc">From</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="From-1369"><a href="#From-1369"><span class="linenos">1369</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -15085,8 +15578,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Having"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Having-1249"><a href="#Having-1249"><span class="linenos">1249</span></a><span class="k">class</span> <span class="nc">Having</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Having-1250"><a href="#Having-1250"><span class="linenos">1250</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Having-1372"><a href="#Having-1372"><span class="linenos">1372</span></a><span class="k">class</span> <span class="nc">Having</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Having-1373"><a href="#Having-1373"><span class="linenos">1373</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -15149,8 +15642,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Hint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hint-1253"><a href="#Hint-1253"><span class="linenos">1253</span></a><span class="k">class</span> <span class="nc">Hint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Hint-1254"><a href="#Hint-1254"><span class="linenos">1254</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hint-1376"><a href="#Hint-1376"><span class="linenos">1376</span></a><span class="k">class</span> <span class="nc">Hint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Hint-1377"><a href="#Hint-1377"><span class="linenos">1377</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -15213,8 +15706,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#JoinHint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JoinHint-1257"><a href="#JoinHint-1257"><span class="linenos">1257</span></a><span class="k">class</span> <span class="nc">JoinHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="JoinHint-1258"><a href="#JoinHint-1258"><span class="linenos">1258</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JoinHint-1380"><a href="#JoinHint-1380"><span class="linenos">1380</span></a><span class="k">class</span> <span class="nc">JoinHint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="JoinHint-1381"><a href="#JoinHint-1381"><span class="linenos">1381</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -15277,22 +15770,22 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Identifier-1261"><a href="#Identifier-1261"><span class="linenos">1261</span></a><span class="k">class</span> <span class="nc">Identifier</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Identifier-1262"><a href="#Identifier-1262"><span class="linenos">1262</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;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Identifier-1263"><a href="#Identifier-1263"><span class="linenos">1263</span></a>
-</span><span id="Identifier-1264"><a href="#Identifier-1264"><span class="linenos">1264</span></a> <span class="nd">@property</span>
-</span><span id="Identifier-1265"><a href="#Identifier-1265"><span class="linenos">1265</span></a> <span class="k">def</span> <span class="nf">quoted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Identifier-1266"><a href="#Identifier-1266"><span class="linenos">1266</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;quoted&quot;</span><span class="p">))</span>
-</span><span id="Identifier-1267"><a href="#Identifier-1267"><span class="linenos">1267</span></a>
-</span><span id="Identifier-1268"><a href="#Identifier-1268"><span class="linenos">1268</span></a> <span class="nd">@property</span>
-</span><span id="Identifier-1269"><a href="#Identifier-1269"><span class="linenos">1269</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
-</span><span id="Identifier-1270"><a href="#Identifier-1270"><span class="linenos">1270</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">isupper</span><span class="p">()</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
-</span><span id="Identifier-1271"><a href="#Identifier-1271"><span class="linenos">1271</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</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">quoted</span><span class="p">)</span>
-</span><span id="Identifier-1272"><a href="#Identifier-1272"><span class="linenos">1272</span></a> <span class="k">return</span> <span class="bp">self</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="Identifier-1273"><a href="#Identifier-1273"><span class="linenos">1273</span></a>
-</span><span id="Identifier-1274"><a href="#Identifier-1274"><span class="linenos">1274</span></a> <span class="nd">@property</span>
-</span><span id="Identifier-1275"><a href="#Identifier-1275"><span class="linenos">1275</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><span id="Identifier-1276"><a href="#Identifier-1276"><span class="linenos">1276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Identifier-1384"><a href="#Identifier-1384"><span class="linenos">1384</span></a><span class="k">class</span> <span class="nc">Identifier</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Identifier-1385"><a href="#Identifier-1385"><span class="linenos">1385</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;quoted&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Identifier-1386"><a href="#Identifier-1386"><span class="linenos">1386</span></a>
+</span><span id="Identifier-1387"><a href="#Identifier-1387"><span class="linenos">1387</span></a> <span class="nd">@property</span>
+</span><span id="Identifier-1388"><a href="#Identifier-1388"><span class="linenos">1388</span></a> <span class="k">def</span> <span class="nf">quoted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Identifier-1389"><a href="#Identifier-1389"><span class="linenos">1389</span></a> <span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;quoted&quot;</span><span class="p">))</span>
+</span><span id="Identifier-1390"><a href="#Identifier-1390"><span class="linenos">1390</span></a>
+</span><span id="Identifier-1391"><a href="#Identifier-1391"><span class="linenos">1391</span></a> <span class="nd">@property</span>
+</span><span id="Identifier-1392"><a href="#Identifier-1392"><span class="linenos">1392</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
+</span><span id="Identifier-1393"><a href="#Identifier-1393"><span class="linenos">1393</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">quoted</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">isupper</span><span class="p">()</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
+</span><span id="Identifier-1394"><a href="#Identifier-1394"><span class="linenos">1394</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</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">quoted</span><span class="p">)</span>
+</span><span id="Identifier-1395"><a href="#Identifier-1395"><span class="linenos">1395</span></a> <span class="k">return</span> <span class="bp">self</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="Identifier-1396"><a href="#Identifier-1396"><span class="linenos">1396</span></a>
+</span><span id="Identifier-1397"><a href="#Identifier-1397"><span class="linenos">1397</span></a> <span class="nd">@property</span>
+</span><span id="Identifier-1398"><a href="#Identifier-1398"><span class="linenos">1398</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><span id="Identifier-1399"><a href="#Identifier-1399"><span class="linenos">1399</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -15384,16 +15877,16 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Index"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Index-1279"><a href="#Index-1279"><span class="linenos">1279</span></a><span class="k">class</span> <span class="nc">Index</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Index-1280"><a href="#Index-1280"><span class="linenos">1280</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Index-1281"><a href="#Index-1281"><span class="linenos">1281</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Index-1282"><a href="#Index-1282"><span class="linenos">1282</span></a> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Index-1283"><a href="#Index-1283"><span class="linenos">1283</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Index-1284"><a href="#Index-1284"><span class="linenos">1284</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Index-1285"><a href="#Index-1285"><span class="linenos">1285</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Index-1286"><a href="#Index-1286"><span class="linenos">1286</span></a> <span class="s2">&quot;primary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Index-1287"><a href="#Index-1287"><span class="linenos">1287</span></a> <span class="s2">&quot;amp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</span>
-</span><span id="Index-1288"><a href="#Index-1288"><span class="linenos">1288</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Index-1402"><a href="#Index-1402"><span class="linenos">1402</span></a><span class="k">class</span> <span class="nc">Index</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Index-1403"><a href="#Index-1403"><span class="linenos">1403</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Index-1404"><a href="#Index-1404"><span class="linenos">1404</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Index-1405"><a href="#Index-1405"><span class="linenos">1405</span></a> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Index-1406"><a href="#Index-1406"><span class="linenos">1406</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Index-1407"><a href="#Index-1407"><span class="linenos">1407</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Index-1408"><a href="#Index-1408"><span class="linenos">1408</span></a> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Index-1409"><a href="#Index-1409"><span class="linenos">1409</span></a> <span class="s2">&quot;primary&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Index-1410"><a href="#Index-1410"><span class="linenos">1410</span></a> <span class="s2">&quot;amp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="c1"># teradata</span>
+</span><span id="Index-1411"><a href="#Index-1411"><span class="linenos">1411</span></a> <span class="p">}</span>
</span></pre></div>
@@ -15456,18 +15949,18 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Insert"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Insert-1291"><a href="#Insert-1291"><span class="linenos">1291</span></a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Insert-1292"><a href="#Insert-1292"><span class="linenos">1292</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Insert-1293"><a href="#Insert-1293"><span class="linenos">1293</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1294"><a href="#Insert-1294"><span class="linenos">1294</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Insert-1295"><a href="#Insert-1295"><span class="linenos">1295</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1296"><a href="#Insert-1296"><span class="linenos">1296</span></a> <span class="s2">&quot;conflict&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1297"><a href="#Insert-1297"><span class="linenos">1297</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1298"><a href="#Insert-1298"><span class="linenos">1298</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1299"><a href="#Insert-1299"><span class="linenos">1299</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1300"><a href="#Insert-1300"><span class="linenos">1300</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1301"><a href="#Insert-1301"><span class="linenos">1301</span></a> <span class="s2">&quot;alternative&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Insert-1302"><a href="#Insert-1302"><span class="linenos">1302</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Insert-1414"><a href="#Insert-1414"><span class="linenos">1414</span></a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Insert-1415"><a href="#Insert-1415"><span class="linenos">1415</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Insert-1416"><a href="#Insert-1416"><span class="linenos">1416</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1417"><a href="#Insert-1417"><span class="linenos">1417</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Insert-1418"><a href="#Insert-1418"><span class="linenos">1418</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1419"><a href="#Insert-1419"><span class="linenos">1419</span></a> <span class="s2">&quot;conflict&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1420"><a href="#Insert-1420"><span class="linenos">1420</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1421"><a href="#Insert-1421"><span class="linenos">1421</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1422"><a href="#Insert-1422"><span class="linenos">1422</span></a> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1423"><a href="#Insert-1423"><span class="linenos">1423</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1424"><a href="#Insert-1424"><span class="linenos">1424</span></a> <span class="s2">&quot;alternative&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Insert-1425"><a href="#Insert-1425"><span class="linenos">1425</span></a> <span class="p">}</span>
</span></pre></div>
@@ -15530,14 +16023,14 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#OnConflict"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OnConflict-1305"><a href="#OnConflict-1305"><span class="linenos">1305</span></a><span class="k">class</span> <span class="nc">OnConflict</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="OnConflict-1306"><a href="#OnConflict-1306"><span class="linenos">1306</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="OnConflict-1307"><a href="#OnConflict-1307"><span class="linenos">1307</span></a> <span class="s2">&quot;duplicate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="OnConflict-1308"><a href="#OnConflict-1308"><span class="linenos">1308</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="OnConflict-1309"><a href="#OnConflict-1309"><span class="linenos">1309</span></a> <span class="s2">&quot;nothing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="OnConflict-1310"><a href="#OnConflict-1310"><span class="linenos">1310</span></a> <span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="OnConflict-1311"><a href="#OnConflict-1311"><span class="linenos">1311</span></a> <span class="s2">&quot;constraint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="OnConflict-1312"><a href="#OnConflict-1312"><span class="linenos">1312</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="OnConflict-1428"><a href="#OnConflict-1428"><span class="linenos">1428</span></a><span class="k">class</span> <span class="nc">OnConflict</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="OnConflict-1429"><a href="#OnConflict-1429"><span class="linenos">1429</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="OnConflict-1430"><a href="#OnConflict-1430"><span class="linenos">1430</span></a> <span class="s2">&quot;duplicate&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="OnConflict-1431"><a href="#OnConflict-1431"><span class="linenos">1431</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="OnConflict-1432"><a href="#OnConflict-1432"><span class="linenos">1432</span></a> <span class="s2">&quot;nothing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="OnConflict-1433"><a href="#OnConflict-1433"><span class="linenos">1433</span></a> <span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="OnConflict-1434"><a href="#OnConflict-1434"><span class="linenos">1434</span></a> <span class="s2">&quot;constraint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="OnConflict-1435"><a href="#OnConflict-1435"><span class="linenos">1435</span></a> <span class="p">}</span>
</span></pre></div>
@@ -15600,8 +16093,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Returning"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Returning-1315"><a href="#Returning-1315"><span class="linenos">1315</span></a><span class="k">class</span> <span class="nc">Returning</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Returning-1316"><a href="#Returning-1316"><span class="linenos">1316</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Returning-1438"><a href="#Returning-1438"><span class="linenos">1438</span></a><span class="k">class</span> <span class="nc">Returning</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Returning-1439"><a href="#Returning-1439"><span class="linenos">1439</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -15664,8 +16157,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Introducer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Introducer-1320"><a href="#Introducer-1320"><span class="linenos">1320</span></a><span class="k">class</span> <span class="nc">Introducer</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Introducer-1321"><a href="#Introducer-1321"><span class="linenos">1321</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Introducer-1443"><a href="#Introducer-1443"><span class="linenos">1443</span></a><span class="k">class</span> <span class="nc">Introducer</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Introducer-1444"><a href="#Introducer-1444"><span class="linenos">1444</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></pre></div>
@@ -15728,8 +16221,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#National"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="National-1325"><a href="#National-1325"><span class="linenos">1325</span></a><span class="k">class</span> <span class="nc">National</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="National-1326"><a href="#National-1326"><span class="linenos">1326</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="National-1448"><a href="#National-1448"><span class="linenos">1448</span></a><span class="k">class</span> <span class="nc">National</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="National-1449"><a href="#National-1449"><span class="linenos">1449</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -15792,16 +16285,16 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#LoadData"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LoadData-1329"><a href="#LoadData-1329"><span class="linenos">1329</span></a><span class="k">class</span> <span class="nc">LoadData</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="LoadData-1330"><a href="#LoadData-1330"><span class="linenos">1330</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="LoadData-1331"><a href="#LoadData-1331"><span class="linenos">1331</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="LoadData-1332"><a href="#LoadData-1332"><span class="linenos">1332</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="LoadData-1333"><a href="#LoadData-1333"><span class="linenos">1333</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="LoadData-1334"><a href="#LoadData-1334"><span class="linenos">1334</span></a> <span class="s2">&quot;inpath&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="LoadData-1335"><a href="#LoadData-1335"><span class="linenos">1335</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="LoadData-1336"><a href="#LoadData-1336"><span class="linenos">1336</span></a> <span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="LoadData-1337"><a href="#LoadData-1337"><span class="linenos">1337</span></a> <span class="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="LoadData-1338"><a href="#LoadData-1338"><span class="linenos">1338</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LoadData-1452"><a href="#LoadData-1452"><span class="linenos">1452</span></a><span class="k">class</span> <span class="nc">LoadData</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="LoadData-1453"><a href="#LoadData-1453"><span class="linenos">1453</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="LoadData-1454"><a href="#LoadData-1454"><span class="linenos">1454</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="LoadData-1455"><a href="#LoadData-1455"><span class="linenos">1455</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="LoadData-1456"><a href="#LoadData-1456"><span class="linenos">1456</span></a> <span class="s2">&quot;overwrite&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="LoadData-1457"><a href="#LoadData-1457"><span class="linenos">1457</span></a> <span class="s2">&quot;inpath&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="LoadData-1458"><a href="#LoadData-1458"><span class="linenos">1458</span></a> <span class="s2">&quot;partition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="LoadData-1459"><a href="#LoadData-1459"><span class="linenos">1459</span></a> <span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="LoadData-1460"><a href="#LoadData-1460"><span class="linenos">1460</span></a> <span class="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="LoadData-1461"><a href="#LoadData-1461"><span class="linenos">1461</span></a> <span class="p">}</span>
</span></pre></div>
@@ -15864,8 +16357,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Partition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Partition-1341"><a href="#Partition-1341"><span class="linenos">1341</span></a><span class="k">class</span> <span class="nc">Partition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Partition-1342"><a href="#Partition-1342"><span class="linenos">1342</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Partition-1464"><a href="#Partition-1464"><span class="linenos">1464</span></a><span class="k">class</span> <span class="nc">Partition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Partition-1465"><a href="#Partition-1465"><span class="linenos">1465</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -15928,13 +16421,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Fetch"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Fetch-1345"><a href="#Fetch-1345"><span class="linenos">1345</span></a><span class="k">class</span> <span class="nc">Fetch</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Fetch-1346"><a href="#Fetch-1346"><span class="linenos">1346</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Fetch-1347"><a href="#Fetch-1347"><span class="linenos">1347</span></a> <span class="s2">&quot;direction&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Fetch-1348"><a href="#Fetch-1348"><span class="linenos">1348</span></a> <span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Fetch-1349"><a href="#Fetch-1349"><span class="linenos">1349</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Fetch-1350"><a href="#Fetch-1350"><span class="linenos">1350</span></a> <span class="s2">&quot;with_ties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Fetch-1351"><a href="#Fetch-1351"><span class="linenos">1351</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Fetch-1468"><a href="#Fetch-1468"><span class="linenos">1468</span></a><span class="k">class</span> <span class="nc">Fetch</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Fetch-1469"><a href="#Fetch-1469"><span class="linenos">1469</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Fetch-1470"><a href="#Fetch-1470"><span class="linenos">1470</span></a> <span class="s2">&quot;direction&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Fetch-1471"><a href="#Fetch-1471"><span class="linenos">1471</span></a> <span class="s2">&quot;count&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Fetch-1472"><a href="#Fetch-1472"><span class="linenos">1472</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Fetch-1473"><a href="#Fetch-1473"><span class="linenos">1473</span></a> <span class="s2">&quot;with_ties&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Fetch-1474"><a href="#Fetch-1474"><span class="linenos">1474</span></a> <span class="p">}</span>
</span></pre></div>
@@ -15997,13 +16490,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Group"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Group-1354"><a href="#Group-1354"><span class="linenos">1354</span></a><span class="k">class</span> <span class="nc">Group</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Group-1355"><a href="#Group-1355"><span class="linenos">1355</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Group-1356"><a href="#Group-1356"><span class="linenos">1356</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Group-1357"><a href="#Group-1357"><span class="linenos">1357</span></a> <span class="s2">&quot;grouping_sets&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Group-1358"><a href="#Group-1358"><span class="linenos">1358</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Group-1359"><a href="#Group-1359"><span class="linenos">1359</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Group-1360"><a href="#Group-1360"><span class="linenos">1360</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Group-1477"><a href="#Group-1477"><span class="linenos">1477</span></a><span class="k">class</span> <span class="nc">Group</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Group-1478"><a href="#Group-1478"><span class="linenos">1478</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Group-1479"><a href="#Group-1479"><span class="linenos">1479</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Group-1480"><a href="#Group-1480"><span class="linenos">1480</span></a> <span class="s2">&quot;grouping_sets&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Group-1481"><a href="#Group-1481"><span class="linenos">1481</span></a> <span class="s2">&quot;cube&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Group-1482"><a href="#Group-1482"><span class="linenos">1482</span></a> <span class="s2">&quot;rollup&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Group-1483"><a href="#Group-1483"><span class="linenos">1483</span></a> <span class="p">}</span>
</span></pre></div>
@@ -16066,8 +16559,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Lambda"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Lambda-1363"><a href="#Lambda-1363"><span class="linenos">1363</span></a><span class="k">class</span> <span class="nc">Lambda</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Lambda-1364"><a href="#Lambda-1364"><span class="linenos">1364</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Lambda-1486"><a href="#Lambda-1486"><span class="linenos">1486</span></a><span class="k">class</span> <span class="nc">Lambda</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Lambda-1487"><a href="#Lambda-1487"><span class="linenos">1487</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -16130,8 +16623,8 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Limit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Limit-1367"><a href="#Limit-1367"><span class="linenos">1367</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-1368"><a href="#Limit-1368"><span class="linenos">1368</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Limit-1490"><a href="#Limit-1490"><span class="linenos">1490</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-1491"><a href="#Limit-1491"><span class="linenos">1491</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></pre></div>
@@ -16194,24 +16687,24 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Literal"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Literal-1371"><a href="#Literal-1371"><span class="linenos">1371</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>
-</span><span id="Literal-1372"><a href="#Literal-1372"><span class="linenos">1372</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;is_string&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="Literal-1373"><a href="#Literal-1373"><span class="linenos">1373</span></a>
-</span><span id="Literal-1374"><a href="#Literal-1374"><span class="linenos">1374</span></a> <span class="nd">@property</span>
-</span><span id="Literal-1375"><a href="#Literal-1375"><span class="linenos">1375</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
-</span><span id="Literal-1376"><a href="#Literal-1376"><span class="linenos">1376</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_string&quot;</span><span class="p">))</span>
-</span><span id="Literal-1377"><a href="#Literal-1377"><span class="linenos">1377</span></a>
-</span><span id="Literal-1378"><a href="#Literal-1378"><span class="linenos">1378</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal-1379"><a href="#Literal-1379"><span class="linenos">1379</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
-</span><span id="Literal-1380"><a href="#Literal-1380"><span class="linenos">1380</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Literal-1381"><a href="#Literal-1381"><span class="linenos">1381</span></a>
-</span><span id="Literal-1382"><a href="#Literal-1382"><span class="linenos">1382</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal-1383"><a href="#Literal-1383"><span class="linenos">1383</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
-</span><span id="Literal-1384"><a href="#Literal-1384"><span class="linenos">1384</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Literal-1385"><a href="#Literal-1385"><span class="linenos">1385</span></a>
-</span><span id="Literal-1386"><a href="#Literal-1386"><span class="linenos">1386</span></a> <span class="nd">@property</span>
-</span><span id="Literal-1387"><a href="#Literal-1387"><span class="linenos">1387</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><span id="Literal-1388"><a href="#Literal-1388"><span class="linenos">1388</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Literal-1494"><a href="#Literal-1494"><span class="linenos">1494</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>
+</span><span id="Literal-1495"><a href="#Literal-1495"><span class="linenos">1495</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;is_string&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="Literal-1496"><a href="#Literal-1496"><span class="linenos">1496</span></a>
+</span><span id="Literal-1497"><a href="#Literal-1497"><span class="linenos">1497</span></a> <span class="nd">@property</span>
+</span><span id="Literal-1498"><a href="#Literal-1498"><span class="linenos">1498</span></a> <span class="k">def</span> <span class="nf">hashable_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">Any</span><span class="p">:</span>
+</span><span id="Literal-1499"><a href="#Literal-1499"><span class="linenos">1499</span></a> <span class="k">return</span> <span class="p">(</span><span class="bp">self</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">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;is_string&quot;</span><span class="p">))</span>
+</span><span id="Literal-1500"><a href="#Literal-1500"><span class="linenos">1500</span></a>
+</span><span id="Literal-1501"><a href="#Literal-1501"><span class="linenos">1501</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal-1502"><a href="#Literal-1502"><span class="linenos">1502</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
+</span><span id="Literal-1503"><a href="#Literal-1503"><span class="linenos">1503</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Literal-1504"><a href="#Literal-1504"><span class="linenos">1504</span></a>
+</span><span id="Literal-1505"><a href="#Literal-1505"><span class="linenos">1505</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal-1506"><a href="#Literal-1506"><span class="linenos">1506</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
+</span><span id="Literal-1507"><a href="#Literal-1507"><span class="linenos">1507</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Literal-1508"><a href="#Literal-1508"><span class="linenos">1508</span></a>
+</span><span id="Literal-1509"><a href="#Literal-1509"><span class="linenos">1509</span></a> <span class="nd">@property</span>
+</span><span id="Literal-1510"><a href="#Literal-1510"><span class="linenos">1510</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><span id="Literal-1511"><a href="#Literal-1511"><span class="linenos">1511</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -16229,9 +16722,9 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Literal.number"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Literal.number-1378"><a href="#Literal.number-1378"><span class="linenos">1378</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal.number-1379"><a href="#Literal.number-1379"><span class="linenos">1379</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
-</span><span id="Literal.number-1380"><a href="#Literal.number-1380"><span class="linenos">1380</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Literal.number-1501"><a href="#Literal.number-1501"><span class="linenos">1501</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal.number-1502"><a href="#Literal.number-1502"><span class="linenos">1502</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
+</span><span id="Literal.number-1503"><a href="#Literal.number-1503"><span class="linenos">1503</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -16250,9 +16743,9 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Literal.string"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Literal.string-1382"><a href="#Literal.string-1382"><span class="linenos">1382</span></a> <span class="nd">@classmethod</span>
-</span><span id="Literal.string-1383"><a href="#Literal.string-1383"><span class="linenos">1383</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
-</span><span id="Literal.string-1384"><a href="#Literal.string-1384"><span class="linenos">1384</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Literal.string-1505"><a href="#Literal.string-1505"><span class="linenos">1505</span></a> <span class="nd">@classmethod</span>
+</span><span id="Literal.string-1506"><a href="#Literal.string-1506"><span class="linenos">1506</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Literal</span><span class="p">:</span>
+</span><span id="Literal.string-1507"><a href="#Literal.string-1507"><span class="linenos">1507</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></pre></div>
@@ -16335,6 +16828,13 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
<dd id="Literal.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Literal.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Literal.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Literal.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Literal.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Literal.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Literal.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Literal.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Literal.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Literal.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -16351,105 +16851,105 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Join"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Join-1391"><a href="#Join-1391"><span class="linenos">1391</span></a><span class="k">class</span> <span class="nc">Join</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Join-1392"><a href="#Join-1392"><span class="linenos">1392</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Join-1393"><a href="#Join-1393"><span class="linenos">1393</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Join-1394"><a href="#Join-1394"><span class="linenos">1394</span></a> <span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Join-1395"><a href="#Join-1395"><span class="linenos">1395</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Join-1396"><a href="#Join-1396"><span class="linenos">1396</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Join-1397"><a href="#Join-1397"><span class="linenos">1397</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Join-1398"><a href="#Join-1398"><span class="linenos">1398</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Join-1399"><a href="#Join-1399"><span class="linenos">1399</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Join-1400"><a href="#Join-1400"><span class="linenos">1400</span></a> <span class="p">}</span>
-</span><span id="Join-1401"><a href="#Join-1401"><span class="linenos">1401</span></a>
-</span><span id="Join-1402"><a href="#Join-1402"><span class="linenos">1402</span></a> <span class="nd">@property</span>
-</span><span id="Join-1403"><a href="#Join-1403"><span class="linenos">1403</span></a> <span class="k">def</span> <span class="nf">kind</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Join-1404"><a href="#Join-1404"><span class="linenos">1404</span></a> <span class="k">return</span> <span class="bp">self</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Join-1405"><a href="#Join-1405"><span class="linenos">1405</span></a>
-</span><span id="Join-1406"><a href="#Join-1406"><span class="linenos">1406</span></a> <span class="nd">@property</span>
-</span><span id="Join-1407"><a href="#Join-1407"><span class="linenos">1407</span></a> <span class="k">def</span> <span class="nf">side</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Join-1408"><a href="#Join-1408"><span class="linenos">1408</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Join-1409"><a href="#Join-1409"><span class="linenos">1409</span></a>
-</span><span id="Join-1410"><a href="#Join-1410"><span class="linenos">1410</span></a> <span class="nd">@property</span>
-</span><span id="Join-1411"><a href="#Join-1411"><span class="linenos">1411</span></a> <span class="k">def</span> <span class="nf">hint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Join-1412"><a href="#Join-1412"><span class="linenos">1412</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;hint&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Join-1413"><a href="#Join-1413"><span class="linenos">1413</span></a>
-</span><span id="Join-1414"><a href="#Join-1414"><span class="linenos">1414</span></a> <span class="nd">@property</span>
-</span><span id="Join-1415"><a href="#Join-1415"><span class="linenos">1415</span></a> <span class="k">def</span> <span class="nf">alias_or_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Join-1416"><a href="#Join-1416"><span class="linenos">1416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="Join-1417"><a href="#Join-1417"><span class="linenos">1417</span></a>
-</span><span id="Join-1418"><a href="#Join-1418"><span class="linenos">1418</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join-1419"><a href="#Join-1419"><span class="linenos">1419</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join-1420"><a href="#Join-1420"><span class="linenos">1420</span></a><span class="sd"> Append to or set the ON expressions.</span>
-</span><span id="Join-1421"><a href="#Join-1421"><span class="linenos">1421</span></a>
-</span><span id="Join-1422"><a href="#Join-1422"><span class="linenos">1422</span></a><span class="sd"> Example:</span>
-</span><span id="Join-1423"><a href="#Join-1423"><span class="linenos">1423</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join-1424"><a href="#Join-1424"><span class="linenos">1424</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).on(&quot;y = 1&quot;).sql()</span>
-</span><span id="Join-1425"><a href="#Join-1425"><span class="linenos">1425</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
-</span><span id="Join-1426"><a href="#Join-1426"><span class="linenos">1426</span></a>
-</span><span id="Join-1427"><a href="#Join-1427"><span class="linenos">1427</span></a><span class="sd"> Args:</span>
-</span><span id="Join-1428"><a href="#Join-1428"><span class="linenos">1428</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Join-1429"><a href="#Join-1429"><span class="linenos">1429</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join-1430"><a href="#Join-1430"><span class="linenos">1430</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Join-1431"><a href="#Join-1431"><span class="linenos">1431</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Join-1432"><a href="#Join-1432"><span class="linenos">1432</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join-1433"><a href="#Join-1433"><span class="linenos">1433</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Join-1434"><a href="#Join-1434"><span class="linenos">1434</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Join-1435"><a href="#Join-1435"><span class="linenos">1435</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Join-1436"><a href="#Join-1436"><span class="linenos">1436</span></a>
-</span><span id="Join-1437"><a href="#Join-1437"><span class="linenos">1437</span></a><span class="sd"> Returns:</span>
-</span><span id="Join-1438"><a href="#Join-1438"><span class="linenos">1438</span></a><span class="sd"> Join: the modified join expression.</span>
-</span><span id="Join-1439"><a href="#Join-1439"><span class="linenos">1439</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join-1440"><a href="#Join-1440"><span class="linenos">1440</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Join-1441"><a href="#Join-1441"><span class="linenos">1441</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join-1442"><a href="#Join-1442"><span class="linenos">1442</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Join-1443"><a href="#Join-1443"><span class="linenos">1443</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;on&quot;</span><span class="p">,</span>
-</span><span id="Join-1444"><a href="#Join-1444"><span class="linenos">1444</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Join-1445"><a href="#Join-1445"><span class="linenos">1445</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Join-1446"><a href="#Join-1446"><span class="linenos">1446</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Join-1447"><a href="#Join-1447"><span class="linenos">1447</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join-1448"><a href="#Join-1448"><span class="linenos">1448</span></a> <span class="p">)</span>
-</span><span id="Join-1449"><a href="#Join-1449"><span class="linenos">1449</span></a>
-</span><span id="Join-1450"><a href="#Join-1450"><span class="linenos">1450</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
-</span><span id="Join-1451"><a href="#Join-1451"><span class="linenos">1451</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
-</span><span id="Join-1452"><a href="#Join-1452"><span class="linenos">1452</span></a>
-</span><span id="Join-1453"><a href="#Join-1453"><span class="linenos">1453</span></a> <span class="k">return</span> <span class="n">join</span>
-</span><span id="Join-1454"><a href="#Join-1454"><span class="linenos">1454</span></a>
-</span><span id="Join-1455"><a href="#Join-1455"><span class="linenos">1455</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join-1456"><a href="#Join-1456"><span class="linenos">1456</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join-1457"><a href="#Join-1457"><span class="linenos">1457</span></a><span class="sd"> Append to or set the USING expressions.</span>
-</span><span id="Join-1458"><a href="#Join-1458"><span class="linenos">1458</span></a>
-</span><span id="Join-1459"><a href="#Join-1459"><span class="linenos">1459</span></a><span class="sd"> Example:</span>
-</span><span id="Join-1460"><a href="#Join-1460"><span class="linenos">1460</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join-1461"><a href="#Join-1461"><span class="linenos">1461</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).using(&quot;foo&quot;, &quot;bla&quot;).sql()</span>
-</span><span id="Join-1462"><a href="#Join-1462"><span class="linenos">1462</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
-</span><span id="Join-1463"><a href="#Join-1463"><span class="linenos">1463</span></a>
-</span><span id="Join-1464"><a href="#Join-1464"><span class="linenos">1464</span></a><span class="sd"> Args:</span>
-</span><span id="Join-1465"><a href="#Join-1465"><span class="linenos">1465</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Join-1466"><a href="#Join-1466"><span class="linenos">1466</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join-1467"><a href="#Join-1467"><span class="linenos">1467</span></a><span class="sd"> append (bool): if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
-</span><span id="Join-1468"><a href="#Join-1468"><span class="linenos">1468</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join-1469"><a href="#Join-1469"><span class="linenos">1469</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Join-1470"><a href="#Join-1470"><span class="linenos">1470</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Join-1471"><a href="#Join-1471"><span class="linenos">1471</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Join-1472"><a href="#Join-1472"><span class="linenos">1472</span></a>
-</span><span id="Join-1473"><a href="#Join-1473"><span class="linenos">1473</span></a><span class="sd"> Returns:</span>
-</span><span id="Join-1474"><a href="#Join-1474"><span class="linenos">1474</span></a><span class="sd"> Join: the modified join expression.</span>
-</span><span id="Join-1475"><a href="#Join-1475"><span class="linenos">1475</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join-1476"><a href="#Join-1476"><span class="linenos">1476</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Join-1477"><a href="#Join-1477"><span class="linenos">1477</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join-1478"><a href="#Join-1478"><span class="linenos">1478</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Join-1479"><a href="#Join-1479"><span class="linenos">1479</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="Join-1480"><a href="#Join-1480"><span class="linenos">1480</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Join-1481"><a href="#Join-1481"><span class="linenos">1481</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Join-1482"><a href="#Join-1482"><span class="linenos">1482</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Join-1483"><a href="#Join-1483"><span class="linenos">1483</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join-1484"><a href="#Join-1484"><span class="linenos">1484</span></a> <span class="p">)</span>
-</span><span id="Join-1485"><a href="#Join-1485"><span class="linenos">1485</span></a>
-</span><span id="Join-1486"><a href="#Join-1486"><span class="linenos">1486</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
-</span><span id="Join-1487"><a href="#Join-1487"><span class="linenos">1487</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
-</span><span id="Join-1488"><a href="#Join-1488"><span class="linenos">1488</span></a>
-</span><span id="Join-1489"><a href="#Join-1489"><span class="linenos">1489</span></a> <span class="k">return</span> <span class="n">join</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Join-1514"><a href="#Join-1514"><span class="linenos">1514</span></a><span class="k">class</span> <span class="nc">Join</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Join-1515"><a href="#Join-1515"><span class="linenos">1515</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Join-1516"><a href="#Join-1516"><span class="linenos">1516</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Join-1517"><a href="#Join-1517"><span class="linenos">1517</span></a> <span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Join-1518"><a href="#Join-1518"><span class="linenos">1518</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Join-1519"><a href="#Join-1519"><span class="linenos">1519</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Join-1520"><a href="#Join-1520"><span class="linenos">1520</span></a> <span class="s2">&quot;using&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Join-1521"><a href="#Join-1521"><span class="linenos">1521</span></a> <span class="s2">&quot;natural&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Join-1522"><a href="#Join-1522"><span class="linenos">1522</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Join-1523"><a href="#Join-1523"><span class="linenos">1523</span></a> <span class="p">}</span>
+</span><span id="Join-1524"><a href="#Join-1524"><span class="linenos">1524</span></a>
+</span><span id="Join-1525"><a href="#Join-1525"><span class="linenos">1525</span></a> <span class="nd">@property</span>
+</span><span id="Join-1526"><a href="#Join-1526"><span class="linenos">1526</span></a> <span class="k">def</span> <span class="nf">kind</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Join-1527"><a href="#Join-1527"><span class="linenos">1527</span></a> <span class="k">return</span> <span class="bp">self</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Join-1528"><a href="#Join-1528"><span class="linenos">1528</span></a>
+</span><span id="Join-1529"><a href="#Join-1529"><span class="linenos">1529</span></a> <span class="nd">@property</span>
+</span><span id="Join-1530"><a href="#Join-1530"><span class="linenos">1530</span></a> <span class="k">def</span> <span class="nf">side</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Join-1531"><a href="#Join-1531"><span class="linenos">1531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Join-1532"><a href="#Join-1532"><span class="linenos">1532</span></a>
+</span><span id="Join-1533"><a href="#Join-1533"><span class="linenos">1533</span></a> <span class="nd">@property</span>
+</span><span id="Join-1534"><a href="#Join-1534"><span class="linenos">1534</span></a> <span class="k">def</span> <span class="nf">hint</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Join-1535"><a href="#Join-1535"><span class="linenos">1535</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;hint&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Join-1536"><a href="#Join-1536"><span class="linenos">1536</span></a>
+</span><span id="Join-1537"><a href="#Join-1537"><span class="linenos">1537</span></a> <span class="nd">@property</span>
+</span><span id="Join-1538"><a href="#Join-1538"><span class="linenos">1538</span></a> <span class="k">def</span> <span class="nf">alias_or_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Join-1539"><a href="#Join-1539"><span class="linenos">1539</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="Join-1540"><a href="#Join-1540"><span class="linenos">1540</span></a>
+</span><span id="Join-1541"><a href="#Join-1541"><span class="linenos">1541</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join-1542"><a href="#Join-1542"><span class="linenos">1542</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join-1543"><a href="#Join-1543"><span class="linenos">1543</span></a><span class="sd"> Append to or set the ON expressions.</span>
+</span><span id="Join-1544"><a href="#Join-1544"><span class="linenos">1544</span></a>
+</span><span id="Join-1545"><a href="#Join-1545"><span class="linenos">1545</span></a><span class="sd"> Example:</span>
+</span><span id="Join-1546"><a href="#Join-1546"><span class="linenos">1546</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join-1547"><a href="#Join-1547"><span class="linenos">1547</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).on(&quot;y = 1&quot;).sql()</span>
+</span><span id="Join-1548"><a href="#Join-1548"><span class="linenos">1548</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
+</span><span id="Join-1549"><a href="#Join-1549"><span class="linenos">1549</span></a>
+</span><span id="Join-1550"><a href="#Join-1550"><span class="linenos">1550</span></a><span class="sd"> Args:</span>
+</span><span id="Join-1551"><a href="#Join-1551"><span class="linenos">1551</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Join-1552"><a href="#Join-1552"><span class="linenos">1552</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join-1553"><a href="#Join-1553"><span class="linenos">1553</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Join-1554"><a href="#Join-1554"><span class="linenos">1554</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Join-1555"><a href="#Join-1555"><span class="linenos">1555</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join-1556"><a href="#Join-1556"><span class="linenos">1556</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Join-1557"><a href="#Join-1557"><span class="linenos">1557</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Join-1558"><a href="#Join-1558"><span class="linenos">1558</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Join-1559"><a href="#Join-1559"><span class="linenos">1559</span></a>
+</span><span id="Join-1560"><a href="#Join-1560"><span class="linenos">1560</span></a><span class="sd"> Returns:</span>
+</span><span id="Join-1561"><a href="#Join-1561"><span class="linenos">1561</span></a><span class="sd"> Join: the modified join expression.</span>
+</span><span id="Join-1562"><a href="#Join-1562"><span class="linenos">1562</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join-1563"><a href="#Join-1563"><span class="linenos">1563</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Join-1564"><a href="#Join-1564"><span class="linenos">1564</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join-1565"><a href="#Join-1565"><span class="linenos">1565</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Join-1566"><a href="#Join-1566"><span class="linenos">1566</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;on&quot;</span><span class="p">,</span>
+</span><span id="Join-1567"><a href="#Join-1567"><span class="linenos">1567</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Join-1568"><a href="#Join-1568"><span class="linenos">1568</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Join-1569"><a href="#Join-1569"><span class="linenos">1569</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Join-1570"><a href="#Join-1570"><span class="linenos">1570</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join-1571"><a href="#Join-1571"><span class="linenos">1571</span></a> <span class="p">)</span>
+</span><span id="Join-1572"><a href="#Join-1572"><span class="linenos">1572</span></a>
+</span><span id="Join-1573"><a href="#Join-1573"><span class="linenos">1573</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
+</span><span id="Join-1574"><a href="#Join-1574"><span class="linenos">1574</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
+</span><span id="Join-1575"><a href="#Join-1575"><span class="linenos">1575</span></a>
+</span><span id="Join-1576"><a href="#Join-1576"><span class="linenos">1576</span></a> <span class="k">return</span> <span class="n">join</span>
+</span><span id="Join-1577"><a href="#Join-1577"><span class="linenos">1577</span></a>
+</span><span id="Join-1578"><a href="#Join-1578"><span class="linenos">1578</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join-1579"><a href="#Join-1579"><span class="linenos">1579</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join-1580"><a href="#Join-1580"><span class="linenos">1580</span></a><span class="sd"> Append to or set the USING expressions.</span>
+</span><span id="Join-1581"><a href="#Join-1581"><span class="linenos">1581</span></a>
+</span><span id="Join-1582"><a href="#Join-1582"><span class="linenos">1582</span></a><span class="sd"> Example:</span>
+</span><span id="Join-1583"><a href="#Join-1583"><span class="linenos">1583</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join-1584"><a href="#Join-1584"><span class="linenos">1584</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).using(&quot;foo&quot;, &quot;bla&quot;).sql()</span>
+</span><span id="Join-1585"><a href="#Join-1585"><span class="linenos">1585</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
+</span><span id="Join-1586"><a href="#Join-1586"><span class="linenos">1586</span></a>
+</span><span id="Join-1587"><a href="#Join-1587"><span class="linenos">1587</span></a><span class="sd"> Args:</span>
+</span><span id="Join-1588"><a href="#Join-1588"><span class="linenos">1588</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Join-1589"><a href="#Join-1589"><span class="linenos">1589</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join-1590"><a href="#Join-1590"><span class="linenos">1590</span></a><span class="sd"> append (bool): if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
+</span><span id="Join-1591"><a href="#Join-1591"><span class="linenos">1591</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join-1592"><a href="#Join-1592"><span class="linenos">1592</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Join-1593"><a href="#Join-1593"><span class="linenos">1593</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Join-1594"><a href="#Join-1594"><span class="linenos">1594</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Join-1595"><a href="#Join-1595"><span class="linenos">1595</span></a>
+</span><span id="Join-1596"><a href="#Join-1596"><span class="linenos">1596</span></a><span class="sd"> Returns:</span>
+</span><span id="Join-1597"><a href="#Join-1597"><span class="linenos">1597</span></a><span class="sd"> Join: the modified join expression.</span>
+</span><span id="Join-1598"><a href="#Join-1598"><span class="linenos">1598</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join-1599"><a href="#Join-1599"><span class="linenos">1599</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Join-1600"><a href="#Join-1600"><span class="linenos">1600</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join-1601"><a href="#Join-1601"><span class="linenos">1601</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Join-1602"><a href="#Join-1602"><span class="linenos">1602</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="Join-1603"><a href="#Join-1603"><span class="linenos">1603</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Join-1604"><a href="#Join-1604"><span class="linenos">1604</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Join-1605"><a href="#Join-1605"><span class="linenos">1605</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Join-1606"><a href="#Join-1606"><span class="linenos">1606</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join-1607"><a href="#Join-1607"><span class="linenos">1607</span></a> <span class="p">)</span>
+</span><span id="Join-1608"><a href="#Join-1608"><span class="linenos">1608</span></a>
+</span><span id="Join-1609"><a href="#Join-1609"><span class="linenos">1609</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
+</span><span id="Join-1610"><a href="#Join-1610"><span class="linenos">1610</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
+</span><span id="Join-1611"><a href="#Join-1611"><span class="linenos">1611</span></a>
+</span><span id="Join-1612"><a href="#Join-1612"><span class="linenos">1612</span></a> <span class="k">return</span> <span class="n">join</span>
</span></pre></div>
@@ -16466,42 +16966,42 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#Join.on"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Join.on-1418"><a href="#Join.on-1418"><span class="linenos">1418</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join.on-1419"><a href="#Join.on-1419"><span class="linenos">1419</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join.on-1420"><a href="#Join.on-1420"><span class="linenos">1420</span></a><span class="sd"> Append to or set the ON expressions.</span>
-</span><span id="Join.on-1421"><a href="#Join.on-1421"><span class="linenos">1421</span></a>
-</span><span id="Join.on-1422"><a href="#Join.on-1422"><span class="linenos">1422</span></a><span class="sd"> Example:</span>
-</span><span id="Join.on-1423"><a href="#Join.on-1423"><span class="linenos">1423</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join.on-1424"><a href="#Join.on-1424"><span class="linenos">1424</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).on(&quot;y = 1&quot;).sql()</span>
-</span><span id="Join.on-1425"><a href="#Join.on-1425"><span class="linenos">1425</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
-</span><span id="Join.on-1426"><a href="#Join.on-1426"><span class="linenos">1426</span></a>
-</span><span id="Join.on-1427"><a href="#Join.on-1427"><span class="linenos">1427</span></a><span class="sd"> Args:</span>
-</span><span id="Join.on-1428"><a href="#Join.on-1428"><span class="linenos">1428</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Join.on-1429"><a href="#Join.on-1429"><span class="linenos">1429</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join.on-1430"><a href="#Join.on-1430"><span class="linenos">1430</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Join.on-1431"><a href="#Join.on-1431"><span class="linenos">1431</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Join.on-1432"><a href="#Join.on-1432"><span class="linenos">1432</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join.on-1433"><a href="#Join.on-1433"><span class="linenos">1433</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Join.on-1434"><a href="#Join.on-1434"><span class="linenos">1434</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Join.on-1435"><a href="#Join.on-1435"><span class="linenos">1435</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Join.on-1436"><a href="#Join.on-1436"><span class="linenos">1436</span></a>
-</span><span id="Join.on-1437"><a href="#Join.on-1437"><span class="linenos">1437</span></a><span class="sd"> Returns:</span>
-</span><span id="Join.on-1438"><a href="#Join.on-1438"><span class="linenos">1438</span></a><span class="sd"> Join: the modified join expression.</span>
-</span><span id="Join.on-1439"><a href="#Join.on-1439"><span class="linenos">1439</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join.on-1440"><a href="#Join.on-1440"><span class="linenos">1440</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Join.on-1441"><a href="#Join.on-1441"><span class="linenos">1441</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join.on-1442"><a href="#Join.on-1442"><span class="linenos">1442</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Join.on-1443"><a href="#Join.on-1443"><span class="linenos">1443</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;on&quot;</span><span class="p">,</span>
-</span><span id="Join.on-1444"><a href="#Join.on-1444"><span class="linenos">1444</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Join.on-1445"><a href="#Join.on-1445"><span class="linenos">1445</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Join.on-1446"><a href="#Join.on-1446"><span class="linenos">1446</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Join.on-1447"><a href="#Join.on-1447"><span class="linenos">1447</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join.on-1448"><a href="#Join.on-1448"><span class="linenos">1448</span></a> <span class="p">)</span>
-</span><span id="Join.on-1449"><a href="#Join.on-1449"><span class="linenos">1449</span></a>
-</span><span id="Join.on-1450"><a href="#Join.on-1450"><span class="linenos">1450</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
-</span><span id="Join.on-1451"><a href="#Join.on-1451"><span class="linenos">1451</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
-</span><span id="Join.on-1452"><a href="#Join.on-1452"><span class="linenos">1452</span></a>
-</span><span id="Join.on-1453"><a href="#Join.on-1453"><span class="linenos">1453</span></a> <span class="k">return</span> <span class="n">join</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Join.on-1541"><a href="#Join.on-1541"><span class="linenos">1541</span></a> <span class="k">def</span> <span class="nf">on</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join.on-1542"><a href="#Join.on-1542"><span class="linenos">1542</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join.on-1543"><a href="#Join.on-1543"><span class="linenos">1543</span></a><span class="sd"> Append to or set the ON expressions.</span>
+</span><span id="Join.on-1544"><a href="#Join.on-1544"><span class="linenos">1544</span></a>
+</span><span id="Join.on-1545"><a href="#Join.on-1545"><span class="linenos">1545</span></a><span class="sd"> Example:</span>
+</span><span id="Join.on-1546"><a href="#Join.on-1546"><span class="linenos">1546</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join.on-1547"><a href="#Join.on-1547"><span class="linenos">1547</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).on(&quot;y = 1&quot;).sql()</span>
+</span><span id="Join.on-1548"><a href="#Join.on-1548"><span class="linenos">1548</span></a><span class="sd"> &#39;JOIN x ON y = 1&#39;</span>
+</span><span id="Join.on-1549"><a href="#Join.on-1549"><span class="linenos">1549</span></a>
+</span><span id="Join.on-1550"><a href="#Join.on-1550"><span class="linenos">1550</span></a><span class="sd"> Args:</span>
+</span><span id="Join.on-1551"><a href="#Join.on-1551"><span class="linenos">1551</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Join.on-1552"><a href="#Join.on-1552"><span class="linenos">1552</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join.on-1553"><a href="#Join.on-1553"><span class="linenos">1553</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Join.on-1554"><a href="#Join.on-1554"><span class="linenos">1554</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Join.on-1555"><a href="#Join.on-1555"><span class="linenos">1555</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join.on-1556"><a href="#Join.on-1556"><span class="linenos">1556</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Join.on-1557"><a href="#Join.on-1557"><span class="linenos">1557</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Join.on-1558"><a href="#Join.on-1558"><span class="linenos">1558</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Join.on-1559"><a href="#Join.on-1559"><span class="linenos">1559</span></a>
+</span><span id="Join.on-1560"><a href="#Join.on-1560"><span class="linenos">1560</span></a><span class="sd"> Returns:</span>
+</span><span id="Join.on-1561"><a href="#Join.on-1561"><span class="linenos">1561</span></a><span class="sd"> Join: the modified join expression.</span>
+</span><span id="Join.on-1562"><a href="#Join.on-1562"><span class="linenos">1562</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join.on-1563"><a href="#Join.on-1563"><span class="linenos">1563</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Join.on-1564"><a href="#Join.on-1564"><span class="linenos">1564</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join.on-1565"><a href="#Join.on-1565"><span class="linenos">1565</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Join.on-1566"><a href="#Join.on-1566"><span class="linenos">1566</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;on&quot;</span><span class="p">,</span>
+</span><span id="Join.on-1567"><a href="#Join.on-1567"><span class="linenos">1567</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Join.on-1568"><a href="#Join.on-1568"><span class="linenos">1568</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Join.on-1569"><a href="#Join.on-1569"><span class="linenos">1569</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Join.on-1570"><a href="#Join.on-1570"><span class="linenos">1570</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join.on-1571"><a href="#Join.on-1571"><span class="linenos">1571</span></a> <span class="p">)</span>
+</span><span id="Join.on-1572"><a href="#Join.on-1572"><span class="linenos">1572</span></a>
+</span><span id="Join.on-1573"><a href="#Join.on-1573"><span class="linenos">1573</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
+</span><span id="Join.on-1574"><a href="#Join.on-1574"><span class="linenos">1574</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
+</span><span id="Join.on-1575"><a href="#Join.on-1575"><span class="linenos">1575</span></a>
+</span><span id="Join.on-1576"><a href="#Join.on-1576"><span class="linenos">1576</span></a> <span class="k">return</span> <span class="n">join</span>
</span></pre></div>
@@ -16551,41 +17051,41 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Join.using"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Join.using-1455"><a href="#Join.using-1455"><span class="linenos">1455</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join.using-1456"><a href="#Join.using-1456"><span class="linenos">1456</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Join.using-1457"><a href="#Join.using-1457"><span class="linenos">1457</span></a><span class="sd"> Append to or set the USING expressions.</span>
-</span><span id="Join.using-1458"><a href="#Join.using-1458"><span class="linenos">1458</span></a>
-</span><span id="Join.using-1459"><a href="#Join.using-1459"><span class="linenos">1459</span></a><span class="sd"> Example:</span>
-</span><span id="Join.using-1460"><a href="#Join.using-1460"><span class="linenos">1460</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="Join.using-1461"><a href="#Join.using-1461"><span class="linenos">1461</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).using(&quot;foo&quot;, &quot;bla&quot;).sql()</span>
-</span><span id="Join.using-1462"><a href="#Join.using-1462"><span class="linenos">1462</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
-</span><span id="Join.using-1463"><a href="#Join.using-1463"><span class="linenos">1463</span></a>
-</span><span id="Join.using-1464"><a href="#Join.using-1464"><span class="linenos">1464</span></a><span class="sd"> Args:</span>
-</span><span id="Join.using-1465"><a href="#Join.using-1465"><span class="linenos">1465</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Join.using-1466"><a href="#Join.using-1466"><span class="linenos">1466</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Join.using-1467"><a href="#Join.using-1467"><span class="linenos">1467</span></a><span class="sd"> append (bool): if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
-</span><span id="Join.using-1468"><a href="#Join.using-1468"><span class="linenos">1468</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Join.using-1469"><a href="#Join.using-1469"><span class="linenos">1469</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Join.using-1470"><a href="#Join.using-1470"><span class="linenos">1470</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Join.using-1471"><a href="#Join.using-1471"><span class="linenos">1471</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Join.using-1472"><a href="#Join.using-1472"><span class="linenos">1472</span></a>
-</span><span id="Join.using-1473"><a href="#Join.using-1473"><span class="linenos">1473</span></a><span class="sd"> Returns:</span>
-</span><span id="Join.using-1474"><a href="#Join.using-1474"><span class="linenos">1474</span></a><span class="sd"> Join: the modified join expression.</span>
-</span><span id="Join.using-1475"><a href="#Join.using-1475"><span class="linenos">1475</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Join.using-1476"><a href="#Join.using-1476"><span class="linenos">1476</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Join.using-1477"><a href="#Join.using-1477"><span class="linenos">1477</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Join.using-1478"><a href="#Join.using-1478"><span class="linenos">1478</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Join.using-1479"><a href="#Join.using-1479"><span class="linenos">1479</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="Join.using-1480"><a href="#Join.using-1480"><span class="linenos">1480</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Join.using-1481"><a href="#Join.using-1481"><span class="linenos">1481</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Join.using-1482"><a href="#Join.using-1482"><span class="linenos">1482</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Join.using-1483"><a href="#Join.using-1483"><span class="linenos">1483</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Join.using-1484"><a href="#Join.using-1484"><span class="linenos">1484</span></a> <span class="p">)</span>
-</span><span id="Join.using-1485"><a href="#Join.using-1485"><span class="linenos">1485</span></a>
-</span><span id="Join.using-1486"><a href="#Join.using-1486"><span class="linenos">1486</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
-</span><span id="Join.using-1487"><a href="#Join.using-1487"><span class="linenos">1487</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
-</span><span id="Join.using-1488"><a href="#Join.using-1488"><span class="linenos">1488</span></a>
-</span><span id="Join.using-1489"><a href="#Join.using-1489"><span class="linenos">1489</span></a> <span class="k">return</span> <span class="n">join</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Join.using-1578"><a href="#Join.using-1578"><span class="linenos">1578</span></a> <span class="k">def</span> <span class="nf">using</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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><span id="Join.using-1579"><a href="#Join.using-1579"><span class="linenos">1579</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Join.using-1580"><a href="#Join.using-1580"><span class="linenos">1580</span></a><span class="sd"> Append to or set the USING expressions.</span>
+</span><span id="Join.using-1581"><a href="#Join.using-1581"><span class="linenos">1581</span></a>
+</span><span id="Join.using-1582"><a href="#Join.using-1582"><span class="linenos">1582</span></a><span class="sd"> Example:</span>
+</span><span id="Join.using-1583"><a href="#Join.using-1583"><span class="linenos">1583</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="Join.using-1584"><a href="#Join.using-1584"><span class="linenos">1584</span></a><span class="sd"> &gt;&gt;&gt; sqlglot.parse_one(&quot;JOIN x&quot;, into=Join).using(&quot;foo&quot;, &quot;bla&quot;).sql()</span>
+</span><span id="Join.using-1585"><a href="#Join.using-1585"><span class="linenos">1585</span></a><span class="sd"> &#39;JOIN x USING (foo, bla)&#39;</span>
+</span><span id="Join.using-1586"><a href="#Join.using-1586"><span class="linenos">1586</span></a>
+</span><span id="Join.using-1587"><a href="#Join.using-1587"><span class="linenos">1587</span></a><span class="sd"> Args:</span>
+</span><span id="Join.using-1588"><a href="#Join.using-1588"><span class="linenos">1588</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Join.using-1589"><a href="#Join.using-1589"><span class="linenos">1589</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Join.using-1590"><a href="#Join.using-1590"><span class="linenos">1590</span></a><span class="sd"> append (bool): if `True`, concatenate the new expressions to the existing &quot;using&quot; list.</span>
+</span><span id="Join.using-1591"><a href="#Join.using-1591"><span class="linenos">1591</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Join.using-1592"><a href="#Join.using-1592"><span class="linenos">1592</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Join.using-1593"><a href="#Join.using-1593"><span class="linenos">1593</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Join.using-1594"><a href="#Join.using-1594"><span class="linenos">1594</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Join.using-1595"><a href="#Join.using-1595"><span class="linenos">1595</span></a>
+</span><span id="Join.using-1596"><a href="#Join.using-1596"><span class="linenos">1596</span></a><span class="sd"> Returns:</span>
+</span><span id="Join.using-1597"><a href="#Join.using-1597"><span class="linenos">1597</span></a><span class="sd"> Join: the modified join expression.</span>
+</span><span id="Join.using-1598"><a href="#Join.using-1598"><span class="linenos">1598</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Join.using-1599"><a href="#Join.using-1599"><span class="linenos">1599</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Join.using-1600"><a href="#Join.using-1600"><span class="linenos">1600</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Join.using-1601"><a href="#Join.using-1601"><span class="linenos">1601</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Join.using-1602"><a href="#Join.using-1602"><span class="linenos">1602</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="Join.using-1603"><a href="#Join.using-1603"><span class="linenos">1603</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Join.using-1604"><a href="#Join.using-1604"><span class="linenos">1604</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Join.using-1605"><a href="#Join.using-1605"><span class="linenos">1605</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Join.using-1606"><a href="#Join.using-1606"><span class="linenos">1606</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Join.using-1607"><a href="#Join.using-1607"><span class="linenos">1607</span></a> <span class="p">)</span>
+</span><span id="Join.using-1608"><a href="#Join.using-1608"><span class="linenos">1608</span></a>
+</span><span id="Join.using-1609"><a href="#Join.using-1609"><span class="linenos">1609</span></a> <span class="k">if</span> <span class="n">join</span><span class="o">.</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;CROSS&quot;</span><span class="p">:</span>
+</span><span id="Join.using-1610"><a href="#Join.using-1610"><span class="linenos">1610</span></a> <span class="n">join</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="kc">None</span><span class="p">)</span>
+</span><span id="Join.using-1611"><a href="#Join.using-1611"><span class="linenos">1611</span></a>
+</span><span id="Join.using-1612"><a href="#Join.using-1612"><span class="linenos">1612</span></a> <span class="k">return</span> <span class="n">join</span>
</span></pre></div>
@@ -16680,8 +17180,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Lateral"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Lateral-1492"><a href="#Lateral-1492"><span class="linenos">1492</span></a><span class="k">class</span> <span class="nc">Lateral</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="Lateral-1493"><a href="#Lateral-1493"><span class="linenos">1493</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;view&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;outer&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Lateral-1615"><a href="#Lateral-1615"><span class="linenos">1615</span></a><span class="k">class</span> <span class="nc">Lateral</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="Lateral-1616"><a href="#Lateral-1616"><span class="linenos">1616</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;view&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;outer&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -16750,17 +17250,17 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#MatchRecognize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MatchRecognize-1496"><a href="#MatchRecognize-1496"><span class="linenos">1496</span></a><span class="k">class</span> <span class="nc">MatchRecognize</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="MatchRecognize-1497"><a href="#MatchRecognize-1497"><span class="linenos">1497</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="MatchRecognize-1498"><a href="#MatchRecognize-1498"><span class="linenos">1498</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1499"><a href="#MatchRecognize-1499"><span class="linenos">1499</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1500"><a href="#MatchRecognize-1500"><span class="linenos">1500</span></a> <span class="s2">&quot;measures&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1501"><a href="#MatchRecognize-1501"><span class="linenos">1501</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1502"><a href="#MatchRecognize-1502"><span class="linenos">1502</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1503"><a href="#MatchRecognize-1503"><span class="linenos">1503</span></a> <span class="s2">&quot;pattern&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1504"><a href="#MatchRecognize-1504"><span class="linenos">1504</span></a> <span class="s2">&quot;define&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1505"><a href="#MatchRecognize-1505"><span class="linenos">1505</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="MatchRecognize-1506"><a href="#MatchRecognize-1506"><span class="linenos">1506</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MatchRecognize-1619"><a href="#MatchRecognize-1619"><span class="linenos">1619</span></a><span class="k">class</span> <span class="nc">MatchRecognize</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="MatchRecognize-1620"><a href="#MatchRecognize-1620"><span class="linenos">1620</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="MatchRecognize-1621"><a href="#MatchRecognize-1621"><span class="linenos">1621</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1622"><a href="#MatchRecognize-1622"><span class="linenos">1622</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1623"><a href="#MatchRecognize-1623"><span class="linenos">1623</span></a> <span class="s2">&quot;measures&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1624"><a href="#MatchRecognize-1624"><span class="linenos">1624</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1625"><a href="#MatchRecognize-1625"><span class="linenos">1625</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1626"><a href="#MatchRecognize-1626"><span class="linenos">1626</span></a> <span class="s2">&quot;pattern&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1627"><a href="#MatchRecognize-1627"><span class="linenos">1627</span></a> <span class="s2">&quot;define&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1628"><a href="#MatchRecognize-1628"><span class="linenos">1628</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="MatchRecognize-1629"><a href="#MatchRecognize-1629"><span class="linenos">1629</span></a> <span class="p">}</span>
</span></pre></div>
@@ -16823,8 +17323,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Final"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Final-1511"><a href="#Final-1511"><span class="linenos">1511</span></a><span class="k">class</span> <span class="nc">Final</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Final-1512"><a href="#Final-1512"><span class="linenos">1512</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Final-1634"><a href="#Final-1634"><span class="linenos">1634</span></a><span class="k">class</span> <span class="nc">Final</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Final-1635"><a href="#Final-1635"><span class="linenos">1635</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -16887,8 +17387,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Offset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Offset-1515"><a href="#Offset-1515"><span class="linenos">1515</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-1516"><a href="#Offset-1516"><span class="linenos">1516</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Offset-1638"><a href="#Offset-1638"><span class="linenos">1638</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-1639"><a href="#Offset-1639"><span class="linenos">1639</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></pre></div>
@@ -16951,8 +17451,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Order"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Order-1519"><a href="#Order-1519"><span class="linenos">1519</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>
-</span><span id="Order-1520"><a href="#Order-1520"><span class="linenos">1520</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Order-1642"><a href="#Order-1642"><span class="linenos">1642</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>
+</span><span id="Order-1643"><a href="#Order-1643"><span class="linenos">1643</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -17015,8 +17515,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Cluster"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Cluster-1525"><a href="#Cluster-1525"><span class="linenos">1525</span></a><span class="k">class</span> <span class="nc">Cluster</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="Cluster-1526"><a href="#Cluster-1526"><span class="linenos">1526</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Cluster-1648"><a href="#Cluster-1648"><span class="linenos">1648</span></a><span class="k">class</span> <span class="nc">Cluster</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="Cluster-1649"><a href="#Cluster-1649"><span class="linenos">1649</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -17079,8 +17579,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Distribute"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Distribute-1529"><a href="#Distribute-1529"><span class="linenos">1529</span></a><span class="k">class</span> <span class="nc">Distribute</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="Distribute-1530"><a href="#Distribute-1530"><span class="linenos">1530</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Distribute-1652"><a href="#Distribute-1652"><span class="linenos">1652</span></a><span class="k">class</span> <span class="nc">Distribute</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="Distribute-1653"><a href="#Distribute-1653"><span class="linenos">1653</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -17143,8 +17643,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Sort"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Sort-1533"><a href="#Sort-1533"><span class="linenos">1533</span></a><span class="k">class</span> <span class="nc">Sort</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
-</span><span id="Sort-1534"><a href="#Sort-1534"><span class="linenos">1534</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sort-1656"><a href="#Sort-1656"><span class="linenos">1656</span></a><span class="k">class</span> <span class="nc">Sort</span><span class="p">(</span><span class="n">Order</span><span class="p">):</span>
+</span><span id="Sort-1657"><a href="#Sort-1657"><span class="linenos">1657</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -17207,8 +17707,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Ordered"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Ordered-1537"><a href="#Ordered-1537"><span class="linenos">1537</span></a><span class="k">class</span> <span class="nc">Ordered</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Ordered-1538"><a href="#Ordered-1538"><span class="linenos">1538</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;desc&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;nulls_first&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Ordered-1660"><a href="#Ordered-1660"><span class="linenos">1660</span></a><span class="k">class</span> <span class="nc">Ordered</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Ordered-1661"><a href="#Ordered-1661"><span class="linenos">1661</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;desc&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;nulls_first&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -17271,8 +17771,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Property"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Property-1541"><a href="#Property-1541"><span class="linenos">1541</span></a><span class="k">class</span> <span class="nc">Property</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Property-1542"><a href="#Property-1542"><span class="linenos">1542</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;value&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Property-1664"><a href="#Property-1664"><span class="linenos">1664</span></a><span class="k">class</span> <span class="nc">Property</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Property-1665"><a href="#Property-1665"><span class="linenos">1665</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;value&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -17335,8 +17835,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#AfterJournalProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AfterJournalProperty-1545"><a href="#AfterJournalProperty-1545"><span class="linenos">1545</span></a><span class="k">class</span> <span class="nc">AfterJournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="AfterJournalProperty-1546"><a href="#AfterJournalProperty-1546"><span class="linenos">1546</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AfterJournalProperty-1668"><a href="#AfterJournalProperty-1668"><span class="linenos">1668</span></a><span class="k">class</span> <span class="nc">AfterJournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="AfterJournalProperty-1669"><a href="#AfterJournalProperty-1669"><span class="linenos">1669</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -17399,8 +17899,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#AlgorithmProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AlgorithmProperty-1549"><a href="#AlgorithmProperty-1549"><span class="linenos">1549</span></a><span class="k">class</span> <span class="nc">AlgorithmProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="AlgorithmProperty-1550"><a href="#AlgorithmProperty-1550"><span class="linenos">1550</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AlgorithmProperty-1672"><a href="#AlgorithmProperty-1672"><span class="linenos">1672</span></a><span class="k">class</span> <span class="nc">AlgorithmProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="AlgorithmProperty-1673"><a href="#AlgorithmProperty-1673"><span class="linenos">1673</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></pre></div>
@@ -17463,8 +17963,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#AutoIncrementProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AutoIncrementProperty-1553"><a href="#AutoIncrementProperty-1553"><span class="linenos">1553</span></a><span class="k">class</span> <span class="nc">AutoIncrementProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="AutoIncrementProperty-1554"><a href="#AutoIncrementProperty-1554"><span class="linenos">1554</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AutoIncrementProperty-1676"><a href="#AutoIncrementProperty-1676"><span class="linenos">1676</span></a><span class="k">class</span> <span class="nc">AutoIncrementProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="AutoIncrementProperty-1677"><a href="#AutoIncrementProperty-1677"><span class="linenos">1677</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></pre></div>
@@ -17527,8 +18027,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#BlockCompressionProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BlockCompressionProperty-1557"><a href="#BlockCompressionProperty-1557"><span class="linenos">1557</span></a><span class="k">class</span> <span class="nc">BlockCompressionProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="BlockCompressionProperty-1558"><a href="#BlockCompressionProperty-1558"><span class="linenos">1558</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;autotemp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;manual&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;never&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BlockCompressionProperty-1680"><a href="#BlockCompressionProperty-1680"><span class="linenos">1680</span></a><span class="k">class</span> <span class="nc">BlockCompressionProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="BlockCompressionProperty-1681"><a href="#BlockCompressionProperty-1681"><span class="linenos">1681</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;autotemp&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;always&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;manual&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;never&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -17591,8 +18091,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#CharacterSetProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CharacterSetProperty-1561"><a href="#CharacterSetProperty-1561"><span class="linenos">1561</span></a><span class="k">class</span> <span class="nc">CharacterSetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="CharacterSetProperty-1562"><a href="#CharacterSetProperty-1562"><span class="linenos">1562</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;default&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CharacterSetProperty-1684"><a href="#CharacterSetProperty-1684"><span class="linenos">1684</span></a><span class="k">class</span> <span class="nc">CharacterSetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="CharacterSetProperty-1685"><a href="#CharacterSetProperty-1685"><span class="linenos">1685</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;default&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -17655,8 +18155,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#ChecksumProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ChecksumProperty-1565"><a href="#ChecksumProperty-1565"><span class="linenos">1565</span></a><span class="k">class</span> <span class="nc">ChecksumProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="ChecksumProperty-1566"><a href="#ChecksumProperty-1566"><span class="linenos">1566</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ChecksumProperty-1688"><a href="#ChecksumProperty-1688"><span class="linenos">1688</span></a><span class="k">class</span> <span class="nc">ChecksumProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="ChecksumProperty-1689"><a href="#ChecksumProperty-1689"><span class="linenos">1689</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -17719,8 +18219,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#CollateProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CollateProperty-1569"><a href="#CollateProperty-1569"><span class="linenos">1569</span></a><span class="k">class</span> <span class="nc">CollateProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="CollateProperty-1570"><a href="#CollateProperty-1570"><span class="linenos">1570</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CollateProperty-1692"><a href="#CollateProperty-1692"><span class="linenos">1692</span></a><span class="k">class</span> <span class="nc">CollateProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="CollateProperty-1693"><a href="#CollateProperty-1693"><span class="linenos">1693</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></pre></div>
@@ -17783,8 +18283,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DataBlocksizeProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataBlocksizeProperty-1573"><a href="#DataBlocksizeProperty-1573"><span class="linenos">1573</span></a><span class="k">class</span> <span class="nc">DataBlocksizeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="DataBlocksizeProperty-1574"><a href="#DataBlocksizeProperty-1574"><span class="linenos">1574</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataBlocksizeProperty-1696"><a href="#DataBlocksizeProperty-1696"><span class="linenos">1696</span></a><span class="k">class</span> <span class="nc">DataBlocksizeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="DataBlocksizeProperty-1697"><a href="#DataBlocksizeProperty-1697"><span class="linenos">1697</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;units&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -17847,8 +18347,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DefinerProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DefinerProperty-1577"><a href="#DefinerProperty-1577"><span class="linenos">1577</span></a><span class="k">class</span> <span class="nc">DefinerProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="DefinerProperty-1578"><a href="#DefinerProperty-1578"><span class="linenos">1578</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DefinerProperty-1700"><a href="#DefinerProperty-1700"><span class="linenos">1700</span></a><span class="k">class</span> <span class="nc">DefinerProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="DefinerProperty-1701"><a href="#DefinerProperty-1701"><span class="linenos">1701</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></pre></div>
@@ -17911,8 +18411,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DistKeyProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DistKeyProperty-1581"><a href="#DistKeyProperty-1581"><span class="linenos">1581</span></a><span class="k">class</span> <span class="nc">DistKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="DistKeyProperty-1582"><a href="#DistKeyProperty-1582"><span class="linenos">1582</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DistKeyProperty-1704"><a href="#DistKeyProperty-1704"><span class="linenos">1704</span></a><span class="k">class</span> <span class="nc">DistKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="DistKeyProperty-1705"><a href="#DistKeyProperty-1705"><span class="linenos">1705</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></pre></div>
@@ -17975,8 +18475,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#DistStyleProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DistStyleProperty-1585"><a href="#DistStyleProperty-1585"><span class="linenos">1585</span></a><span class="k">class</span> <span class="nc">DistStyleProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="DistStyleProperty-1586"><a href="#DistStyleProperty-1586"><span class="linenos">1586</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DistStyleProperty-1708"><a href="#DistStyleProperty-1708"><span class="linenos">1708</span></a><span class="k">class</span> <span class="nc">DistStyleProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="DistStyleProperty-1709"><a href="#DistStyleProperty-1709"><span class="linenos">1709</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></pre></div>
@@ -18039,8 +18539,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#EngineProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="EngineProperty-1589"><a href="#EngineProperty-1589"><span class="linenos">1589</span></a><span class="k">class</span> <span class="nc">EngineProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="EngineProperty-1590"><a href="#EngineProperty-1590"><span class="linenos">1590</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="EngineProperty-1712"><a href="#EngineProperty-1712"><span class="linenos">1712</span></a><span class="k">class</span> <span class="nc">EngineProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="EngineProperty-1713"><a href="#EngineProperty-1713"><span class="linenos">1713</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></pre></div>
@@ -18103,8 +18603,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#ExecuteAsProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ExecuteAsProperty-1593"><a href="#ExecuteAsProperty-1593"><span class="linenos">1593</span></a><span class="k">class</span> <span class="nc">ExecuteAsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="ExecuteAsProperty-1594"><a href="#ExecuteAsProperty-1594"><span class="linenos">1594</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ExecuteAsProperty-1716"><a href="#ExecuteAsProperty-1716"><span class="linenos">1716</span></a><span class="k">class</span> <span class="nc">ExecuteAsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="ExecuteAsProperty-1717"><a href="#ExecuteAsProperty-1717"><span class="linenos">1717</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></pre></div>
@@ -18167,8 +18667,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#ExternalProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ExternalProperty-1597"><a href="#ExternalProperty-1597"><span class="linenos">1597</span></a><span class="k">class</span> <span class="nc">ExternalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="ExternalProperty-1598"><a href="#ExternalProperty-1598"><span class="linenos">1598</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ExternalProperty-1720"><a href="#ExternalProperty-1720"><span class="linenos">1720</span></a><span class="k">class</span> <span class="nc">ExternalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="ExternalProperty-1721"><a href="#ExternalProperty-1721"><span class="linenos">1721</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></pre></div>
@@ -18231,8 +18731,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#FallbackProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="FallbackProperty-1601"><a href="#FallbackProperty-1601"><span class="linenos">1601</span></a><span class="k">class</span> <span class="nc">FallbackProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="FallbackProperty-1602"><a href="#FallbackProperty-1602"><span class="linenos">1602</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;protection&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="FallbackProperty-1724"><a href="#FallbackProperty-1724"><span class="linenos">1724</span></a><span class="k">class</span> <span class="nc">FallbackProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="FallbackProperty-1725"><a href="#FallbackProperty-1725"><span class="linenos">1725</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;protection&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -18295,8 +18795,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#FileFormatProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="FileFormatProperty-1605"><a href="#FileFormatProperty-1605"><span class="linenos">1605</span></a><span class="k">class</span> <span class="nc">FileFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="FileFormatProperty-1606"><a href="#FileFormatProperty-1606"><span class="linenos">1606</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="FileFormatProperty-1728"><a href="#FileFormatProperty-1728"><span class="linenos">1728</span></a><span class="k">class</span> <span class="nc">FileFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="FileFormatProperty-1729"><a href="#FileFormatProperty-1729"><span class="linenos">1729</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></pre></div>
@@ -18359,8 +18859,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#FreespaceProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="FreespaceProperty-1609"><a href="#FreespaceProperty-1609"><span class="linenos">1609</span></a><span class="k">class</span> <span class="nc">FreespaceProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="FreespaceProperty-1610"><a href="#FreespaceProperty-1610"><span class="linenos">1610</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;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="FreespaceProperty-1732"><a href="#FreespaceProperty-1732"><span class="linenos">1732</span></a><span class="k">class</span> <span class="nc">FreespaceProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="FreespaceProperty-1733"><a href="#FreespaceProperty-1733"><span class="linenos">1733</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;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -18423,8 +18923,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#InputOutputFormat"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="InputOutputFormat-1613"><a href="#InputOutputFormat-1613"><span class="linenos">1613</span></a><span class="k">class</span> <span class="nc">InputOutputFormat</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="InputOutputFormat-1614"><a href="#InputOutputFormat-1614"><span class="linenos">1614</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="InputOutputFormat-1736"><a href="#InputOutputFormat-1736"><span class="linenos">1736</span></a><span class="k">class</span> <span class="nc">InputOutputFormat</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="InputOutputFormat-1737"><a href="#InputOutputFormat-1737"><span class="linenos">1737</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;input_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;output_format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -18487,14 +18987,14 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#IsolatedLoadingProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IsolatedLoadingProperty-1617"><a href="#IsolatedLoadingProperty-1617"><span class="linenos">1617</span></a><span class="k">class</span> <span class="nc">IsolatedLoadingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="IsolatedLoadingProperty-1618"><a href="#IsolatedLoadingProperty-1618"><span class="linenos">1618</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="IsolatedLoadingProperty-1619"><a href="#IsolatedLoadingProperty-1619"><span class="linenos">1619</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="IsolatedLoadingProperty-1620"><a href="#IsolatedLoadingProperty-1620"><span class="linenos">1620</span></a> <span class="s2">&quot;concurrent&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="IsolatedLoadingProperty-1621"><a href="#IsolatedLoadingProperty-1621"><span class="linenos">1621</span></a> <span class="s2">&quot;for_all&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="IsolatedLoadingProperty-1622"><a href="#IsolatedLoadingProperty-1622"><span class="linenos">1622</span></a> <span class="s2">&quot;for_insert&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="IsolatedLoadingProperty-1623"><a href="#IsolatedLoadingProperty-1623"><span class="linenos">1623</span></a> <span class="s2">&quot;for_none&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="IsolatedLoadingProperty-1624"><a href="#IsolatedLoadingProperty-1624"><span class="linenos">1624</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IsolatedLoadingProperty-1740"><a href="#IsolatedLoadingProperty-1740"><span class="linenos">1740</span></a><span class="k">class</span> <span class="nc">IsolatedLoadingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="IsolatedLoadingProperty-1741"><a href="#IsolatedLoadingProperty-1741"><span class="linenos">1741</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="IsolatedLoadingProperty-1742"><a href="#IsolatedLoadingProperty-1742"><span class="linenos">1742</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="IsolatedLoadingProperty-1743"><a href="#IsolatedLoadingProperty-1743"><span class="linenos">1743</span></a> <span class="s2">&quot;concurrent&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="IsolatedLoadingProperty-1744"><a href="#IsolatedLoadingProperty-1744"><span class="linenos">1744</span></a> <span class="s2">&quot;for_all&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="IsolatedLoadingProperty-1745"><a href="#IsolatedLoadingProperty-1745"><span class="linenos">1745</span></a> <span class="s2">&quot;for_insert&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="IsolatedLoadingProperty-1746"><a href="#IsolatedLoadingProperty-1746"><span class="linenos">1746</span></a> <span class="s2">&quot;for_none&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="IsolatedLoadingProperty-1747"><a href="#IsolatedLoadingProperty-1747"><span class="linenos">1747</span></a> <span class="p">}</span>
</span></pre></div>
@@ -18557,8 +19057,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#JournalProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JournalProperty-1627"><a href="#JournalProperty-1627"><span class="linenos">1627</span></a><span class="k">class</span> <span class="nc">JournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="JournalProperty-1628"><a href="#JournalProperty-1628"><span class="linenos">1628</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JournalProperty-1750"><a href="#JournalProperty-1750"><span class="linenos">1750</span></a><span class="k">class</span> <span class="nc">JournalProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="JournalProperty-1751"><a href="#JournalProperty-1751"><span class="linenos">1751</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -18621,8 +19121,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#LanguageProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LanguageProperty-1631"><a href="#LanguageProperty-1631"><span class="linenos">1631</span></a><span class="k">class</span> <span class="nc">LanguageProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="LanguageProperty-1632"><a href="#LanguageProperty-1632"><span class="linenos">1632</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LanguageProperty-1754"><a href="#LanguageProperty-1754"><span class="linenos">1754</span></a><span class="k">class</span> <span class="nc">LanguageProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="LanguageProperty-1755"><a href="#LanguageProperty-1755"><span class="linenos">1755</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></pre></div>
@@ -18685,8 +19185,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#LikeProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LikeProperty-1635"><a href="#LikeProperty-1635"><span class="linenos">1635</span></a><span class="k">class</span> <span class="nc">LikeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="LikeProperty-1636"><a href="#LikeProperty-1636"><span class="linenos">1636</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LikeProperty-1758"><a href="#LikeProperty-1758"><span class="linenos">1758</span></a><span class="k">class</span> <span class="nc">LikeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="LikeProperty-1759"><a href="#LikeProperty-1759"><span class="linenos">1759</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -18749,8 +19249,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#LocationProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LocationProperty-1639"><a href="#LocationProperty-1639"><span class="linenos">1639</span></a><span class="k">class</span> <span class="nc">LocationProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="LocationProperty-1640"><a href="#LocationProperty-1640"><span class="linenos">1640</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LocationProperty-1762"><a href="#LocationProperty-1762"><span class="linenos">1762</span></a><span class="k">class</span> <span class="nc">LocationProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="LocationProperty-1763"><a href="#LocationProperty-1763"><span class="linenos">1763</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></pre></div>
@@ -18813,14 +19313,14 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#LockingProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LockingProperty-1643"><a href="#LockingProperty-1643"><span class="linenos">1643</span></a><span class="k">class</span> <span class="nc">LockingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="LockingProperty-1644"><a href="#LockingProperty-1644"><span class="linenos">1644</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="LockingProperty-1645"><a href="#LockingProperty-1645"><span class="linenos">1645</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="LockingProperty-1646"><a href="#LockingProperty-1646"><span class="linenos">1646</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="LockingProperty-1647"><a href="#LockingProperty-1647"><span class="linenos">1647</span></a> <span class="s2">&quot;for_or_in&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="LockingProperty-1648"><a href="#LockingProperty-1648"><span class="linenos">1648</span></a> <span class="s2">&quot;lock_type&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="LockingProperty-1649"><a href="#LockingProperty-1649"><span class="linenos">1649</span></a> <span class="s2">&quot;override&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="LockingProperty-1650"><a href="#LockingProperty-1650"><span class="linenos">1650</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LockingProperty-1766"><a href="#LockingProperty-1766"><span class="linenos">1766</span></a><span class="k">class</span> <span class="nc">LockingProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="LockingProperty-1767"><a href="#LockingProperty-1767"><span class="linenos">1767</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="LockingProperty-1768"><a href="#LockingProperty-1768"><span class="linenos">1768</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="LockingProperty-1769"><a href="#LockingProperty-1769"><span class="linenos">1769</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="LockingProperty-1770"><a href="#LockingProperty-1770"><span class="linenos">1770</span></a> <span class="s2">&quot;for_or_in&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="LockingProperty-1771"><a href="#LockingProperty-1771"><span class="linenos">1771</span></a> <span class="s2">&quot;lock_type&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="LockingProperty-1772"><a href="#LockingProperty-1772"><span class="linenos">1772</span></a> <span class="s2">&quot;override&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="LockingProperty-1773"><a href="#LockingProperty-1773"><span class="linenos">1773</span></a> <span class="p">}</span>
</span></pre></div>
@@ -18883,8 +19383,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#LogProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LogProperty-1653"><a href="#LogProperty-1653"><span class="linenos">1653</span></a><span class="k">class</span> <span class="nc">LogProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="LogProperty-1654"><a href="#LogProperty-1654"><span class="linenos">1654</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LogProperty-1776"><a href="#LogProperty-1776"><span class="linenos">1776</span></a><span class="k">class</span> <span class="nc">LogProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="LogProperty-1777"><a href="#LogProperty-1777"><span class="linenos">1777</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -18947,8 +19447,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#MaterializedProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MaterializedProperty-1657"><a href="#MaterializedProperty-1657"><span class="linenos">1657</span></a><span class="k">class</span> <span class="nc">MaterializedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="MaterializedProperty-1658"><a href="#MaterializedProperty-1658"><span class="linenos">1658</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MaterializedProperty-1780"><a href="#MaterializedProperty-1780"><span class="linenos">1780</span></a><span class="k">class</span> <span class="nc">MaterializedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="MaterializedProperty-1781"><a href="#MaterializedProperty-1781"><span class="linenos">1781</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></pre></div>
@@ -19011,8 +19511,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#MergeBlockRatioProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MergeBlockRatioProperty-1661"><a href="#MergeBlockRatioProperty-1661"><span class="linenos">1661</span></a><span class="k">class</span> <span class="nc">MergeBlockRatioProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="MergeBlockRatioProperty-1662"><a href="#MergeBlockRatioProperty-1662"><span class="linenos">1662</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;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MergeBlockRatioProperty-1784"><a href="#MergeBlockRatioProperty-1784"><span class="linenos">1784</span></a><span class="k">class</span> <span class="nc">MergeBlockRatioProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="MergeBlockRatioProperty-1785"><a href="#MergeBlockRatioProperty-1785"><span class="linenos">1785</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;no&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -19075,8 +19575,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#NoPrimaryIndexProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NoPrimaryIndexProperty-1665"><a href="#NoPrimaryIndexProperty-1665"><span class="linenos">1665</span></a><span class="k">class</span> <span class="nc">NoPrimaryIndexProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="NoPrimaryIndexProperty-1666"><a href="#NoPrimaryIndexProperty-1666"><span class="linenos">1666</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NoPrimaryIndexProperty-1788"><a href="#NoPrimaryIndexProperty-1788"><span class="linenos">1788</span></a><span class="k">class</span> <span class="nc">NoPrimaryIndexProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="NoPrimaryIndexProperty-1789"><a href="#NoPrimaryIndexProperty-1789"><span class="linenos">1789</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></pre></div>
@@ -19139,8 +19639,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#OnCommitProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="OnCommitProperty-1669"><a href="#OnCommitProperty-1669"><span class="linenos">1669</span></a><span class="k">class</span> <span class="nc">OnCommitProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="OnCommitProperty-1670"><a href="#OnCommitProperty-1670"><span class="linenos">1670</span></a> <span class="n">arg_type</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="OnCommitProperty-1792"><a href="#OnCommitProperty-1792"><span class="linenos">1792</span></a><span class="k">class</span> <span class="nc">OnCommitProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="OnCommitProperty-1793"><a href="#OnCommitProperty-1793"><span class="linenos">1793</span></a> <span class="n">arg_type</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></pre></div>
@@ -19203,8 +19703,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#PartitionedByProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PartitionedByProperty-1673"><a href="#PartitionedByProperty-1673"><span class="linenos">1673</span></a><span class="k">class</span> <span class="nc">PartitionedByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="PartitionedByProperty-1674"><a href="#PartitionedByProperty-1674"><span class="linenos">1674</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PartitionedByProperty-1796"><a href="#PartitionedByProperty-1796"><span class="linenos">1796</span></a><span class="k">class</span> <span class="nc">PartitionedByProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="PartitionedByProperty-1797"><a href="#PartitionedByProperty-1797"><span class="linenos">1797</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></pre></div>
@@ -19267,8 +19767,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#ReturnsProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ReturnsProperty-1677"><a href="#ReturnsProperty-1677"><span class="linenos">1677</span></a><span class="k">class</span> <span class="nc">ReturnsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="ReturnsProperty-1678"><a href="#ReturnsProperty-1678"><span class="linenos">1678</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;is_table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ReturnsProperty-1800"><a href="#ReturnsProperty-1800"><span class="linenos">1800</span></a><span class="k">class</span> <span class="nc">ReturnsProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="ReturnsProperty-1801"><a href="#ReturnsProperty-1801"><span class="linenos">1801</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;is_table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;table&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -19331,8 +19831,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#RowFormatProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RowFormatProperty-1681"><a href="#RowFormatProperty-1681"><span class="linenos">1681</span></a><span class="k">class</span> <span class="nc">RowFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="RowFormatProperty-1682"><a href="#RowFormatProperty-1682"><span class="linenos">1682</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RowFormatProperty-1804"><a href="#RowFormatProperty-1804"><span class="linenos">1804</span></a><span class="k">class</span> <span class="nc">RowFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="RowFormatProperty-1805"><a href="#RowFormatProperty-1805"><span class="linenos">1805</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></pre></div>
@@ -19395,17 +19895,17 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#RowFormatDelimitedProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RowFormatDelimitedProperty-1685"><a href="#RowFormatDelimitedProperty-1685"><span class="linenos">1685</span></a><span class="k">class</span> <span class="nc">RowFormatDelimitedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="RowFormatDelimitedProperty-1686"><a href="#RowFormatDelimitedProperty-1686"><span class="linenos">1686</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</span>
-</span><span id="RowFormatDelimitedProperty-1687"><a href="#RowFormatDelimitedProperty-1687"><span class="linenos">1687</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="RowFormatDelimitedProperty-1688"><a href="#RowFormatDelimitedProperty-1688"><span class="linenos">1688</span></a> <span class="s2">&quot;fields&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RowFormatDelimitedProperty-1689"><a href="#RowFormatDelimitedProperty-1689"><span class="linenos">1689</span></a> <span class="s2">&quot;escaped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RowFormatDelimitedProperty-1690"><a href="#RowFormatDelimitedProperty-1690"><span class="linenos">1690</span></a> <span class="s2">&quot;collection_items&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RowFormatDelimitedProperty-1691"><a href="#RowFormatDelimitedProperty-1691"><span class="linenos">1691</span></a> <span class="s2">&quot;map_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RowFormatDelimitedProperty-1692"><a href="#RowFormatDelimitedProperty-1692"><span class="linenos">1692</span></a> <span class="s2">&quot;lines&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RowFormatDelimitedProperty-1693"><a href="#RowFormatDelimitedProperty-1693"><span class="linenos">1693</span></a> <span class="s2">&quot;null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RowFormatDelimitedProperty-1694"><a href="#RowFormatDelimitedProperty-1694"><span class="linenos">1694</span></a> <span class="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RowFormatDelimitedProperty-1695"><a href="#RowFormatDelimitedProperty-1695"><span class="linenos">1695</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RowFormatDelimitedProperty-1808"><a href="#RowFormatDelimitedProperty-1808"><span class="linenos">1808</span></a><span class="k">class</span> <span class="nc">RowFormatDelimitedProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="RowFormatDelimitedProperty-1809"><a href="#RowFormatDelimitedProperty-1809"><span class="linenos">1809</span></a> <span class="c1"># https://cwiki.apache.org/confluence/display/hive/languagemanual+dml</span>
+</span><span id="RowFormatDelimitedProperty-1810"><a href="#RowFormatDelimitedProperty-1810"><span class="linenos">1810</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="RowFormatDelimitedProperty-1811"><a href="#RowFormatDelimitedProperty-1811"><span class="linenos">1811</span></a> <span class="s2">&quot;fields&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RowFormatDelimitedProperty-1812"><a href="#RowFormatDelimitedProperty-1812"><span class="linenos">1812</span></a> <span class="s2">&quot;escaped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RowFormatDelimitedProperty-1813"><a href="#RowFormatDelimitedProperty-1813"><span class="linenos">1813</span></a> <span class="s2">&quot;collection_items&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RowFormatDelimitedProperty-1814"><a href="#RowFormatDelimitedProperty-1814"><span class="linenos">1814</span></a> <span class="s2">&quot;map_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RowFormatDelimitedProperty-1815"><a href="#RowFormatDelimitedProperty-1815"><span class="linenos">1815</span></a> <span class="s2">&quot;lines&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RowFormatDelimitedProperty-1816"><a href="#RowFormatDelimitedProperty-1816"><span class="linenos">1816</span></a> <span class="s2">&quot;null&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RowFormatDelimitedProperty-1817"><a href="#RowFormatDelimitedProperty-1817"><span class="linenos">1817</span></a> <span class="s2">&quot;serde&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RowFormatDelimitedProperty-1818"><a href="#RowFormatDelimitedProperty-1818"><span class="linenos">1818</span></a> <span class="p">}</span>
</span></pre></div>
@@ -19468,8 +19968,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#RowFormatSerdeProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RowFormatSerdeProperty-1698"><a href="#RowFormatSerdeProperty-1698"><span class="linenos">1698</span></a><span class="k">class</span> <span class="nc">RowFormatSerdeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="RowFormatSerdeProperty-1699"><a href="#RowFormatSerdeProperty-1699"><span class="linenos">1699</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RowFormatSerdeProperty-1821"><a href="#RowFormatSerdeProperty-1821"><span class="linenos">1821</span></a><span class="k">class</span> <span class="nc">RowFormatSerdeProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="RowFormatSerdeProperty-1822"><a href="#RowFormatSerdeProperty-1822"><span class="linenos">1822</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></pre></div>
@@ -19532,8 +20032,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#SchemaCommentProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SchemaCommentProperty-1702"><a href="#SchemaCommentProperty-1702"><span class="linenos">1702</span></a><span class="k">class</span> <span class="nc">SchemaCommentProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="SchemaCommentProperty-1703"><a href="#SchemaCommentProperty-1703"><span class="linenos">1703</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SchemaCommentProperty-1825"><a href="#SchemaCommentProperty-1825"><span class="linenos">1825</span></a><span class="k">class</span> <span class="nc">SchemaCommentProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="SchemaCommentProperty-1826"><a href="#SchemaCommentProperty-1826"><span class="linenos">1826</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></pre></div>
@@ -19596,8 +20096,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#SerdeProperties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SerdeProperties-1706"><a href="#SerdeProperties-1706"><span class="linenos">1706</span></a><span class="k">class</span> <span class="nc">SerdeProperties</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="SerdeProperties-1707"><a href="#SerdeProperties-1707"><span class="linenos">1707</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SerdeProperties-1829"><a href="#SerdeProperties-1829"><span class="linenos">1829</span></a><span class="k">class</span> <span class="nc">SerdeProperties</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="SerdeProperties-1830"><a href="#SerdeProperties-1830"><span class="linenos">1830</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -19660,8 +20160,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#SetProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SetProperty-1710"><a href="#SetProperty-1710"><span class="linenos">1710</span></a><span class="k">class</span> <span class="nc">SetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="SetProperty-1711"><a href="#SetProperty-1711"><span class="linenos">1711</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;multi&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SetProperty-1833"><a href="#SetProperty-1833"><span class="linenos">1833</span></a><span class="k">class</span> <span class="nc">SetProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="SetProperty-1834"><a href="#SetProperty-1834"><span class="linenos">1834</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;multi&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -19724,8 +20224,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#SortKeyProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SortKeyProperty-1714"><a href="#SortKeyProperty-1714"><span class="linenos">1714</span></a><span class="k">class</span> <span class="nc">SortKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="SortKeyProperty-1715"><a href="#SortKeyProperty-1715"><span class="linenos">1715</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;compound&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SortKeyProperty-1837"><a href="#SortKeyProperty-1837"><span class="linenos">1837</span></a><span class="k">class</span> <span class="nc">SortKeyProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="SortKeyProperty-1838"><a href="#SortKeyProperty-1838"><span class="linenos">1838</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;compound&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -19788,8 +20288,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#SqlSecurityProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SqlSecurityProperty-1718"><a href="#SqlSecurityProperty-1718"><span class="linenos">1718</span></a><span class="k">class</span> <span class="nc">SqlSecurityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="SqlSecurityProperty-1719"><a href="#SqlSecurityProperty-1719"><span class="linenos">1719</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;definer&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SqlSecurityProperty-1841"><a href="#SqlSecurityProperty-1841"><span class="linenos">1841</span></a><span class="k">class</span> <span class="nc">SqlSecurityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="SqlSecurityProperty-1842"><a href="#SqlSecurityProperty-1842"><span class="linenos">1842</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;definer&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -19852,8 +20352,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#StabilityProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StabilityProperty-1722"><a href="#StabilityProperty-1722"><span class="linenos">1722</span></a><span class="k">class</span> <span class="nc">StabilityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="StabilityProperty-1723"><a href="#StabilityProperty-1723"><span class="linenos">1723</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StabilityProperty-1845"><a href="#StabilityProperty-1845"><span class="linenos">1845</span></a><span class="k">class</span> <span class="nc">StabilityProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="StabilityProperty-1846"><a href="#StabilityProperty-1846"><span class="linenos">1846</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></pre></div>
@@ -19916,8 +20416,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#TableFormatProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TableFormatProperty-1726"><a href="#TableFormatProperty-1726"><span class="linenos">1726</span></a><span class="k">class</span> <span class="nc">TableFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="TableFormatProperty-1727"><a href="#TableFormatProperty-1727"><span class="linenos">1727</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TableFormatProperty-1849"><a href="#TableFormatProperty-1849"><span class="linenos">1849</span></a><span class="k">class</span> <span class="nc">TableFormatProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="TableFormatProperty-1850"><a href="#TableFormatProperty-1850"><span class="linenos">1850</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></pre></div>
@@ -19980,8 +20480,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#TemporaryProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TemporaryProperty-1730"><a href="#TemporaryProperty-1730"><span class="linenos">1730</span></a><span class="k">class</span> <span class="nc">TemporaryProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="TemporaryProperty-1731"><a href="#TemporaryProperty-1731"><span class="linenos">1731</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;global_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TemporaryProperty-1853"><a href="#TemporaryProperty-1853"><span class="linenos">1853</span></a><span class="k">class</span> <span class="nc">TemporaryProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="TemporaryProperty-1854"><a href="#TemporaryProperty-1854"><span class="linenos">1854</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;global_&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -20044,8 +20544,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#TransientProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TransientProperty-1734"><a href="#TransientProperty-1734"><span class="linenos">1734</span></a><span class="k">class</span> <span class="nc">TransientProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="TransientProperty-1735"><a href="#TransientProperty-1735"><span class="linenos">1735</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TransientProperty-1857"><a href="#TransientProperty-1857"><span class="linenos">1857</span></a><span class="k">class</span> <span class="nc">TransientProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="TransientProperty-1858"><a href="#TransientProperty-1858"><span class="linenos">1858</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></pre></div>
@@ -20108,8 +20608,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#VolatileProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="VolatileProperty-1738"><a href="#VolatileProperty-1738"><span class="linenos">1738</span></a><span class="k">class</span> <span class="nc">VolatileProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="VolatileProperty-1739"><a href="#VolatileProperty-1739"><span class="linenos">1739</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="VolatileProperty-1861"><a href="#VolatileProperty-1861"><span class="linenos">1861</span></a><span class="k">class</span> <span class="nc">VolatileProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="VolatileProperty-1862"><a href="#VolatileProperty-1862"><span class="linenos">1862</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></pre></div>
@@ -20172,8 +20672,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#WithDataProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WithDataProperty-1742"><a href="#WithDataProperty-1742"><span class="linenos">1742</span></a><span class="k">class</span> <span class="nc">WithDataProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="WithDataProperty-1743"><a href="#WithDataProperty-1743"><span class="linenos">1743</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;statistics&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WithDataProperty-1865"><a href="#WithDataProperty-1865"><span class="linenos">1865</span></a><span class="k">class</span> <span class="nc">WithDataProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="WithDataProperty-1866"><a href="#WithDataProperty-1866"><span class="linenos">1866</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;statistics&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -20236,8 +20736,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#WithJournalTableProperty"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WithJournalTableProperty-1746"><a href="#WithJournalTableProperty-1746"><span class="linenos">1746</span></a><span class="k">class</span> <span class="nc">WithJournalTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
-</span><span id="WithJournalTableProperty-1747"><a href="#WithJournalTableProperty-1747"><span class="linenos">1747</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WithJournalTableProperty-1869"><a href="#WithJournalTableProperty-1869"><span class="linenos">1869</span></a><span class="k">class</span> <span class="nc">WithJournalTableProperty</span><span class="p">(</span><span class="n">Property</span><span class="p">):</span>
+</span><span id="WithJournalTableProperty-1870"><a href="#WithJournalTableProperty-1870"><span class="linenos">1870</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></pre></div>
@@ -20300,66 +20800,66 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Properties"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Properties-1750"><a href="#Properties-1750"><span class="linenos">1750</span></a><span class="k">class</span> <span class="nc">Properties</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Properties-1751"><a href="#Properties-1751"><span class="linenos">1751</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="Properties-1752"><a href="#Properties-1752"><span class="linenos">1752</span></a>
-</span><span id="Properties-1753"><a href="#Properties-1753"><span class="linenos">1753</span></a> <span class="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Properties-1754"><a href="#Properties-1754"><span class="linenos">1754</span></a> <span class="s2">&quot;ALGORITHM&quot;</span><span class="p">:</span> <span class="n">AlgorithmProperty</span><span class="p">,</span>
-</span><span id="Properties-1755"><a href="#Properties-1755"><span class="linenos">1755</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">AutoIncrementProperty</span><span class="p">,</span>
-</span><span id="Properties-1756"><a href="#Properties-1756"><span class="linenos">1756</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">CharacterSetProperty</span><span class="p">,</span>
-</span><span id="Properties-1757"><a href="#Properties-1757"><span class="linenos">1757</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">CollateProperty</span><span class="p">,</span>
-</span><span id="Properties-1758"><a href="#Properties-1758"><span class="linenos">1758</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">SchemaCommentProperty</span><span class="p">,</span>
-</span><span id="Properties-1759"><a href="#Properties-1759"><span class="linenos">1759</span></a> <span class="s2">&quot;DEFINER&quot;</span><span class="p">:</span> <span class="n">DefinerProperty</span><span class="p">,</span>
-</span><span id="Properties-1760"><a href="#Properties-1760"><span class="linenos">1760</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="n">DistKeyProperty</span><span class="p">,</span>
-</span><span id="Properties-1761"><a href="#Properties-1761"><span class="linenos">1761</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="n">DistStyleProperty</span><span class="p">,</span>
-</span><span id="Properties-1762"><a href="#Properties-1762"><span class="linenos">1762</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">EngineProperty</span><span class="p">,</span>
-</span><span id="Properties-1763"><a href="#Properties-1763"><span class="linenos">1763</span></a> <span class="s2">&quot;EXECUTE AS&quot;</span><span class="p">:</span> <span class="n">ExecuteAsProperty</span><span class="p">,</span>
-</span><span id="Properties-1764"><a href="#Properties-1764"><span class="linenos">1764</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">FileFormatProperty</span><span class="p">,</span>
-</span><span id="Properties-1765"><a href="#Properties-1765"><span class="linenos">1765</span></a> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">:</span> <span class="n">LanguageProperty</span><span class="p">,</span>
-</span><span id="Properties-1766"><a href="#Properties-1766"><span class="linenos">1766</span></a> <span class="s2">&quot;LOCATION&quot;</span><span class="p">:</span> <span class="n">LocationProperty</span><span class="p">,</span>
-</span><span id="Properties-1767"><a href="#Properties-1767"><span class="linenos">1767</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">PartitionedByProperty</span><span class="p">,</span>
-</span><span id="Properties-1768"><a href="#Properties-1768"><span class="linenos">1768</span></a> <span class="s2">&quot;RETURNS&quot;</span><span class="p">:</span> <span class="n">ReturnsProperty</span><span class="p">,</span>
-</span><span id="Properties-1769"><a href="#Properties-1769"><span class="linenos">1769</span></a> <span class="s2">&quot;ROW_FORMAT&quot;</span><span class="p">:</span> <span class="n">RowFormatProperty</span><span class="p">,</span>
-</span><span id="Properties-1770"><a href="#Properties-1770"><span class="linenos">1770</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">SortKeyProperty</span><span class="p">,</span>
-</span><span id="Properties-1771"><a href="#Properties-1771"><span class="linenos">1771</span></a> <span class="s2">&quot;TABLE_FORMAT&quot;</span><span class="p">:</span> <span class="n">TableFormatProperty</span><span class="p">,</span>
-</span><span id="Properties-1772"><a href="#Properties-1772"><span class="linenos">1772</span></a> <span class="p">}</span>
-</span><span id="Properties-1773"><a href="#Properties-1773"><span class="linenos">1773</span></a>
-</span><span id="Properties-1774"><a href="#Properties-1774"><span class="linenos">1774</span></a> <span class="n">PROPERTY_TO_NAME</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">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
-</span><span id="Properties-1775"><a href="#Properties-1775"><span class="linenos">1775</span></a>
-</span><span id="Properties-1776"><a href="#Properties-1776"><span class="linenos">1776</span></a> <span class="c1"># CREATE property locations</span>
-</span><span id="Properties-1777"><a href="#Properties-1777"><span class="linenos">1777</span></a> <span class="c1"># Form: schema specified</span>
-</span><span id="Properties-1778"><a href="#Properties-1778"><span class="linenos">1778</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="Properties-1779"><a href="#Properties-1779"><span class="linenos">1779</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="Properties-1780"><a href="#Properties-1780"><span class="linenos">1780</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
-</span><span id="Properties-1781"><a href="#Properties-1781"><span class="linenos">1781</span></a> <span class="c1"># with ([POST_WITH])</span>
-</span><span id="Properties-1782"><a href="#Properties-1782"><span class="linenos">1782</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
-</span><span id="Properties-1783"><a href="#Properties-1783"><span class="linenos">1783</span></a> <span class="c1">#</span>
-</span><span id="Properties-1784"><a href="#Properties-1784"><span class="linenos">1784</span></a> <span class="c1"># Form: alias selection</span>
-</span><span id="Properties-1785"><a href="#Properties-1785"><span class="linenos">1785</span></a> <span class="c1"># create [POST_CREATE]</span>
-</span><span id="Properties-1786"><a href="#Properties-1786"><span class="linenos">1786</span></a> <span class="c1"># table a [POST_NAME]</span>
-</span><span id="Properties-1787"><a href="#Properties-1787"><span class="linenos">1787</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
-</span><span id="Properties-1788"><a href="#Properties-1788"><span class="linenos">1788</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
-</span><span id="Properties-1789"><a href="#Properties-1789"><span class="linenos">1789</span></a> <span class="k">class</span> <span class="nc">Location</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
-</span><span id="Properties-1790"><a href="#Properties-1790"><span class="linenos">1790</span></a> <span class="n">POST_CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1791"><a href="#Properties-1791"><span class="linenos">1791</span></a> <span class="n">POST_NAME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1792"><a href="#Properties-1792"><span class="linenos">1792</span></a> <span class="n">POST_SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1793"><a href="#Properties-1793"><span class="linenos">1793</span></a> <span class="n">POST_WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1794"><a href="#Properties-1794"><span class="linenos">1794</span></a> <span class="n">POST_ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1795"><a href="#Properties-1795"><span class="linenos">1795</span></a> <span class="n">POST_EXPRESSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1796"><a href="#Properties-1796"><span class="linenos">1796</span></a> <span class="n">POST_INDEX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1797"><a href="#Properties-1797"><span class="linenos">1797</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties-1798"><a href="#Properties-1798"><span class="linenos">1798</span></a>
-</span><span id="Properties-1799"><a href="#Properties-1799"><span class="linenos">1799</span></a> <span class="nd">@classmethod</span>
-</span><span id="Properties-1800"><a href="#Properties-1800"><span class="linenos">1800</span></a> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">properties_dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
-</span><span id="Properties-1801"><a href="#Properties-1801"><span class="linenos">1801</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Properties-1802"><a href="#Properties-1802"><span class="linenos">1802</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">properties_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="Properties-1803"><a href="#Properties-1803"><span class="linenos">1803</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Properties-1804"><a href="#Properties-1804"><span class="linenos">1804</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
-</span><span id="Properties-1805"><a href="#Properties-1805"><span class="linenos">1805</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">property_cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
-</span><span id="Properties-1806"><a href="#Properties-1806"><span class="linenos">1806</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Properties-1807"><a href="#Properties-1807"><span class="linenos">1807</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Property</span><span class="p">(</span><span class="n">this</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">key</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
-</span><span id="Properties-1808"><a href="#Properties-1808"><span class="linenos">1808</span></a>
-</span><span id="Properties-1809"><a href="#Properties-1809"><span class="linenos">1809</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Properties-1873"><a href="#Properties-1873"><span class="linenos">1873</span></a><span class="k">class</span> <span class="nc">Properties</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Properties-1874"><a href="#Properties-1874"><span class="linenos">1874</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="Properties-1875"><a href="#Properties-1875"><span class="linenos">1875</span></a>
+</span><span id="Properties-1876"><a href="#Properties-1876"><span class="linenos">1876</span></a> <span class="n">NAME_TO_PROPERTY</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Properties-1877"><a href="#Properties-1877"><span class="linenos">1877</span></a> <span class="s2">&quot;ALGORITHM&quot;</span><span class="p">:</span> <span class="n">AlgorithmProperty</span><span class="p">,</span>
+</span><span id="Properties-1878"><a href="#Properties-1878"><span class="linenos">1878</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="n">AutoIncrementProperty</span><span class="p">,</span>
+</span><span id="Properties-1879"><a href="#Properties-1879"><span class="linenos">1879</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="n">CharacterSetProperty</span><span class="p">,</span>
+</span><span id="Properties-1880"><a href="#Properties-1880"><span class="linenos">1880</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="n">CollateProperty</span><span class="p">,</span>
+</span><span id="Properties-1881"><a href="#Properties-1881"><span class="linenos">1881</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="n">SchemaCommentProperty</span><span class="p">,</span>
+</span><span id="Properties-1882"><a href="#Properties-1882"><span class="linenos">1882</span></a> <span class="s2">&quot;DEFINER&quot;</span><span class="p">:</span> <span class="n">DefinerProperty</span><span class="p">,</span>
+</span><span id="Properties-1883"><a href="#Properties-1883"><span class="linenos">1883</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="n">DistKeyProperty</span><span class="p">,</span>
+</span><span id="Properties-1884"><a href="#Properties-1884"><span class="linenos">1884</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="n">DistStyleProperty</span><span class="p">,</span>
+</span><span id="Properties-1885"><a href="#Properties-1885"><span class="linenos">1885</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="n">EngineProperty</span><span class="p">,</span>
+</span><span id="Properties-1886"><a href="#Properties-1886"><span class="linenos">1886</span></a> <span class="s2">&quot;EXECUTE AS&quot;</span><span class="p">:</span> <span class="n">ExecuteAsProperty</span><span class="p">,</span>
+</span><span id="Properties-1887"><a href="#Properties-1887"><span class="linenos">1887</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="n">FileFormatProperty</span><span class="p">,</span>
+</span><span id="Properties-1888"><a href="#Properties-1888"><span class="linenos">1888</span></a> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">:</span> <span class="n">LanguageProperty</span><span class="p">,</span>
+</span><span id="Properties-1889"><a href="#Properties-1889"><span class="linenos">1889</span></a> <span class="s2">&quot;LOCATION&quot;</span><span class="p">:</span> <span class="n">LocationProperty</span><span class="p">,</span>
+</span><span id="Properties-1890"><a href="#Properties-1890"><span class="linenos">1890</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="n">PartitionedByProperty</span><span class="p">,</span>
+</span><span id="Properties-1891"><a href="#Properties-1891"><span class="linenos">1891</span></a> <span class="s2">&quot;RETURNS&quot;</span><span class="p">:</span> <span class="n">ReturnsProperty</span><span class="p">,</span>
+</span><span id="Properties-1892"><a href="#Properties-1892"><span class="linenos">1892</span></a> <span class="s2">&quot;ROW_FORMAT&quot;</span><span class="p">:</span> <span class="n">RowFormatProperty</span><span class="p">,</span>
+</span><span id="Properties-1893"><a href="#Properties-1893"><span class="linenos">1893</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">SortKeyProperty</span><span class="p">,</span>
+</span><span id="Properties-1894"><a href="#Properties-1894"><span class="linenos">1894</span></a> <span class="s2">&quot;TABLE_FORMAT&quot;</span><span class="p">:</span> <span class="n">TableFormatProperty</span><span class="p">,</span>
+</span><span id="Properties-1895"><a href="#Properties-1895"><span class="linenos">1895</span></a> <span class="p">}</span>
+</span><span id="Properties-1896"><a href="#Properties-1896"><span class="linenos">1896</span></a>
+</span><span id="Properties-1897"><a href="#Properties-1897"><span class="linenos">1897</span></a> <span class="n">PROPERTY_TO_NAME</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">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="Properties-1898"><a href="#Properties-1898"><span class="linenos">1898</span></a>
+</span><span id="Properties-1899"><a href="#Properties-1899"><span class="linenos">1899</span></a> <span class="c1"># CREATE property locations</span>
+</span><span id="Properties-1900"><a href="#Properties-1900"><span class="linenos">1900</span></a> <span class="c1"># Form: schema specified</span>
+</span><span id="Properties-1901"><a href="#Properties-1901"><span class="linenos">1901</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="Properties-1902"><a href="#Properties-1902"><span class="linenos">1902</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="Properties-1903"><a href="#Properties-1903"><span class="linenos">1903</span></a> <span class="c1"># (b int) [POST_SCHEMA]</span>
+</span><span id="Properties-1904"><a href="#Properties-1904"><span class="linenos">1904</span></a> <span class="c1"># with ([POST_WITH])</span>
+</span><span id="Properties-1905"><a href="#Properties-1905"><span class="linenos">1905</span></a> <span class="c1"># index (b) [POST_INDEX]</span>
+</span><span id="Properties-1906"><a href="#Properties-1906"><span class="linenos">1906</span></a> <span class="c1">#</span>
+</span><span id="Properties-1907"><a href="#Properties-1907"><span class="linenos">1907</span></a> <span class="c1"># Form: alias selection</span>
+</span><span id="Properties-1908"><a href="#Properties-1908"><span class="linenos">1908</span></a> <span class="c1"># create [POST_CREATE]</span>
+</span><span id="Properties-1909"><a href="#Properties-1909"><span class="linenos">1909</span></a> <span class="c1"># table a [POST_NAME]</span>
+</span><span id="Properties-1910"><a href="#Properties-1910"><span class="linenos">1910</span></a> <span class="c1"># as [POST_ALIAS] (select * from b) [POST_EXPRESSION]</span>
+</span><span id="Properties-1911"><a href="#Properties-1911"><span class="linenos">1911</span></a> <span class="c1"># index (c) [POST_INDEX]</span>
+</span><span id="Properties-1912"><a href="#Properties-1912"><span class="linenos">1912</span></a> <span class="k">class</span> <span class="nc">Location</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
+</span><span id="Properties-1913"><a href="#Properties-1913"><span class="linenos">1913</span></a> <span class="n">POST_CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1914"><a href="#Properties-1914"><span class="linenos">1914</span></a> <span class="n">POST_NAME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1915"><a href="#Properties-1915"><span class="linenos">1915</span></a> <span class="n">POST_SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1916"><a href="#Properties-1916"><span class="linenos">1916</span></a> <span class="n">POST_WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1917"><a href="#Properties-1917"><span class="linenos">1917</span></a> <span class="n">POST_ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1918"><a href="#Properties-1918"><span class="linenos">1918</span></a> <span class="n">POST_EXPRESSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1919"><a href="#Properties-1919"><span class="linenos">1919</span></a> <span class="n">POST_INDEX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1920"><a href="#Properties-1920"><span class="linenos">1920</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties-1921"><a href="#Properties-1921"><span class="linenos">1921</span></a>
+</span><span id="Properties-1922"><a href="#Properties-1922"><span class="linenos">1922</span></a> <span class="nd">@classmethod</span>
+</span><span id="Properties-1923"><a href="#Properties-1923"><span class="linenos">1923</span></a> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">properties_dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
+</span><span id="Properties-1924"><a href="#Properties-1924"><span class="linenos">1924</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Properties-1925"><a href="#Properties-1925"><span class="linenos">1925</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">properties_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="Properties-1926"><a href="#Properties-1926"><span class="linenos">1926</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Properties-1927"><a href="#Properties-1927"><span class="linenos">1927</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
+</span><span id="Properties-1928"><a href="#Properties-1928"><span class="linenos">1928</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">property_cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+</span><span id="Properties-1929"><a href="#Properties-1929"><span class="linenos">1929</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Properties-1930"><a href="#Properties-1930"><span class="linenos">1930</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Property</span><span class="p">(</span><span class="n">this</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">key</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+</span><span id="Properties-1931"><a href="#Properties-1931"><span class="linenos">1931</span></a>
+</span><span id="Properties-1932"><a href="#Properties-1932"><span class="linenos">1932</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -20377,17 +20877,17 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Properties.from_dict"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Properties.from_dict-1799"><a href="#Properties.from_dict-1799"><span class="linenos">1799</span></a> <span class="nd">@classmethod</span>
-</span><span id="Properties.from_dict-1800"><a href="#Properties.from_dict-1800"><span class="linenos">1800</span></a> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">properties_dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
-</span><span id="Properties.from_dict-1801"><a href="#Properties.from_dict-1801"><span class="linenos">1801</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Properties.from_dict-1802"><a href="#Properties.from_dict-1802"><span class="linenos">1802</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">properties_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="Properties.from_dict-1803"><a href="#Properties.from_dict-1803"><span class="linenos">1803</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Properties.from_dict-1804"><a href="#Properties.from_dict-1804"><span class="linenos">1804</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
-</span><span id="Properties.from_dict-1805"><a href="#Properties.from_dict-1805"><span class="linenos">1805</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">property_cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
-</span><span id="Properties.from_dict-1806"><a href="#Properties.from_dict-1806"><span class="linenos">1806</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Properties.from_dict-1807"><a href="#Properties.from_dict-1807"><span class="linenos">1807</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Property</span><span class="p">(</span><span class="n">this</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">key</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
-</span><span id="Properties.from_dict-1808"><a href="#Properties.from_dict-1808"><span class="linenos">1808</span></a>
-</span><span id="Properties.from_dict-1809"><a href="#Properties.from_dict-1809"><span class="linenos">1809</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Properties.from_dict-1922"><a href="#Properties.from_dict-1922"><span class="linenos">1922</span></a> <span class="nd">@classmethod</span>
+</span><span id="Properties.from_dict-1923"><a href="#Properties.from_dict-1923"><span class="linenos">1923</span></a> <span class="k">def</span> <span class="nf">from_dict</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">properties_dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Properties</span><span class="p">:</span>
+</span><span id="Properties.from_dict-1924"><a href="#Properties.from_dict-1924"><span class="linenos">1924</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Properties.from_dict-1925"><a href="#Properties.from_dict-1925"><span class="linenos">1925</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">properties_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="Properties.from_dict-1926"><a href="#Properties.from_dict-1926"><span class="linenos">1926</span></a> <span class="n">property_cls</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">NAME_TO_PROPERTY</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Properties.from_dict-1927"><a href="#Properties.from_dict-1927"><span class="linenos">1927</span></a> <span class="k">if</span> <span class="n">property_cls</span><span class="p">:</span>
+</span><span id="Properties.from_dict-1928"><a href="#Properties.from_dict-1928"><span class="linenos">1928</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">property_cls</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+</span><span id="Properties.from_dict-1929"><a href="#Properties.from_dict-1929"><span class="linenos">1929</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Properties.from_dict-1930"><a href="#Properties.from_dict-1930"><span class="linenos">1930</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Property</span><span class="p">(</span><span class="n">this</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">key</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span>
+</span><span id="Properties.from_dict-1931"><a href="#Properties.from_dict-1931"><span class="linenos">1931</span></a>
+</span><span id="Properties.from_dict-1932"><a href="#Properties.from_dict-1932"><span class="linenos">1932</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span></pre></div>
@@ -20451,15 +20951,15 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Properties.Location"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Properties.Location-1789"><a href="#Properties.Location-1789"><span class="linenos">1789</span></a> <span class="k">class</span> <span class="nc">Location</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
-</span><span id="Properties.Location-1790"><a href="#Properties.Location-1790"><span class="linenos">1790</span></a> <span class="n">POST_CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties.Location-1791"><a href="#Properties.Location-1791"><span class="linenos">1791</span></a> <span class="n">POST_NAME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties.Location-1792"><a href="#Properties.Location-1792"><span class="linenos">1792</span></a> <span class="n">POST_SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties.Location-1793"><a href="#Properties.Location-1793"><span class="linenos">1793</span></a> <span class="n">POST_WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties.Location-1794"><a href="#Properties.Location-1794"><span class="linenos">1794</span></a> <span class="n">POST_ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties.Location-1795"><a href="#Properties.Location-1795"><span class="linenos">1795</span></a> <span class="n">POST_EXPRESSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties.Location-1796"><a href="#Properties.Location-1796"><span class="linenos">1796</span></a> <span class="n">POST_INDEX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="Properties.Location-1797"><a href="#Properties.Location-1797"><span class="linenos">1797</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Properties.Location-1912"><a href="#Properties.Location-1912"><span class="linenos">1912</span></a> <span class="k">class</span> <span class="nc">Location</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
+</span><span id="Properties.Location-1913"><a href="#Properties.Location-1913"><span class="linenos">1913</span></a> <span class="n">POST_CREATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties.Location-1914"><a href="#Properties.Location-1914"><span class="linenos">1914</span></a> <span class="n">POST_NAME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties.Location-1915"><a href="#Properties.Location-1915"><span class="linenos">1915</span></a> <span class="n">POST_SCHEMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties.Location-1916"><a href="#Properties.Location-1916"><span class="linenos">1916</span></a> <span class="n">POST_WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties.Location-1917"><a href="#Properties.Location-1917"><span class="linenos">1917</span></a> <span class="n">POST_ALIAS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties.Location-1918"><a href="#Properties.Location-1918"><span class="linenos">1918</span></a> <span class="n">POST_EXPRESSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties.Location-1919"><a href="#Properties.Location-1919"><span class="linenos">1919</span></a> <span class="n">POST_INDEX</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="Properties.Location-1920"><a href="#Properties.Location-1920"><span class="linenos">1920</span></a> <span class="n">UNSUPPORTED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span></pre></div>
@@ -20585,8 +21085,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Qualify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Qualify-1812"><a href="#Qualify-1812"><span class="linenos">1812</span></a><span class="k">class</span> <span class="nc">Qualify</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Qualify-1813"><a href="#Qualify-1813"><span class="linenos">1813</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Qualify-1935"><a href="#Qualify-1935"><span class="linenos">1935</span></a><span class="k">class</span> <span class="nc">Qualify</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Qualify-1936"><a href="#Qualify-1936"><span class="linenos">1936</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -20649,8 +21149,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Return"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Return-1817"><a href="#Return-1817"><span class="linenos">1817</span></a><span class="k">class</span> <span class="nc">Return</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Return-1818"><a href="#Return-1818"><span class="linenos">1818</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Return-1940"><a href="#Return-1940"><span class="linenos">1940</span></a><span class="k">class</span> <span class="nc">Return</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Return-1941"><a href="#Return-1941"><span class="linenos">1941</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -20713,8 +21213,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Reference"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Reference-1821"><a href="#Reference-1821"><span class="linenos">1821</span></a><span class="k">class</span> <span class="nc">Reference</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Reference-1822"><a href="#Reference-1822"><span class="linenos">1822</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Reference-1944"><a href="#Reference-1944"><span class="linenos">1944</span></a><span class="k">class</span> <span class="nc">Reference</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Reference-1945"><a href="#Reference-1945"><span class="linenos">1945</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -20777,8 +21277,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Tuple"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tuple-1825"><a href="#Tuple-1825"><span class="linenos">1825</span></a><span class="k">class</span> <span class="nc">Tuple</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Tuple-1826"><a href="#Tuple-1826"><span class="linenos">1826</span></a> <span class="n">arg_types</span> <span class="o">=</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tuple-1948"><a href="#Tuple-1948"><span class="linenos">1948</span></a><span class="k">class</span> <span class="nc">Tuple</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Tuple-1949"><a href="#Tuple-1949"><span class="linenos">1949</span></a> <span class="n">arg_types</span> <span class="o">=</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>
@@ -20841,103 +21341,103 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Subqueryable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable-1829"><a href="#Subqueryable-1829"><span class="linenos">1829</span></a><span class="k">class</span> <span class="nc">Subqueryable</span><span class="p">(</span><span class="n">Unionable</span><span class="p">):</span>
-</span><span id="Subqueryable-1830"><a href="#Subqueryable-1830"><span class="linenos">1830</span></a> <span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
-</span><span id="Subqueryable-1831"><a href="#Subqueryable-1831"><span class="linenos">1831</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable-1832"><a href="#Subqueryable-1832"><span class="linenos">1832</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
-</span><span id="Subqueryable-1833"><a href="#Subqueryable-1833"><span class="linenos">1833</span></a>
-</span><span id="Subqueryable-1834"><a href="#Subqueryable-1834"><span class="linenos">1834</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable-1835"><a href="#Subqueryable-1835"><span class="linenos">1835</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
-</span><span id="Subqueryable-1836"><a href="#Subqueryable-1836"><span class="linenos">1836</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
-</span><span id="Subqueryable-1837"><a href="#Subqueryable-1837"><span class="linenos">1837</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
-</span><span id="Subqueryable-1838"><a href="#Subqueryable-1838"><span class="linenos">1838</span></a>
-</span><span id="Subqueryable-1839"><a href="#Subqueryable-1839"><span class="linenos">1839</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable-1840"><a href="#Subqueryable-1840"><span class="linenos">1840</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
-</span><span id="Subqueryable-1841"><a href="#Subqueryable-1841"><span class="linenos">1841</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable-1842"><a href="#Subqueryable-1842"><span class="linenos">1842</span></a>
-</span><span id="Subqueryable-1843"><a href="#Subqueryable-1843"><span class="linenos">1843</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable-1844"><a href="#Subqueryable-1844"><span class="linenos">1844</span></a><span class="sd"> Alias: the subquery</span>
-</span><span id="Subqueryable-1845"><a href="#Subqueryable-1845"><span class="linenos">1845</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable-1846"><a href="#Subqueryable-1846"><span class="linenos">1846</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Subqueryable-1847"><a href="#Subqueryable-1847"><span class="linenos">1847</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span>
-</span><span id="Subqueryable-1848"><a href="#Subqueryable-1848"><span class="linenos">1848</span></a> <span class="n">this</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="Subqueryable-1849"><a href="#Subqueryable-1849"><span class="linenos">1849</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Subqueryable-1850"><a href="#Subqueryable-1850"><span class="linenos">1850</span></a> <span class="p">)</span>
-</span><span id="Subqueryable-1851"><a href="#Subqueryable-1851"><span class="linenos">1851</span></a>
-</span><span id="Subqueryable-1852"><a href="#Subqueryable-1852"><span class="linenos">1852</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Subqueryable-1853"><a href="#Subqueryable-1853"><span class="linenos">1853</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
-</span><span id="Subqueryable-1854"><a href="#Subqueryable-1854"><span class="linenos">1854</span></a>
-</span><span id="Subqueryable-1855"><a href="#Subqueryable-1855"><span class="linenos">1855</span></a> <span class="nd">@property</span>
-</span><span id="Subqueryable-1856"><a href="#Subqueryable-1856"><span class="linenos">1856</span></a> <span class="k">def</span> <span class="nf">ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Subqueryable-1857"><a href="#Subqueryable-1857"><span class="linenos">1857</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="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&quot;</span><span class="p">)</span>
-</span><span id="Subqueryable-1858"><a href="#Subqueryable-1858"><span class="linenos">1858</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="Subqueryable-1859"><a href="#Subqueryable-1859"><span class="linenos">1859</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="Subqueryable-1860"><a href="#Subqueryable-1860"><span class="linenos">1860</span></a> <span class="k">return</span> <span class="n">with_</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="Subqueryable-1861"><a href="#Subqueryable-1861"><span class="linenos">1861</span></a>
-</span><span id="Subqueryable-1862"><a href="#Subqueryable-1862"><span class="linenos">1862</span></a> <span class="nd">@property</span>
-</span><span id="Subqueryable-1863"><a href="#Subqueryable-1863"><span class="linenos">1863</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Subqueryable-1864"><a href="#Subqueryable-1864"><span class="linenos">1864</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `selects`&quot;</span><span class="p">)</span>
-</span><span id="Subqueryable-1865"><a href="#Subqueryable-1865"><span class="linenos">1865</span></a>
-</span><span id="Subqueryable-1866"><a href="#Subqueryable-1866"><span class="linenos">1866</span></a> <span class="nd">@property</span>
-</span><span id="Subqueryable-1867"><a href="#Subqueryable-1867"><span class="linenos">1867</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Subqueryable-1868"><a href="#Subqueryable-1868"><span class="linenos">1868</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `named_selects`&quot;</span><span class="p">)</span>
-</span><span id="Subqueryable-1869"><a href="#Subqueryable-1869"><span class="linenos">1869</span></a>
-</span><span id="Subqueryable-1870"><a href="#Subqueryable-1870"><span class="linenos">1870</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="Subqueryable-1871"><a href="#Subqueryable-1871"><span class="linenos">1871</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Subqueryable-1872"><a href="#Subqueryable-1872"><span class="linenos">1872</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="Subqueryable-1873"><a href="#Subqueryable-1873"><span class="linenos">1873</span></a> <span class="n">as_</span><span class="p">,</span>
-</span><span id="Subqueryable-1874"><a href="#Subqueryable-1874"><span class="linenos">1874</span></a> <span class="n">recursive</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Subqueryable-1875"><a href="#Subqueryable-1875"><span class="linenos">1875</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Subqueryable-1876"><a href="#Subqueryable-1876"><span class="linenos">1876</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Subqueryable-1877"><a href="#Subqueryable-1877"><span class="linenos">1877</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Subqueryable-1878"><a href="#Subqueryable-1878"><span class="linenos">1878</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable-1879"><a href="#Subqueryable-1879"><span class="linenos">1879</span></a> <span class="p">):</span>
-</span><span id="Subqueryable-1880"><a href="#Subqueryable-1880"><span class="linenos">1880</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable-1881"><a href="#Subqueryable-1881"><span class="linenos">1881</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="Subqueryable-1882"><a href="#Subqueryable-1882"><span class="linenos">1882</span></a>
-</span><span id="Subqueryable-1883"><a href="#Subqueryable-1883"><span class="linenos">1883</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable-1884"><a href="#Subqueryable-1884"><span class="linenos">1884</span></a><span class="sd"> &gt;&gt;&gt; Select().with_(&quot;tbl2&quot;, as_=&quot;SELECT * FROM tbl&quot;).select(&quot;x&quot;).from_(&quot;tbl2&quot;).sql()</span>
-</span><span id="Subqueryable-1885"><a href="#Subqueryable-1885"><span class="linenos">1885</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
-</span><span id="Subqueryable-1886"><a href="#Subqueryable-1886"><span class="linenos">1886</span></a>
-</span><span id="Subqueryable-1887"><a href="#Subqueryable-1887"><span class="linenos">1887</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable-1888"><a href="#Subqueryable-1888"><span class="linenos">1888</span></a><span class="sd"> alias (str | Expression): the SQL code string to parse as the table name.</span>
-</span><span id="Subqueryable-1889"><a href="#Subqueryable-1889"><span class="linenos">1889</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="Subqueryable-1890"><a href="#Subqueryable-1890"><span class="linenos">1890</span></a><span class="sd"> as_ (str | Expression): the SQL code string to parse as the table expression.</span>
-</span><span id="Subqueryable-1891"><a href="#Subqueryable-1891"><span class="linenos">1891</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Subqueryable-1892"><a href="#Subqueryable-1892"><span class="linenos">1892</span></a><span class="sd"> recursive (bool): set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="Subqueryable-1893"><a href="#Subqueryable-1893"><span class="linenos">1893</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Subqueryable-1894"><a href="#Subqueryable-1894"><span class="linenos">1894</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Subqueryable-1895"><a href="#Subqueryable-1895"><span class="linenos">1895</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Subqueryable-1896"><a href="#Subqueryable-1896"><span class="linenos">1896</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable-1897"><a href="#Subqueryable-1897"><span class="linenos">1897</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Subqueryable-1898"><a href="#Subqueryable-1898"><span class="linenos">1898</span></a>
-</span><span id="Subqueryable-1899"><a href="#Subqueryable-1899"><span class="linenos">1899</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable-1900"><a href="#Subqueryable-1900"><span class="linenos">1900</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Subqueryable-1901"><a href="#Subqueryable-1901"><span class="linenos">1901</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable-1902"><a href="#Subqueryable-1902"><span class="linenos">1902</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="Subqueryable-1903"><a href="#Subqueryable-1903"><span class="linenos">1903</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="Subqueryable-1904"><a href="#Subqueryable-1904"><span class="linenos">1904</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Subqueryable-1905"><a href="#Subqueryable-1905"><span class="linenos">1905</span></a> <span class="n">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span>
-</span><span id="Subqueryable-1906"><a href="#Subqueryable-1906"><span class="linenos">1906</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable-1907"><a href="#Subqueryable-1907"><span class="linenos">1907</span></a> <span class="p">)</span>
-</span><span id="Subqueryable-1908"><a href="#Subqueryable-1908"><span class="linenos">1908</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="Subqueryable-1909"><a href="#Subqueryable-1909"><span class="linenos">1909</span></a> <span class="n">as_</span><span class="p">,</span>
-</span><span id="Subqueryable-1910"><a href="#Subqueryable-1910"><span class="linenos">1910</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Subqueryable-1911"><a href="#Subqueryable-1911"><span class="linenos">1911</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable-1912"><a href="#Subqueryable-1912"><span class="linenos">1912</span></a> <span class="p">)</span>
-</span><span id="Subqueryable-1913"><a href="#Subqueryable-1913"><span class="linenos">1913</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span>
-</span><span id="Subqueryable-1914"><a href="#Subqueryable-1914"><span class="linenos">1914</span></a> <span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span>
-</span><span id="Subqueryable-1915"><a href="#Subqueryable-1915"><span class="linenos">1915</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</span><span class="p">,</span>
-</span><span id="Subqueryable-1916"><a href="#Subqueryable-1916"><span class="linenos">1916</span></a> <span class="p">)</span>
-</span><span id="Subqueryable-1917"><a href="#Subqueryable-1917"><span class="linenos">1917</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Subqueryable-1918"><a href="#Subqueryable-1918"><span class="linenos">1918</span></a> <span class="n">cte</span><span class="p">,</span>
-</span><span id="Subqueryable-1919"><a href="#Subqueryable-1919"><span class="linenos">1919</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Subqueryable-1920"><a href="#Subqueryable-1920"><span class="linenos">1920</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;with&quot;</span><span class="p">,</span>
-</span><span id="Subqueryable-1921"><a href="#Subqueryable-1921"><span class="linenos">1921</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Subqueryable-1922"><a href="#Subqueryable-1922"><span class="linenos">1922</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Subqueryable-1923"><a href="#Subqueryable-1923"><span class="linenos">1923</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
-</span><span id="Subqueryable-1924"><a href="#Subqueryable-1924"><span class="linenos">1924</span></a> <span class="n">properties</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="n">recursive</span> <span class="ow">or</span> <span class="kc">False</span><span class="p">},</span>
-</span><span id="Subqueryable-1925"><a href="#Subqueryable-1925"><span class="linenos">1925</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable-1952"><a href="#Subqueryable-1952"><span class="linenos">1952</span></a><span class="k">class</span> <span class="nc">Subqueryable</span><span class="p">(</span><span class="n">Unionable</span><span class="p">):</span>
+</span><span id="Subqueryable-1953"><a href="#Subqueryable-1953"><span class="linenos">1953</span></a> <span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
+</span><span id="Subqueryable-1954"><a href="#Subqueryable-1954"><span class="linenos">1954</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable-1955"><a href="#Subqueryable-1955"><span class="linenos">1955</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
+</span><span id="Subqueryable-1956"><a href="#Subqueryable-1956"><span class="linenos">1956</span></a>
+</span><span id="Subqueryable-1957"><a href="#Subqueryable-1957"><span class="linenos">1957</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable-1958"><a href="#Subqueryable-1958"><span class="linenos">1958</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
+</span><span id="Subqueryable-1959"><a href="#Subqueryable-1959"><span class="linenos">1959</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
+</span><span id="Subqueryable-1960"><a href="#Subqueryable-1960"><span class="linenos">1960</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
+</span><span id="Subqueryable-1961"><a href="#Subqueryable-1961"><span class="linenos">1961</span></a>
+</span><span id="Subqueryable-1962"><a href="#Subqueryable-1962"><span class="linenos">1962</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable-1963"><a href="#Subqueryable-1963"><span class="linenos">1963</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
+</span><span id="Subqueryable-1964"><a href="#Subqueryable-1964"><span class="linenos">1964</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable-1965"><a href="#Subqueryable-1965"><span class="linenos">1965</span></a>
+</span><span id="Subqueryable-1966"><a href="#Subqueryable-1966"><span class="linenos">1966</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable-1967"><a href="#Subqueryable-1967"><span class="linenos">1967</span></a><span class="sd"> Alias: the subquery</span>
+</span><span id="Subqueryable-1968"><a href="#Subqueryable-1968"><span class="linenos">1968</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable-1969"><a href="#Subqueryable-1969"><span class="linenos">1969</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Subqueryable-1970"><a href="#Subqueryable-1970"><span class="linenos">1970</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span>
+</span><span id="Subqueryable-1971"><a href="#Subqueryable-1971"><span class="linenos">1971</span></a> <span class="n">this</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="Subqueryable-1972"><a href="#Subqueryable-1972"><span class="linenos">1972</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Subqueryable-1973"><a href="#Subqueryable-1973"><span class="linenos">1973</span></a> <span class="p">)</span>
+</span><span id="Subqueryable-1974"><a href="#Subqueryable-1974"><span class="linenos">1974</span></a>
+</span><span id="Subqueryable-1975"><a href="#Subqueryable-1975"><span class="linenos">1975</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Subqueryable-1976"><a href="#Subqueryable-1976"><span class="linenos">1976</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+</span><span id="Subqueryable-1977"><a href="#Subqueryable-1977"><span class="linenos">1977</span></a>
+</span><span id="Subqueryable-1978"><a href="#Subqueryable-1978"><span class="linenos">1978</span></a> <span class="nd">@property</span>
+</span><span id="Subqueryable-1979"><a href="#Subqueryable-1979"><span class="linenos">1979</span></a> <span class="k">def</span> <span class="nf">ctes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Subqueryable-1980"><a href="#Subqueryable-1980"><span class="linenos">1980</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="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&quot;</span><span class="p">)</span>
+</span><span id="Subqueryable-1981"><a href="#Subqueryable-1981"><span class="linenos">1981</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="Subqueryable-1982"><a href="#Subqueryable-1982"><span class="linenos">1982</span></a> <span class="k">return</span> <span class="p">[]</span>
+</span><span id="Subqueryable-1983"><a href="#Subqueryable-1983"><span class="linenos">1983</span></a> <span class="k">return</span> <span class="n">with_</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Subqueryable-1984"><a href="#Subqueryable-1984"><span class="linenos">1984</span></a>
+</span><span id="Subqueryable-1985"><a href="#Subqueryable-1985"><span class="linenos">1985</span></a> <span class="nd">@property</span>
+</span><span id="Subqueryable-1986"><a href="#Subqueryable-1986"><span class="linenos">1986</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Subqueryable-1987"><a href="#Subqueryable-1987"><span class="linenos">1987</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `selects`&quot;</span><span class="p">)</span>
+</span><span id="Subqueryable-1988"><a href="#Subqueryable-1988"><span class="linenos">1988</span></a>
+</span><span id="Subqueryable-1989"><a href="#Subqueryable-1989"><span class="linenos">1989</span></a> <span class="nd">@property</span>
+</span><span id="Subqueryable-1990"><a href="#Subqueryable-1990"><span class="linenos">1990</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Subqueryable-1991"><a href="#Subqueryable-1991"><span class="linenos">1991</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;Subqueryable objects must implement `named_selects`&quot;</span><span class="p">)</span>
+</span><span id="Subqueryable-1992"><a href="#Subqueryable-1992"><span class="linenos">1992</span></a>
+</span><span id="Subqueryable-1993"><a href="#Subqueryable-1993"><span class="linenos">1993</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
+</span><span id="Subqueryable-1994"><a href="#Subqueryable-1994"><span class="linenos">1994</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable-1995"><a href="#Subqueryable-1995"><span class="linenos">1995</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="Subqueryable-1996"><a href="#Subqueryable-1996"><span class="linenos">1996</span></a> <span class="n">as_</span><span class="p">,</span>
+</span><span id="Subqueryable-1997"><a href="#Subqueryable-1997"><span class="linenos">1997</span></a> <span class="n">recursive</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Subqueryable-1998"><a href="#Subqueryable-1998"><span class="linenos">1998</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Subqueryable-1999"><a href="#Subqueryable-1999"><span class="linenos">1999</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Subqueryable-2000"><a href="#Subqueryable-2000"><span class="linenos">2000</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Subqueryable-2001"><a href="#Subqueryable-2001"><span class="linenos">2001</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable-2002"><a href="#Subqueryable-2002"><span class="linenos">2002</span></a> <span class="p">):</span>
+</span><span id="Subqueryable-2003"><a href="#Subqueryable-2003"><span class="linenos">2003</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable-2004"><a href="#Subqueryable-2004"><span class="linenos">2004</span></a><span class="sd"> Append to or set the common table expressions.</span>
+</span><span id="Subqueryable-2005"><a href="#Subqueryable-2005"><span class="linenos">2005</span></a>
+</span><span id="Subqueryable-2006"><a href="#Subqueryable-2006"><span class="linenos">2006</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable-2007"><a href="#Subqueryable-2007"><span class="linenos">2007</span></a><span class="sd"> &gt;&gt;&gt; Select().with_(&quot;tbl2&quot;, as_=&quot;SELECT * FROM tbl&quot;).select(&quot;x&quot;).from_(&quot;tbl2&quot;).sql()</span>
+</span><span id="Subqueryable-2008"><a href="#Subqueryable-2008"><span class="linenos">2008</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
+</span><span id="Subqueryable-2009"><a href="#Subqueryable-2009"><span class="linenos">2009</span></a>
+</span><span id="Subqueryable-2010"><a href="#Subqueryable-2010"><span class="linenos">2010</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable-2011"><a href="#Subqueryable-2011"><span class="linenos">2011</span></a><span class="sd"> alias (str | Expression): the SQL code string to parse as the table name.</span>
+</span><span id="Subqueryable-2012"><a href="#Subqueryable-2012"><span class="linenos">2012</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="Subqueryable-2013"><a href="#Subqueryable-2013"><span class="linenos">2013</span></a><span class="sd"> as_ (str | Expression): the SQL code string to parse as the table expression.</span>
+</span><span id="Subqueryable-2014"><a href="#Subqueryable-2014"><span class="linenos">2014</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Subqueryable-2015"><a href="#Subqueryable-2015"><span class="linenos">2015</span></a><span class="sd"> recursive (bool): set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="Subqueryable-2016"><a href="#Subqueryable-2016"><span class="linenos">2016</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Subqueryable-2017"><a href="#Subqueryable-2017"><span class="linenos">2017</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Subqueryable-2018"><a href="#Subqueryable-2018"><span class="linenos">2018</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Subqueryable-2019"><a href="#Subqueryable-2019"><span class="linenos">2019</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable-2020"><a href="#Subqueryable-2020"><span class="linenos">2020</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Subqueryable-2021"><a href="#Subqueryable-2021"><span class="linenos">2021</span></a>
+</span><span id="Subqueryable-2022"><a href="#Subqueryable-2022"><span class="linenos">2022</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable-2023"><a href="#Subqueryable-2023"><span class="linenos">2023</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Subqueryable-2024"><a href="#Subqueryable-2024"><span class="linenos">2024</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable-2025"><a href="#Subqueryable-2025"><span class="linenos">2025</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="Subqueryable-2026"><a href="#Subqueryable-2026"><span class="linenos">2026</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="Subqueryable-2027"><a href="#Subqueryable-2027"><span class="linenos">2027</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Subqueryable-2028"><a href="#Subqueryable-2028"><span class="linenos">2028</span></a> <span class="n">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span>
+</span><span id="Subqueryable-2029"><a href="#Subqueryable-2029"><span class="linenos">2029</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable-2030"><a href="#Subqueryable-2030"><span class="linenos">2030</span></a> <span class="p">)</span>
+</span><span id="Subqueryable-2031"><a href="#Subqueryable-2031"><span class="linenos">2031</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="Subqueryable-2032"><a href="#Subqueryable-2032"><span class="linenos">2032</span></a> <span class="n">as_</span><span class="p">,</span>
+</span><span id="Subqueryable-2033"><a href="#Subqueryable-2033"><span class="linenos">2033</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Subqueryable-2034"><a href="#Subqueryable-2034"><span class="linenos">2034</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable-2035"><a href="#Subqueryable-2035"><span class="linenos">2035</span></a> <span class="p">)</span>
+</span><span id="Subqueryable-2036"><a href="#Subqueryable-2036"><span class="linenos">2036</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span>
+</span><span id="Subqueryable-2037"><a href="#Subqueryable-2037"><span class="linenos">2037</span></a> <span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span>
+</span><span id="Subqueryable-2038"><a href="#Subqueryable-2038"><span class="linenos">2038</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</span><span class="p">,</span>
+</span><span id="Subqueryable-2039"><a href="#Subqueryable-2039"><span class="linenos">2039</span></a> <span class="p">)</span>
+</span><span id="Subqueryable-2040"><a href="#Subqueryable-2040"><span class="linenos">2040</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Subqueryable-2041"><a href="#Subqueryable-2041"><span class="linenos">2041</span></a> <span class="n">cte</span><span class="p">,</span>
+</span><span id="Subqueryable-2042"><a href="#Subqueryable-2042"><span class="linenos">2042</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable-2043"><a href="#Subqueryable-2043"><span class="linenos">2043</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;with&quot;</span><span class="p">,</span>
+</span><span id="Subqueryable-2044"><a href="#Subqueryable-2044"><span class="linenos">2044</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Subqueryable-2045"><a href="#Subqueryable-2045"><span class="linenos">2045</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Subqueryable-2046"><a href="#Subqueryable-2046"><span class="linenos">2046</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
+</span><span id="Subqueryable-2047"><a href="#Subqueryable-2047"><span class="linenos">2047</span></a> <span class="n">properties</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="n">recursive</span> <span class="ow">or</span> <span class="kc">False</span><span class="p">},</span>
+</span><span id="Subqueryable-2048"><a href="#Subqueryable-2048"><span class="linenos">2048</span></a> <span class="p">)</span>
</span></pre></div>
@@ -20954,27 +21454,27 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Subqueryable.subquery"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.subquery-1830"><a href="#Subqueryable.subquery-1830"><span class="linenos">1830</span></a> <span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
-</span><span id="Subqueryable.subquery-1831"><a href="#Subqueryable.subquery-1831"><span class="linenos">1831</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable.subquery-1832"><a href="#Subqueryable.subquery-1832"><span class="linenos">1832</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
-</span><span id="Subqueryable.subquery-1833"><a href="#Subqueryable.subquery-1833"><span class="linenos">1833</span></a>
-</span><span id="Subqueryable.subquery-1834"><a href="#Subqueryable.subquery-1834"><span class="linenos">1834</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable.subquery-1835"><a href="#Subqueryable.subquery-1835"><span class="linenos">1835</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
-</span><span id="Subqueryable.subquery-1836"><a href="#Subqueryable.subquery-1836"><span class="linenos">1836</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
-</span><span id="Subqueryable.subquery-1837"><a href="#Subqueryable.subquery-1837"><span class="linenos">1837</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
-</span><span id="Subqueryable.subquery-1838"><a href="#Subqueryable.subquery-1838"><span class="linenos">1838</span></a>
-</span><span id="Subqueryable.subquery-1839"><a href="#Subqueryable.subquery-1839"><span class="linenos">1839</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable.subquery-1840"><a href="#Subqueryable.subquery-1840"><span class="linenos">1840</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
-</span><span id="Subqueryable.subquery-1841"><a href="#Subqueryable.subquery-1841"><span class="linenos">1841</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable.subquery-1842"><a href="#Subqueryable.subquery-1842"><span class="linenos">1842</span></a>
-</span><span id="Subqueryable.subquery-1843"><a href="#Subqueryable.subquery-1843"><span class="linenos">1843</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable.subquery-1844"><a href="#Subqueryable.subquery-1844"><span class="linenos">1844</span></a><span class="sd"> Alias: the subquery</span>
-</span><span id="Subqueryable.subquery-1845"><a href="#Subqueryable.subquery-1845"><span class="linenos">1845</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable.subquery-1846"><a href="#Subqueryable.subquery-1846"><span class="linenos">1846</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Subqueryable.subquery-1847"><a href="#Subqueryable.subquery-1847"><span class="linenos">1847</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span>
-</span><span id="Subqueryable.subquery-1848"><a href="#Subqueryable.subquery-1848"><span class="linenos">1848</span></a> <span class="n">this</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="Subqueryable.subquery-1849"><a href="#Subqueryable.subquery-1849"><span class="linenos">1849</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Subqueryable.subquery-1850"><a href="#Subqueryable.subquery-1850"><span class="linenos">1850</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.subquery-1953"><a href="#Subqueryable.subquery-1953"><span class="linenos">1953</span></a> <span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Subquery</span><span class="p">:</span>
+</span><span id="Subqueryable.subquery-1954"><a href="#Subqueryable.subquery-1954"><span class="linenos">1954</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable.subquery-1955"><a href="#Subqueryable.subquery-1955"><span class="linenos">1955</span></a><span class="sd"> Convert this expression to an aliased expression that can be used as a Subquery.</span>
+</span><span id="Subqueryable.subquery-1956"><a href="#Subqueryable.subquery-1956"><span class="linenos">1956</span></a>
+</span><span id="Subqueryable.subquery-1957"><a href="#Subqueryable.subquery-1957"><span class="linenos">1957</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable.subquery-1958"><a href="#Subqueryable.subquery-1958"><span class="linenos">1958</span></a><span class="sd"> &gt;&gt;&gt; subquery = Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).subquery()</span>
+</span><span id="Subqueryable.subquery-1959"><a href="#Subqueryable.subquery-1959"><span class="linenos">1959</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(subquery).sql()</span>
+</span><span id="Subqueryable.subquery-1960"><a href="#Subqueryable.subquery-1960"><span class="linenos">1960</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl)&#39;</span>
+</span><span id="Subqueryable.subquery-1961"><a href="#Subqueryable.subquery-1961"><span class="linenos">1961</span></a>
+</span><span id="Subqueryable.subquery-1962"><a href="#Subqueryable.subquery-1962"><span class="linenos">1962</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable.subquery-1963"><a href="#Subqueryable.subquery-1963"><span class="linenos">1963</span></a><span class="sd"> alias (str | Identifier): an optional alias for the subquery</span>
+</span><span id="Subqueryable.subquery-1964"><a href="#Subqueryable.subquery-1964"><span class="linenos">1964</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable.subquery-1965"><a href="#Subqueryable.subquery-1965"><span class="linenos">1965</span></a>
+</span><span id="Subqueryable.subquery-1966"><a href="#Subqueryable.subquery-1966"><span class="linenos">1966</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable.subquery-1967"><a href="#Subqueryable.subquery-1967"><span class="linenos">1967</span></a><span class="sd"> Alias: the subquery</span>
+</span><span id="Subqueryable.subquery-1968"><a href="#Subqueryable.subquery-1968"><span class="linenos">1968</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable.subquery-1969"><a href="#Subqueryable.subquery-1969"><span class="linenos">1969</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Subqueryable.subquery-1970"><a href="#Subqueryable.subquery-1970"><span class="linenos">1970</span></a> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span>
+</span><span id="Subqueryable.subquery-1971"><a href="#Subqueryable.subquery-1971"><span class="linenos">1971</span></a> <span class="n">this</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="Subqueryable.subquery-1972"><a href="#Subqueryable.subquery-1972"><span class="linenos">1972</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Subqueryable.subquery-1973"><a href="#Subqueryable.subquery-1973"><span class="linenos">1973</span></a> <span class="p">)</span>
</span></pre></div>
@@ -21018,8 +21518,8 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Subqueryable.limit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.limit-1852"><a href="#Subqueryable.limit-1852"><span class="linenos">1852</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Subqueryable.limit-1853"><a href="#Subqueryable.limit-1853"><span class="linenos">1853</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.limit-1975"><a href="#Subqueryable.limit-1975"><span class="linenos">1975</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Subqueryable.limit-1976"><a href="#Subqueryable.limit-1976"><span class="linenos">1976</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span>
</span></pre></div>
@@ -21037,62 +21537,62 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Subqueryable.with_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.with_-1870"><a href="#Subqueryable.with_-1870"><span class="linenos">1870</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
-</span><span id="Subqueryable.with_-1871"><a href="#Subqueryable.with_-1871"><span class="linenos">1871</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1872"><a href="#Subqueryable.with_-1872"><span class="linenos">1872</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1873"><a href="#Subqueryable.with_-1873"><span class="linenos">1873</span></a> <span class="n">as_</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1874"><a href="#Subqueryable.with_-1874"><span class="linenos">1874</span></a> <span class="n">recursive</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1875"><a href="#Subqueryable.with_-1875"><span class="linenos">1875</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1876"><a href="#Subqueryable.with_-1876"><span class="linenos">1876</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1877"><a href="#Subqueryable.with_-1877"><span class="linenos">1877</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1878"><a href="#Subqueryable.with_-1878"><span class="linenos">1878</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1879"><a href="#Subqueryable.with_-1879"><span class="linenos">1879</span></a> <span class="p">):</span>
-</span><span id="Subqueryable.with_-1880"><a href="#Subqueryable.with_-1880"><span class="linenos">1880</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subqueryable.with_-1881"><a href="#Subqueryable.with_-1881"><span class="linenos">1881</span></a><span class="sd"> Append to or set the common table expressions.</span>
-</span><span id="Subqueryable.with_-1882"><a href="#Subqueryable.with_-1882"><span class="linenos">1882</span></a>
-</span><span id="Subqueryable.with_-1883"><a href="#Subqueryable.with_-1883"><span class="linenos">1883</span></a><span class="sd"> Example:</span>
-</span><span id="Subqueryable.with_-1884"><a href="#Subqueryable.with_-1884"><span class="linenos">1884</span></a><span class="sd"> &gt;&gt;&gt; Select().with_(&quot;tbl2&quot;, as_=&quot;SELECT * FROM tbl&quot;).select(&quot;x&quot;).from_(&quot;tbl2&quot;).sql()</span>
-</span><span id="Subqueryable.with_-1885"><a href="#Subqueryable.with_-1885"><span class="linenos">1885</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
-</span><span id="Subqueryable.with_-1886"><a href="#Subqueryable.with_-1886"><span class="linenos">1886</span></a>
-</span><span id="Subqueryable.with_-1887"><a href="#Subqueryable.with_-1887"><span class="linenos">1887</span></a><span class="sd"> Args:</span>
-</span><span id="Subqueryable.with_-1888"><a href="#Subqueryable.with_-1888"><span class="linenos">1888</span></a><span class="sd"> alias (str | Expression): the SQL code string to parse as the table name.</span>
-</span><span id="Subqueryable.with_-1889"><a href="#Subqueryable.with_-1889"><span class="linenos">1889</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
-</span><span id="Subqueryable.with_-1890"><a href="#Subqueryable.with_-1890"><span class="linenos">1890</span></a><span class="sd"> as_ (str | Expression): the SQL code string to parse as the table expression.</span>
-</span><span id="Subqueryable.with_-1891"><a href="#Subqueryable.with_-1891"><span class="linenos">1891</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Subqueryable.with_-1892"><a href="#Subqueryable.with_-1892"><span class="linenos">1892</span></a><span class="sd"> recursive (bool): set the RECURSIVE part of the expression. Defaults to `False`.</span>
-</span><span id="Subqueryable.with_-1893"><a href="#Subqueryable.with_-1893"><span class="linenos">1893</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Subqueryable.with_-1894"><a href="#Subqueryable.with_-1894"><span class="linenos">1894</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Subqueryable.with_-1895"><a href="#Subqueryable.with_-1895"><span class="linenos">1895</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Subqueryable.with_-1896"><a href="#Subqueryable.with_-1896"><span class="linenos">1896</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Subqueryable.with_-1897"><a href="#Subqueryable.with_-1897"><span class="linenos">1897</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Subqueryable.with_-1898"><a href="#Subqueryable.with_-1898"><span class="linenos">1898</span></a>
-</span><span id="Subqueryable.with_-1899"><a href="#Subqueryable.with_-1899"><span class="linenos">1899</span></a><span class="sd"> Returns:</span>
-</span><span id="Subqueryable.with_-1900"><a href="#Subqueryable.with_-1900"><span class="linenos">1900</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Subqueryable.with_-1901"><a href="#Subqueryable.with_-1901"><span class="linenos">1901</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subqueryable.with_-1902"><a href="#Subqueryable.with_-1902"><span class="linenos">1902</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="Subqueryable.with_-1903"><a href="#Subqueryable.with_-1903"><span class="linenos">1903</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1904"><a href="#Subqueryable.with_-1904"><span class="linenos">1904</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1905"><a href="#Subqueryable.with_-1905"><span class="linenos">1905</span></a> <span class="n">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1906"><a href="#Subqueryable.with_-1906"><span class="linenos">1906</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1907"><a href="#Subqueryable.with_-1907"><span class="linenos">1907</span></a> <span class="p">)</span>
-</span><span id="Subqueryable.with_-1908"><a href="#Subqueryable.with_-1908"><span class="linenos">1908</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="Subqueryable.with_-1909"><a href="#Subqueryable.with_-1909"><span class="linenos">1909</span></a> <span class="n">as_</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1910"><a href="#Subqueryable.with_-1910"><span class="linenos">1910</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1911"><a href="#Subqueryable.with_-1911"><span class="linenos">1911</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1912"><a href="#Subqueryable.with_-1912"><span class="linenos">1912</span></a> <span class="p">)</span>
-</span><span id="Subqueryable.with_-1913"><a href="#Subqueryable.with_-1913"><span class="linenos">1913</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span>
-</span><span id="Subqueryable.with_-1914"><a href="#Subqueryable.with_-1914"><span class="linenos">1914</span></a> <span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1915"><a href="#Subqueryable.with_-1915"><span class="linenos">1915</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1916"><a href="#Subqueryable.with_-1916"><span class="linenos">1916</span></a> <span class="p">)</span>
-</span><span id="Subqueryable.with_-1917"><a href="#Subqueryable.with_-1917"><span class="linenos">1917</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Subqueryable.with_-1918"><a href="#Subqueryable.with_-1918"><span class="linenos">1918</span></a> <span class="n">cte</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1919"><a href="#Subqueryable.with_-1919"><span class="linenos">1919</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1920"><a href="#Subqueryable.with_-1920"><span class="linenos">1920</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;with&quot;</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1921"><a href="#Subqueryable.with_-1921"><span class="linenos">1921</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1922"><a href="#Subqueryable.with_-1922"><span class="linenos">1922</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1923"><a href="#Subqueryable.with_-1923"><span class="linenos">1923</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
-</span><span id="Subqueryable.with_-1924"><a href="#Subqueryable.with_-1924"><span class="linenos">1924</span></a> <span class="n">properties</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="n">recursive</span> <span class="ow">or</span> <span class="kc">False</span><span class="p">},</span>
-</span><span id="Subqueryable.with_-1925"><a href="#Subqueryable.with_-1925"><span class="linenos">1925</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subqueryable.with_-1993"><a href="#Subqueryable.with_-1993"><span class="linenos">1993</span></a> <span class="k">def</span> <span class="nf">with_</span><span class="p">(</span>
+</span><span id="Subqueryable.with_-1994"><a href="#Subqueryable.with_-1994"><span class="linenos">1994</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-1995"><a href="#Subqueryable.with_-1995"><span class="linenos">1995</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-1996"><a href="#Subqueryable.with_-1996"><span class="linenos">1996</span></a> <span class="n">as_</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-1997"><a href="#Subqueryable.with_-1997"><span class="linenos">1997</span></a> <span class="n">recursive</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-1998"><a href="#Subqueryable.with_-1998"><span class="linenos">1998</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-1999"><a href="#Subqueryable.with_-1999"><span class="linenos">1999</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2000"><a href="#Subqueryable.with_-2000"><span class="linenos">2000</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2001"><a href="#Subqueryable.with_-2001"><span class="linenos">2001</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2002"><a href="#Subqueryable.with_-2002"><span class="linenos">2002</span></a> <span class="p">):</span>
+</span><span id="Subqueryable.with_-2003"><a href="#Subqueryable.with_-2003"><span class="linenos">2003</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subqueryable.with_-2004"><a href="#Subqueryable.with_-2004"><span class="linenos">2004</span></a><span class="sd"> Append to or set the common table expressions.</span>
+</span><span id="Subqueryable.with_-2005"><a href="#Subqueryable.with_-2005"><span class="linenos">2005</span></a>
+</span><span id="Subqueryable.with_-2006"><a href="#Subqueryable.with_-2006"><span class="linenos">2006</span></a><span class="sd"> Example:</span>
+</span><span id="Subqueryable.with_-2007"><a href="#Subqueryable.with_-2007"><span class="linenos">2007</span></a><span class="sd"> &gt;&gt;&gt; Select().with_(&quot;tbl2&quot;, as_=&quot;SELECT * FROM tbl&quot;).select(&quot;x&quot;).from_(&quot;tbl2&quot;).sql()</span>
+</span><span id="Subqueryable.with_-2008"><a href="#Subqueryable.with_-2008"><span class="linenos">2008</span></a><span class="sd"> &#39;WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2&#39;</span>
+</span><span id="Subqueryable.with_-2009"><a href="#Subqueryable.with_-2009"><span class="linenos">2009</span></a>
+</span><span id="Subqueryable.with_-2010"><a href="#Subqueryable.with_-2010"><span class="linenos">2010</span></a><span class="sd"> Args:</span>
+</span><span id="Subqueryable.with_-2011"><a href="#Subqueryable.with_-2011"><span class="linenos">2011</span></a><span class="sd"> alias (str | Expression): the SQL code string to parse as the table name.</span>
+</span><span id="Subqueryable.with_-2012"><a href="#Subqueryable.with_-2012"><span class="linenos">2012</span></a><span class="sd"> If an `Expression` instance is passed, this is used as-is.</span>
+</span><span id="Subqueryable.with_-2013"><a href="#Subqueryable.with_-2013"><span class="linenos">2013</span></a><span class="sd"> as_ (str | Expression): the SQL code string to parse as the table expression.</span>
+</span><span id="Subqueryable.with_-2014"><a href="#Subqueryable.with_-2014"><span class="linenos">2014</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Subqueryable.with_-2015"><a href="#Subqueryable.with_-2015"><span class="linenos">2015</span></a><span class="sd"> recursive (bool): set the RECURSIVE part of the expression. Defaults to `False`.</span>
+</span><span id="Subqueryable.with_-2016"><a href="#Subqueryable.with_-2016"><span class="linenos">2016</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Subqueryable.with_-2017"><a href="#Subqueryable.with_-2017"><span class="linenos">2017</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Subqueryable.with_-2018"><a href="#Subqueryable.with_-2018"><span class="linenos">2018</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Subqueryable.with_-2019"><a href="#Subqueryable.with_-2019"><span class="linenos">2019</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Subqueryable.with_-2020"><a href="#Subqueryable.with_-2020"><span class="linenos">2020</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Subqueryable.with_-2021"><a href="#Subqueryable.with_-2021"><span class="linenos">2021</span></a>
+</span><span id="Subqueryable.with_-2022"><a href="#Subqueryable.with_-2022"><span class="linenos">2022</span></a><span class="sd"> Returns:</span>
+</span><span id="Subqueryable.with_-2023"><a href="#Subqueryable.with_-2023"><span class="linenos">2023</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Subqueryable.with_-2024"><a href="#Subqueryable.with_-2024"><span class="linenos">2024</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subqueryable.with_-2025"><a href="#Subqueryable.with_-2025"><span class="linenos">2025</span></a> <span class="n">alias_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="Subqueryable.with_-2026"><a href="#Subqueryable.with_-2026"><span class="linenos">2026</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2027"><a href="#Subqueryable.with_-2027"><span class="linenos">2027</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2028"><a href="#Subqueryable.with_-2028"><span class="linenos">2028</span></a> <span class="n">into</span><span class="o">=</span><span class="n">TableAlias</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2029"><a href="#Subqueryable.with_-2029"><span class="linenos">2029</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2030"><a href="#Subqueryable.with_-2030"><span class="linenos">2030</span></a> <span class="p">)</span>
+</span><span id="Subqueryable.with_-2031"><a href="#Subqueryable.with_-2031"><span class="linenos">2031</span></a> <span class="n">as_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="Subqueryable.with_-2032"><a href="#Subqueryable.with_-2032"><span class="linenos">2032</span></a> <span class="n">as_</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2033"><a href="#Subqueryable.with_-2033"><span class="linenos">2033</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2034"><a href="#Subqueryable.with_-2034"><span class="linenos">2034</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2035"><a href="#Subqueryable.with_-2035"><span class="linenos">2035</span></a> <span class="p">)</span>
+</span><span id="Subqueryable.with_-2036"><a href="#Subqueryable.with_-2036"><span class="linenos">2036</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="n">CTE</span><span class="p">(</span>
+</span><span id="Subqueryable.with_-2037"><a href="#Subqueryable.with_-2037"><span class="linenos">2037</span></a> <span class="n">this</span><span class="o">=</span><span class="n">as_expression</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2038"><a href="#Subqueryable.with_-2038"><span class="linenos">2038</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias_expression</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2039"><a href="#Subqueryable.with_-2039"><span class="linenos">2039</span></a> <span class="p">)</span>
+</span><span id="Subqueryable.with_-2040"><a href="#Subqueryable.with_-2040"><span class="linenos">2040</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Subqueryable.with_-2041"><a href="#Subqueryable.with_-2041"><span class="linenos">2041</span></a> <span class="n">cte</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2042"><a href="#Subqueryable.with_-2042"><span class="linenos">2042</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2043"><a href="#Subqueryable.with_-2043"><span class="linenos">2043</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;with&quot;</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2044"><a href="#Subqueryable.with_-2044"><span class="linenos">2044</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2045"><a href="#Subqueryable.with_-2045"><span class="linenos">2045</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2046"><a href="#Subqueryable.with_-2046"><span class="linenos">2046</span></a> <span class="n">into</span><span class="o">=</span><span class="n">With</span><span class="p">,</span>
+</span><span id="Subqueryable.with_-2047"><a href="#Subqueryable.with_-2047"><span class="linenos">2047</span></a> <span class="n">properties</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;recursive&quot;</span><span class="p">:</span> <span class="n">recursive</span> <span class="ow">or</span> <span class="kc">False</span><span class="p">},</span>
+</span><span id="Subqueryable.with_-2048"><a href="#Subqueryable.with_-2048"><span class="linenos">2048</span></a> <span class="p">)</span>
</span></pre></div>
@@ -21195,26 +21695,26 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Table-1949"><a href="#Table-1949"><span class="linenos">1949</span></a><span class="k">class</span> <span class="nc">Table</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Table-1950"><a href="#Table-1950"><span class="linenos">1950</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Table-1951"><a href="#Table-1951"><span class="linenos">1951</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Table-1952"><a href="#Table-1952"><span class="linenos">1952</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1953"><a href="#Table-1953"><span class="linenos">1953</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1954"><a href="#Table-1954"><span class="linenos">1954</span></a> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1955"><a href="#Table-1955"><span class="linenos">1955</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1956"><a href="#Table-1956"><span class="linenos">1956</span></a> <span class="s2">&quot;joins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1957"><a href="#Table-1957"><span class="linenos">1957</span></a> <span class="s2">&quot;pivots&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1958"><a href="#Table-1958"><span class="linenos">1958</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1959"><a href="#Table-1959"><span class="linenos">1959</span></a> <span class="s2">&quot;system_time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Table-1960"><a href="#Table-1960"><span class="linenos">1960</span></a> <span class="p">}</span>
-</span><span id="Table-1961"><a href="#Table-1961"><span class="linenos">1961</span></a>
-</span><span id="Table-1962"><a href="#Table-1962"><span class="linenos">1962</span></a> <span class="nd">@property</span>
-</span><span id="Table-1963"><a href="#Table-1963"><span class="linenos">1963</span></a> <span class="k">def</span> <span class="nf">db</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="Table-1964"><a href="#Table-1964"><span class="linenos">1964</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">)</span>
-</span><span id="Table-1965"><a href="#Table-1965"><span class="linenos">1965</span></a>
-</span><span id="Table-1966"><a href="#Table-1966"><span class="linenos">1966</span></a> <span class="nd">@property</span>
-</span><span id="Table-1967"><a href="#Table-1967"><span class="linenos">1967</span></a> <span class="k">def</span> <span class="nf">catalog</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="Table-1968"><a href="#Table-1968"><span class="linenos">1968</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Table-2072"><a href="#Table-2072"><span class="linenos">2072</span></a><span class="k">class</span> <span class="nc">Table</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Table-2073"><a href="#Table-2073"><span class="linenos">2073</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Table-2074"><a href="#Table-2074"><span class="linenos">2074</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Table-2075"><a href="#Table-2075"><span class="linenos">2075</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2076"><a href="#Table-2076"><span class="linenos">2076</span></a> <span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2077"><a href="#Table-2077"><span class="linenos">2077</span></a> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2078"><a href="#Table-2078"><span class="linenos">2078</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2079"><a href="#Table-2079"><span class="linenos">2079</span></a> <span class="s2">&quot;joins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2080"><a href="#Table-2080"><span class="linenos">2080</span></a> <span class="s2">&quot;pivots&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2081"><a href="#Table-2081"><span class="linenos">2081</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2082"><a href="#Table-2082"><span class="linenos">2082</span></a> <span class="s2">&quot;system_time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Table-2083"><a href="#Table-2083"><span class="linenos">2083</span></a> <span class="p">}</span>
+</span><span id="Table-2084"><a href="#Table-2084"><span class="linenos">2084</span></a>
+</span><span id="Table-2085"><a href="#Table-2085"><span class="linenos">2085</span></a> <span class="nd">@property</span>
+</span><span id="Table-2086"><a href="#Table-2086"><span class="linenos">2086</span></a> <span class="k">def</span> <span class="nf">db</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="Table-2087"><a href="#Table-2087"><span class="linenos">2087</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">)</span>
+</span><span id="Table-2088"><a href="#Table-2088"><span class="linenos">2088</span></a>
+</span><span id="Table-2089"><a href="#Table-2089"><span class="linenos">2089</span></a> <span class="nd">@property</span>
+</span><span id="Table-2090"><a href="#Table-2090"><span class="linenos">2090</span></a> <span class="k">def</span> <span class="nf">catalog</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="Table-2091"><a href="#Table-2091"><span class="linenos">2091</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -21277,12 +21777,12 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#SystemTime"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SystemTime-1972"><a href="#SystemTime-1972"><span class="linenos">1972</span></a><span class="k">class</span> <span class="nc">SystemTime</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="SystemTime-1973"><a href="#SystemTime-1973"><span class="linenos">1973</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="SystemTime-1974"><a href="#SystemTime-1974"><span class="linenos">1974</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="SystemTime-1975"><a href="#SystemTime-1975"><span class="linenos">1975</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="SystemTime-1976"><a href="#SystemTime-1976"><span class="linenos">1976</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="SystemTime-1977"><a href="#SystemTime-1977"><span class="linenos">1977</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SystemTime-2095"><a href="#SystemTime-2095"><span class="linenos">2095</span></a><span class="k">class</span> <span class="nc">SystemTime</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="SystemTime-2096"><a href="#SystemTime-2096"><span class="linenos">2096</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="SystemTime-2097"><a href="#SystemTime-2097"><span class="linenos">2097</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="SystemTime-2098"><a href="#SystemTime-2098"><span class="linenos">2098</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="SystemTime-2099"><a href="#SystemTime-2099"><span class="linenos">2099</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="SystemTime-2100"><a href="#SystemTime-2100"><span class="linenos">2100</span></a> <span class="p">}</span>
</span></pre></div>
@@ -21345,94 +21845,94 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Union"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Union-1980"><a href="#Union-1980"><span class="linenos">1980</span></a><span class="k">class</span> <span class="nc">Union</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Union-1981"><a href="#Union-1981"><span class="linenos">1981</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Union-1982"><a href="#Union-1982"><span class="linenos">1982</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Union-1983"><a href="#Union-1983"><span class="linenos">1983</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Union-1984"><a href="#Union-1984"><span class="linenos">1984</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Union-1985"><a href="#Union-1985"><span class="linenos">1985</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Union-1986"><a href="#Union-1986"><span class="linenos">1986</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="Union-1987"><a href="#Union-1987"><span class="linenos">1987</span></a> <span class="p">}</span>
-</span><span id="Union-1988"><a href="#Union-1988"><span class="linenos">1988</span></a>
-</span><span id="Union-1989"><a href="#Union-1989"><span class="linenos">1989</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Union-1990"><a href="#Union-1990"><span class="linenos">1990</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Union-1991"><a href="#Union-1991"><span class="linenos">1991</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Union-1992"><a href="#Union-1992"><span class="linenos">1992</span></a>
-</span><span id="Union-1993"><a href="#Union-1993"><span class="linenos">1993</span></a><span class="sd"> Example:</span>
-</span><span id="Union-1994"><a href="#Union-1994"><span class="linenos">1994</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;1&quot;).union(select(&quot;1&quot;)).limit(1).sql()</span>
-</span><span id="Union-1995"><a href="#Union-1995"><span class="linenos">1995</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
-</span><span id="Union-1996"><a href="#Union-1996"><span class="linenos">1996</span></a>
-</span><span id="Union-1997"><a href="#Union-1997"><span class="linenos">1997</span></a><span class="sd"> Args:</span>
-</span><span id="Union-1998"><a href="#Union-1998"><span class="linenos">1998</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="Union-1999"><a href="#Union-1999"><span class="linenos">1999</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Union-2000"><a href="#Union-2000"><span class="linenos">2000</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Union-2001"><a href="#Union-2001"><span class="linenos">2001</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Union-2002"><a href="#Union-2002"><span class="linenos">2002</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Union-2003"><a href="#Union-2003"><span class="linenos">2003</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Union-2004"><a href="#Union-2004"><span class="linenos">2004</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Union-2005"><a href="#Union-2005"><span class="linenos">2005</span></a>
-</span><span id="Union-2006"><a href="#Union-2006"><span class="linenos">2006</span></a><span class="sd"> Returns:</span>
-</span><span id="Union-2007"><a href="#Union-2007"><span class="linenos">2007</span></a><span class="sd"> Select: The limited subqueryable.</span>
-</span><span id="Union-2008"><a href="#Union-2008"><span class="linenos">2008</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union-2009"><a href="#Union-2009"><span class="linenos">2009</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Union-2010"><a href="#Union-2010"><span class="linenos">2010</span></a> <span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
-</span><span id="Union-2011"><a href="#Union-2011"><span class="linenos">2011</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_l_0&quot;</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="Union-2012"><a href="#Union-2012"><span class="linenos">2012</span></a> <span class="o">.</span><span class="n">limit</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="n">dialect</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><span id="Union-2013"><a href="#Union-2013"><span class="linenos">2013</span></a> <span class="p">)</span>
-</span><span id="Union-2014"><a href="#Union-2014"><span class="linenos">2014</span></a>
-</span><span id="Union-2015"><a href="#Union-2015"><span class="linenos">2015</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Union-2016"><a href="#Union-2016"><span class="linenos">2016</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Union-2017"><a href="#Union-2017"><span class="linenos">2017</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Union-2018"><a href="#Union-2018"><span class="linenos">2018</span></a> <span class="n">append</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="Union-2019"><a href="#Union-2019"><span class="linenos">2019</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="Union-2020"><a href="#Union-2020"><span class="linenos">2020</span></a> <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><span id="Union-2021"><a href="#Union-2021"><span class="linenos">2021</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Union-2022"><a href="#Union-2022"><span class="linenos">2022</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
-</span><span id="Union-2023"><a href="#Union-2023"><span class="linenos">2023</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Append to or set the SELECT of the union recursively.</span>
-</span><span id="Union-2024"><a href="#Union-2024"><span class="linenos">2024</span></a>
-</span><span id="Union-2025"><a href="#Union-2025"><span class="linenos">2025</span></a><span class="sd"> Example:</span>
-</span><span id="Union-2026"><a href="#Union-2026"><span class="linenos">2026</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="Union-2027"><a href="#Union-2027"><span class="linenos">2027</span></a><span class="sd"> &gt;&gt;&gt; parse_one(&quot;select a from x union select a from y union select a from z&quot;).select(&quot;b&quot;).sql()</span>
-</span><span id="Union-2028"><a href="#Union-2028"><span class="linenos">2028</span></a><span class="sd"> &#39;SELECT a, b FROM x UNION SELECT a, b FROM y UNION SELECT a, b FROM z&#39;</span>
-</span><span id="Union-2029"><a href="#Union-2029"><span class="linenos">2029</span></a>
-</span><span id="Union-2030"><a href="#Union-2030"><span class="linenos">2030</span></a><span class="sd"> Args:</span>
-</span><span id="Union-2031"><a href="#Union-2031"><span class="linenos">2031</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Union-2032"><a href="#Union-2032"><span class="linenos">2032</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Union-2033"><a href="#Union-2033"><span class="linenos">2033</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Union-2034"><a href="#Union-2034"><span class="linenos">2034</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Union-2035"><a href="#Union-2035"><span class="linenos">2035</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Union-2036"><a href="#Union-2036"><span class="linenos">2036</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Union-2037"><a href="#Union-2037"><span class="linenos">2037</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Union-2038"><a href="#Union-2038"><span class="linenos">2038</span></a>
-</span><span id="Union-2039"><a href="#Union-2039"><span class="linenos">2039</span></a><span class="sd"> Returns:</span>
-</span><span id="Union-2040"><a href="#Union-2040"><span class="linenos">2040</span></a><span class="sd"> Union: the modified expression.</span>
-</span><span id="Union-2041"><a href="#Union-2041"><span class="linenos">2041</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union-2042"><a href="#Union-2042"><span class="linenos">2042</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span>
-</span><span id="Union-2043"><a href="#Union-2043"><span class="linenos">2043</span></a> <span class="n">this</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Union-2044"><a href="#Union-2044"><span class="linenos">2044</span></a> <span class="n">this</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
-</span><span id="Union-2045"><a href="#Union-2045"><span class="linenos">2045</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Union-2046"><a href="#Union-2046"><span class="linenos">2046</span></a> <span class="p">)</span>
-</span><span id="Union-2047"><a href="#Union-2047"><span class="linenos">2047</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Union-2048"><a href="#Union-2048"><span class="linenos">2048</span></a>
-</span><span id="Union-2049"><a href="#Union-2049"><span class="linenos">2049</span></a> <span class="nd">@property</span>
-</span><span id="Union-2050"><a href="#Union-2050"><span class="linenos">2050</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Union-2051"><a href="#Union-2051"><span class="linenos">2051</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">named_selects</span>
-</span><span id="Union-2052"><a href="#Union-2052"><span class="linenos">2052</span></a>
-</span><span id="Union-2053"><a href="#Union-2053"><span class="linenos">2053</span></a> <span class="nd">@property</span>
-</span><span id="Union-2054"><a href="#Union-2054"><span class="linenos">2054</span></a> <span class="k">def</span> <span class="nf">is_star</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="Union-2055"><a href="#Union-2055"><span class="linenos">2055</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</span>
-</span><span id="Union-2056"><a href="#Union-2056"><span class="linenos">2056</span></a>
-</span><span id="Union-2057"><a href="#Union-2057"><span class="linenos">2057</span></a> <span class="nd">@property</span>
-</span><span id="Union-2058"><a href="#Union-2058"><span class="linenos">2058</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Union-2059"><a href="#Union-2059"><span class="linenos">2059</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">selects</span>
-</span><span id="Union-2060"><a href="#Union-2060"><span class="linenos">2060</span></a>
-</span><span id="Union-2061"><a href="#Union-2061"><span class="linenos">2061</span></a> <span class="nd">@property</span>
-</span><span id="Union-2062"><a href="#Union-2062"><span class="linenos">2062</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Union-2063"><a href="#Union-2063"><span class="linenos">2063</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Union-2064"><a href="#Union-2064"><span class="linenos">2064</span></a>
-</span><span id="Union-2065"><a href="#Union-2065"><span class="linenos">2065</span></a> <span class="nd">@property</span>
-</span><span id="Union-2066"><a href="#Union-2066"><span class="linenos">2066</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Union-2067"><a href="#Union-2067"><span class="linenos">2067</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Union-2103"><a href="#Union-2103"><span class="linenos">2103</span></a><span class="k">class</span> <span class="nc">Union</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Union-2104"><a href="#Union-2104"><span class="linenos">2104</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Union-2105"><a href="#Union-2105"><span class="linenos">2105</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Union-2106"><a href="#Union-2106"><span class="linenos">2106</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Union-2107"><a href="#Union-2107"><span class="linenos">2107</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Union-2108"><a href="#Union-2108"><span class="linenos">2108</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Union-2109"><a href="#Union-2109"><span class="linenos">2109</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="Union-2110"><a href="#Union-2110"><span class="linenos">2110</span></a> <span class="p">}</span>
+</span><span id="Union-2111"><a href="#Union-2111"><span class="linenos">2111</span></a>
+</span><span id="Union-2112"><a href="#Union-2112"><span class="linenos">2112</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Union-2113"><a href="#Union-2113"><span class="linenos">2113</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Union-2114"><a href="#Union-2114"><span class="linenos">2114</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Union-2115"><a href="#Union-2115"><span class="linenos">2115</span></a>
+</span><span id="Union-2116"><a href="#Union-2116"><span class="linenos">2116</span></a><span class="sd"> Example:</span>
+</span><span id="Union-2117"><a href="#Union-2117"><span class="linenos">2117</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;1&quot;).union(select(&quot;1&quot;)).limit(1).sql()</span>
+</span><span id="Union-2118"><a href="#Union-2118"><span class="linenos">2118</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
+</span><span id="Union-2119"><a href="#Union-2119"><span class="linenos">2119</span></a>
+</span><span id="Union-2120"><a href="#Union-2120"><span class="linenos">2120</span></a><span class="sd"> Args:</span>
+</span><span id="Union-2121"><a href="#Union-2121"><span class="linenos">2121</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="Union-2122"><a href="#Union-2122"><span class="linenos">2122</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Union-2123"><a href="#Union-2123"><span class="linenos">2123</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Union-2124"><a href="#Union-2124"><span class="linenos">2124</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Union-2125"><a href="#Union-2125"><span class="linenos">2125</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Union-2126"><a href="#Union-2126"><span class="linenos">2126</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Union-2127"><a href="#Union-2127"><span class="linenos">2127</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Union-2128"><a href="#Union-2128"><span class="linenos">2128</span></a>
+</span><span id="Union-2129"><a href="#Union-2129"><span class="linenos">2129</span></a><span class="sd"> Returns:</span>
+</span><span id="Union-2130"><a href="#Union-2130"><span class="linenos">2130</span></a><span class="sd"> Select: The limited subqueryable.</span>
+</span><span id="Union-2131"><a href="#Union-2131"><span class="linenos">2131</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union-2132"><a href="#Union-2132"><span class="linenos">2132</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Union-2133"><a href="#Union-2133"><span class="linenos">2133</span></a> <span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
+</span><span id="Union-2134"><a href="#Union-2134"><span class="linenos">2134</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_l_0&quot;</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="Union-2135"><a href="#Union-2135"><span class="linenos">2135</span></a> <span class="o">.</span><span class="n">limit</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="n">dialect</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><span id="Union-2136"><a href="#Union-2136"><span class="linenos">2136</span></a> <span class="p">)</span>
+</span><span id="Union-2137"><a href="#Union-2137"><span class="linenos">2137</span></a>
+</span><span id="Union-2138"><a href="#Union-2138"><span class="linenos">2138</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Union-2139"><a href="#Union-2139"><span class="linenos">2139</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Union-2140"><a href="#Union-2140"><span class="linenos">2140</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Union-2141"><a href="#Union-2141"><span class="linenos">2141</span></a> <span class="n">append</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="Union-2142"><a href="#Union-2142"><span class="linenos">2142</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="Union-2143"><a href="#Union-2143"><span class="linenos">2143</span></a> <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><span id="Union-2144"><a href="#Union-2144"><span class="linenos">2144</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Union-2145"><a href="#Union-2145"><span class="linenos">2145</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
+</span><span id="Union-2146"><a href="#Union-2146"><span class="linenos">2146</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Append to or set the SELECT of the union recursively.</span>
+</span><span id="Union-2147"><a href="#Union-2147"><span class="linenos">2147</span></a>
+</span><span id="Union-2148"><a href="#Union-2148"><span class="linenos">2148</span></a><span class="sd"> Example:</span>
+</span><span id="Union-2149"><a href="#Union-2149"><span class="linenos">2149</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="Union-2150"><a href="#Union-2150"><span class="linenos">2150</span></a><span class="sd"> &gt;&gt;&gt; parse_one(&quot;select a from x union select a from y union select a from z&quot;).select(&quot;b&quot;).sql()</span>
+</span><span id="Union-2151"><a href="#Union-2151"><span class="linenos">2151</span></a><span class="sd"> &#39;SELECT a, b FROM x UNION SELECT a, b FROM y UNION SELECT a, b FROM z&#39;</span>
+</span><span id="Union-2152"><a href="#Union-2152"><span class="linenos">2152</span></a>
+</span><span id="Union-2153"><a href="#Union-2153"><span class="linenos">2153</span></a><span class="sd"> Args:</span>
+</span><span id="Union-2154"><a href="#Union-2154"><span class="linenos">2154</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Union-2155"><a href="#Union-2155"><span class="linenos">2155</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Union-2156"><a href="#Union-2156"><span class="linenos">2156</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Union-2157"><a href="#Union-2157"><span class="linenos">2157</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Union-2158"><a href="#Union-2158"><span class="linenos">2158</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Union-2159"><a href="#Union-2159"><span class="linenos">2159</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Union-2160"><a href="#Union-2160"><span class="linenos">2160</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Union-2161"><a href="#Union-2161"><span class="linenos">2161</span></a>
+</span><span id="Union-2162"><a href="#Union-2162"><span class="linenos">2162</span></a><span class="sd"> Returns:</span>
+</span><span id="Union-2163"><a href="#Union-2163"><span class="linenos">2163</span></a><span class="sd"> Union: the modified expression.</span>
+</span><span id="Union-2164"><a href="#Union-2164"><span class="linenos">2164</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union-2165"><a href="#Union-2165"><span class="linenos">2165</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span>
+</span><span id="Union-2166"><a href="#Union-2166"><span class="linenos">2166</span></a> <span class="n">this</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Union-2167"><a href="#Union-2167"><span class="linenos">2167</span></a> <span class="n">this</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
+</span><span id="Union-2168"><a href="#Union-2168"><span class="linenos">2168</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Union-2169"><a href="#Union-2169"><span class="linenos">2169</span></a> <span class="p">)</span>
+</span><span id="Union-2170"><a href="#Union-2170"><span class="linenos">2170</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Union-2171"><a href="#Union-2171"><span class="linenos">2171</span></a>
+</span><span id="Union-2172"><a href="#Union-2172"><span class="linenos">2172</span></a> <span class="nd">@property</span>
+</span><span id="Union-2173"><a href="#Union-2173"><span class="linenos">2173</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Union-2174"><a href="#Union-2174"><span class="linenos">2174</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">named_selects</span>
+</span><span id="Union-2175"><a href="#Union-2175"><span class="linenos">2175</span></a>
+</span><span id="Union-2176"><a href="#Union-2176"><span class="linenos">2176</span></a> <span class="nd">@property</span>
+</span><span id="Union-2177"><a href="#Union-2177"><span class="linenos">2177</span></a> <span class="k">def</span> <span class="nf">is_star</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="Union-2178"><a href="#Union-2178"><span class="linenos">2178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</span>
+</span><span id="Union-2179"><a href="#Union-2179"><span class="linenos">2179</span></a>
+</span><span id="Union-2180"><a href="#Union-2180"><span class="linenos">2180</span></a> <span class="nd">@property</span>
+</span><span id="Union-2181"><a href="#Union-2181"><span class="linenos">2181</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Union-2182"><a href="#Union-2182"><span class="linenos">2182</span></a> <span class="k">return</span> <span class="bp">self</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="o">.</span><span class="n">selects</span>
+</span><span id="Union-2183"><a href="#Union-2183"><span class="linenos">2183</span></a>
+</span><span id="Union-2184"><a href="#Union-2184"><span class="linenos">2184</span></a> <span class="nd">@property</span>
+</span><span id="Union-2185"><a href="#Union-2185"><span class="linenos">2185</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Union-2186"><a href="#Union-2186"><span class="linenos">2186</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Union-2187"><a href="#Union-2187"><span class="linenos">2187</span></a>
+</span><span id="Union-2188"><a href="#Union-2188"><span class="linenos">2188</span></a> <span class="nd">@property</span>
+</span><span id="Union-2189"><a href="#Union-2189"><span class="linenos">2189</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Union-2190"><a href="#Union-2190"><span class="linenos">2190</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
</span></pre></div>
@@ -21449,31 +21949,31 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Union.limit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Union.limit-1989"><a href="#Union.limit-1989"><span class="linenos">1989</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Union.limit-1990"><a href="#Union.limit-1990"><span class="linenos">1990</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Union.limit-1991"><a href="#Union.limit-1991"><span class="linenos">1991</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Union.limit-1992"><a href="#Union.limit-1992"><span class="linenos">1992</span></a>
-</span><span id="Union.limit-1993"><a href="#Union.limit-1993"><span class="linenos">1993</span></a><span class="sd"> Example:</span>
-</span><span id="Union.limit-1994"><a href="#Union.limit-1994"><span class="linenos">1994</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;1&quot;).union(select(&quot;1&quot;)).limit(1).sql()</span>
-</span><span id="Union.limit-1995"><a href="#Union.limit-1995"><span class="linenos">1995</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
-</span><span id="Union.limit-1996"><a href="#Union.limit-1996"><span class="linenos">1996</span></a>
-</span><span id="Union.limit-1997"><a href="#Union.limit-1997"><span class="linenos">1997</span></a><span class="sd"> Args:</span>
-</span><span id="Union.limit-1998"><a href="#Union.limit-1998"><span class="linenos">1998</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="Union.limit-1999"><a href="#Union.limit-1999"><span class="linenos">1999</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Union.limit-2000"><a href="#Union.limit-2000"><span class="linenos">2000</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Union.limit-2001"><a href="#Union.limit-2001"><span class="linenos">2001</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Union.limit-2002"><a href="#Union.limit-2002"><span class="linenos">2002</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Union.limit-2003"><a href="#Union.limit-2003"><span class="linenos">2003</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Union.limit-2004"><a href="#Union.limit-2004"><span class="linenos">2004</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Union.limit-2005"><a href="#Union.limit-2005"><span class="linenos">2005</span></a>
-</span><span id="Union.limit-2006"><a href="#Union.limit-2006"><span class="linenos">2006</span></a><span class="sd"> Returns:</span>
-</span><span id="Union.limit-2007"><a href="#Union.limit-2007"><span class="linenos">2007</span></a><span class="sd"> Select: The limited subqueryable.</span>
-</span><span id="Union.limit-2008"><a href="#Union.limit-2008"><span class="linenos">2008</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union.limit-2009"><a href="#Union.limit-2009"><span class="linenos">2009</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Union.limit-2010"><a href="#Union.limit-2010"><span class="linenos">2010</span></a> <span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
-</span><span id="Union.limit-2011"><a href="#Union.limit-2011"><span class="linenos">2011</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_l_0&quot;</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="Union.limit-2012"><a href="#Union.limit-2012"><span class="linenos">2012</span></a> <span class="o">.</span><span class="n">limit</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="n">dialect</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><span id="Union.limit-2013"><a href="#Union.limit-2013"><span class="linenos">2013</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Union.limit-2112"><a href="#Union.limit-2112"><span class="linenos">2112</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Union.limit-2113"><a href="#Union.limit-2113"><span class="linenos">2113</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Union.limit-2114"><a href="#Union.limit-2114"><span class="linenos">2114</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Union.limit-2115"><a href="#Union.limit-2115"><span class="linenos">2115</span></a>
+</span><span id="Union.limit-2116"><a href="#Union.limit-2116"><span class="linenos">2116</span></a><span class="sd"> Example:</span>
+</span><span id="Union.limit-2117"><a href="#Union.limit-2117"><span class="linenos">2117</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;1&quot;).union(select(&quot;1&quot;)).limit(1).sql()</span>
+</span><span id="Union.limit-2118"><a href="#Union.limit-2118"><span class="linenos">2118</span></a><span class="sd"> &#39;SELECT * FROM (SELECT 1 UNION SELECT 1) AS _l_0 LIMIT 1&#39;</span>
+</span><span id="Union.limit-2119"><a href="#Union.limit-2119"><span class="linenos">2119</span></a>
+</span><span id="Union.limit-2120"><a href="#Union.limit-2120"><span class="linenos">2120</span></a><span class="sd"> Args:</span>
+</span><span id="Union.limit-2121"><a href="#Union.limit-2121"><span class="linenos">2121</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="Union.limit-2122"><a href="#Union.limit-2122"><span class="linenos">2122</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Union.limit-2123"><a href="#Union.limit-2123"><span class="linenos">2123</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Union.limit-2124"><a href="#Union.limit-2124"><span class="linenos">2124</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Union.limit-2125"><a href="#Union.limit-2125"><span class="linenos">2125</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Union.limit-2126"><a href="#Union.limit-2126"><span class="linenos">2126</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Union.limit-2127"><a href="#Union.limit-2127"><span class="linenos">2127</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Union.limit-2128"><a href="#Union.limit-2128"><span class="linenos">2128</span></a>
+</span><span id="Union.limit-2129"><a href="#Union.limit-2129"><span class="linenos">2129</span></a><span class="sd"> Returns:</span>
+</span><span id="Union.limit-2130"><a href="#Union.limit-2130"><span class="linenos">2130</span></a><span class="sd"> Select: The limited subqueryable.</span>
+</span><span id="Union.limit-2131"><a href="#Union.limit-2131"><span class="linenos">2131</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union.limit-2132"><a href="#Union.limit-2132"><span class="linenos">2132</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Union.limit-2133"><a href="#Union.limit-2133"><span class="linenos">2133</span></a> <span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
+</span><span id="Union.limit-2134"><a href="#Union.limit-2134"><span class="linenos">2134</span></a> <span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;_l_0&quot;</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="Union.limit-2135"><a href="#Union.limit-2135"><span class="linenos">2135</span></a> <span class="o">.</span><span class="n">limit</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="n">dialect</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><span id="Union.limit-2136"><a href="#Union.limit-2136"><span class="linenos">2136</span></a> <span class="p">)</span>
</span></pre></div>
@@ -21521,39 +22021,39 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Union.select"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Union.select-2015"><a href="#Union.select-2015"><span class="linenos">2015</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Union.select-2016"><a href="#Union.select-2016"><span class="linenos">2016</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Union.select-2017"><a href="#Union.select-2017"><span class="linenos">2017</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Union.select-2018"><a href="#Union.select-2018"><span class="linenos">2018</span></a> <span class="n">append</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="Union.select-2019"><a href="#Union.select-2019"><span class="linenos">2019</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="Union.select-2020"><a href="#Union.select-2020"><span class="linenos">2020</span></a> <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><span id="Union.select-2021"><a href="#Union.select-2021"><span class="linenos">2021</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Union.select-2022"><a href="#Union.select-2022"><span class="linenos">2022</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
-</span><span id="Union.select-2023"><a href="#Union.select-2023"><span class="linenos">2023</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Append to or set the SELECT of the union recursively.</span>
-</span><span id="Union.select-2024"><a href="#Union.select-2024"><span class="linenos">2024</span></a>
-</span><span id="Union.select-2025"><a href="#Union.select-2025"><span class="linenos">2025</span></a><span class="sd"> Example:</span>
-</span><span id="Union.select-2026"><a href="#Union.select-2026"><span class="linenos">2026</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="Union.select-2027"><a href="#Union.select-2027"><span class="linenos">2027</span></a><span class="sd"> &gt;&gt;&gt; parse_one(&quot;select a from x union select a from y union select a from z&quot;).select(&quot;b&quot;).sql()</span>
-</span><span id="Union.select-2028"><a href="#Union.select-2028"><span class="linenos">2028</span></a><span class="sd"> &#39;SELECT a, b FROM x UNION SELECT a, b FROM y UNION SELECT a, b FROM z&#39;</span>
-</span><span id="Union.select-2029"><a href="#Union.select-2029"><span class="linenos">2029</span></a>
-</span><span id="Union.select-2030"><a href="#Union.select-2030"><span class="linenos">2030</span></a><span class="sd"> Args:</span>
-</span><span id="Union.select-2031"><a href="#Union.select-2031"><span class="linenos">2031</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Union.select-2032"><a href="#Union.select-2032"><span class="linenos">2032</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Union.select-2033"><a href="#Union.select-2033"><span class="linenos">2033</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Union.select-2034"><a href="#Union.select-2034"><span class="linenos">2034</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Union.select-2035"><a href="#Union.select-2035"><span class="linenos">2035</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Union.select-2036"><a href="#Union.select-2036"><span class="linenos">2036</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Union.select-2037"><a href="#Union.select-2037"><span class="linenos">2037</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Union.select-2038"><a href="#Union.select-2038"><span class="linenos">2038</span></a>
-</span><span id="Union.select-2039"><a href="#Union.select-2039"><span class="linenos">2039</span></a><span class="sd"> Returns:</span>
-</span><span id="Union.select-2040"><a href="#Union.select-2040"><span class="linenos">2040</span></a><span class="sd"> Union: the modified expression.</span>
-</span><span id="Union.select-2041"><a href="#Union.select-2041"><span class="linenos">2041</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Union.select-2042"><a href="#Union.select-2042"><span class="linenos">2042</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span>
-</span><span id="Union.select-2043"><a href="#Union.select-2043"><span class="linenos">2043</span></a> <span class="n">this</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Union.select-2044"><a href="#Union.select-2044"><span class="linenos">2044</span></a> <span class="n">this</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
-</span><span id="Union.select-2045"><a href="#Union.select-2045"><span class="linenos">2045</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
-</span><span id="Union.select-2046"><a href="#Union.select-2046"><span class="linenos">2046</span></a> <span class="p">)</span>
-</span><span id="Union.select-2047"><a href="#Union.select-2047"><span class="linenos">2047</span></a> <span class="k">return</span> <span class="n">this</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Union.select-2138"><a href="#Union.select-2138"><span class="linenos">2138</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Union.select-2139"><a href="#Union.select-2139"><span class="linenos">2139</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Union.select-2140"><a href="#Union.select-2140"><span class="linenos">2140</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Union.select-2141"><a href="#Union.select-2141"><span class="linenos">2141</span></a> <span class="n">append</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="Union.select-2142"><a href="#Union.select-2142"><span class="linenos">2142</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="Union.select-2143"><a href="#Union.select-2143"><span class="linenos">2143</span></a> <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><span id="Union.select-2144"><a href="#Union.select-2144"><span class="linenos">2144</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Union.select-2145"><a href="#Union.select-2145"><span class="linenos">2145</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">:</span>
+</span><span id="Union.select-2146"><a href="#Union.select-2146"><span class="linenos">2146</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Append to or set the SELECT of the union recursively.</span>
+</span><span id="Union.select-2147"><a href="#Union.select-2147"><span class="linenos">2147</span></a>
+</span><span id="Union.select-2148"><a href="#Union.select-2148"><span class="linenos">2148</span></a><span class="sd"> Example:</span>
+</span><span id="Union.select-2149"><a href="#Union.select-2149"><span class="linenos">2149</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="Union.select-2150"><a href="#Union.select-2150"><span class="linenos">2150</span></a><span class="sd"> &gt;&gt;&gt; parse_one(&quot;select a from x union select a from y union select a from z&quot;).select(&quot;b&quot;).sql()</span>
+</span><span id="Union.select-2151"><a href="#Union.select-2151"><span class="linenos">2151</span></a><span class="sd"> &#39;SELECT a, b FROM x UNION SELECT a, b FROM y UNION SELECT a, b FROM z&#39;</span>
+</span><span id="Union.select-2152"><a href="#Union.select-2152"><span class="linenos">2152</span></a>
+</span><span id="Union.select-2153"><a href="#Union.select-2153"><span class="linenos">2153</span></a><span class="sd"> Args:</span>
+</span><span id="Union.select-2154"><a href="#Union.select-2154"><span class="linenos">2154</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Union.select-2155"><a href="#Union.select-2155"><span class="linenos">2155</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Union.select-2156"><a href="#Union.select-2156"><span class="linenos">2156</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Union.select-2157"><a href="#Union.select-2157"><span class="linenos">2157</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Union.select-2158"><a href="#Union.select-2158"><span class="linenos">2158</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Union.select-2159"><a href="#Union.select-2159"><span class="linenos">2159</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Union.select-2160"><a href="#Union.select-2160"><span class="linenos">2160</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Union.select-2161"><a href="#Union.select-2161"><span class="linenos">2161</span></a>
+</span><span id="Union.select-2162"><a href="#Union.select-2162"><span class="linenos">2162</span></a><span class="sd"> Returns:</span>
+</span><span id="Union.select-2163"><a href="#Union.select-2163"><span class="linenos">2163</span></a><span class="sd"> Union: the modified expression.</span>
+</span><span id="Union.select-2164"><a href="#Union.select-2164"><span class="linenos">2164</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Union.select-2165"><a href="#Union.select-2165"><span class="linenos">2165</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span>
+</span><span id="Union.select-2166"><a href="#Union.select-2166"><span class="linenos">2166</span></a> <span class="n">this</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="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Union.select-2167"><a href="#Union.select-2167"><span class="linenos">2167</span></a> <span class="n">this</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span>
+</span><span id="Union.select-2168"><a href="#Union.select-2168"><span class="linenos">2168</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span>
+</span><span id="Union.select-2169"><a href="#Union.select-2169"><span class="linenos">2169</span></a> <span class="p">)</span>
+</span><span id="Union.select-2170"><a href="#Union.select-2170"><span class="linenos">2170</span></a> <span class="k">return</span> <span class="n">this</span>
</span></pre></div>
@@ -21671,8 +22171,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Except"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Except-2070"><a href="#Except-2070"><span class="linenos">2070</span></a><span class="k">class</span> <span class="nc">Except</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
-</span><span id="Except-2071"><a href="#Except-2071"><span class="linenos">2071</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Except-2193"><a href="#Except-2193"><span class="linenos">2193</span></a><span class="k">class</span> <span class="nc">Except</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
+</span><span id="Except-2194"><a href="#Except-2194"><span class="linenos">2194</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -21751,8 +22251,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Intersect"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Intersect-2074"><a href="#Intersect-2074"><span class="linenos">2074</span></a><span class="k">class</span> <span class="nc">Intersect</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
-</span><span id="Intersect-2075"><a href="#Intersect-2075"><span class="linenos">2075</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Intersect-2197"><a href="#Intersect-2197"><span class="linenos">2197</span></a><span class="k">class</span> <span class="nc">Intersect</span><span class="p">(</span><span class="n">Union</span><span class="p">):</span>
+</span><span id="Intersect-2198"><a href="#Intersect-2198"><span class="linenos">2198</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -21831,13 +22331,13 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Unnest"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unnest-2078"><a href="#Unnest-2078"><span class="linenos">2078</span></a><span class="k">class</span> <span class="nc">Unnest</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="Unnest-2079"><a href="#Unnest-2079"><span class="linenos">2079</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Unnest-2080"><a href="#Unnest-2080"><span class="linenos">2080</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Unnest-2081"><a href="#Unnest-2081"><span class="linenos">2081</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Unnest-2082"><a href="#Unnest-2082"><span class="linenos">2082</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Unnest-2083"><a href="#Unnest-2083"><span class="linenos">2083</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Unnest-2084"><a href="#Unnest-2084"><span class="linenos">2084</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unnest-2201"><a href="#Unnest-2201"><span class="linenos">2201</span></a><span class="k">class</span> <span class="nc">Unnest</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="Unnest-2202"><a href="#Unnest-2202"><span class="linenos">2202</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Unnest-2203"><a href="#Unnest-2203"><span class="linenos">2203</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Unnest-2204"><a href="#Unnest-2204"><span class="linenos">2204</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Unnest-2205"><a href="#Unnest-2205"><span class="linenos">2205</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Unnest-2206"><a href="#Unnest-2206"><span class="linenos">2206</span></a> <span class="s2">&quot;offset&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Unnest-2207"><a href="#Unnest-2207"><span class="linenos">2207</span></a> <span class="p">}</span>
</span></pre></div>
@@ -21906,15 +22406,15 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Update"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Update-2087"><a href="#Update-2087"><span class="linenos">2087</span></a><span class="k">class</span> <span class="nc">Update</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Update-2088"><a href="#Update-2088"><span class="linenos">2088</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Update-2089"><a href="#Update-2089"><span class="linenos">2089</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Update-2090"><a href="#Update-2090"><span class="linenos">2090</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Update-2091"><a href="#Update-2091"><span class="linenos">2091</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Update-2092"><a href="#Update-2092"><span class="linenos">2092</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Update-2093"><a href="#Update-2093"><span class="linenos">2093</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Update-2094"><a href="#Update-2094"><span class="linenos">2094</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Update-2095"><a href="#Update-2095"><span class="linenos">2095</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Update-2210"><a href="#Update-2210"><span class="linenos">2210</span></a><span class="k">class</span> <span class="nc">Update</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Update-2211"><a href="#Update-2211"><span class="linenos">2211</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Update-2212"><a href="#Update-2212"><span class="linenos">2212</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Update-2213"><a href="#Update-2213"><span class="linenos">2213</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Update-2214"><a href="#Update-2214"><span class="linenos">2214</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Update-2215"><a href="#Update-2215"><span class="linenos">2215</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Update-2216"><a href="#Update-2216"><span class="linenos">2216</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Update-2217"><a href="#Update-2217"><span class="linenos">2217</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Update-2218"><a href="#Update-2218"><span class="linenos">2218</span></a> <span class="p">}</span>
</span></pre></div>
@@ -21977,12 +22477,12 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Values"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Values-2098"><a href="#Values-2098"><span class="linenos">2098</span></a><span class="k">class</span> <span class="nc">Values</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
-</span><span id="Values-2099"><a href="#Values-2099"><span class="linenos">2099</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Values-2100"><a href="#Values-2100"><span class="linenos">2100</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Values-2101"><a href="#Values-2101"><span class="linenos">2101</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Values-2102"><a href="#Values-2102"><span class="linenos">2102</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Values-2103"><a href="#Values-2103"><span class="linenos">2103</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Values-2221"><a href="#Values-2221"><span class="linenos">2221</span></a><span class="k">class</span> <span class="nc">Values</span><span class="p">(</span><span class="n">UDTF</span><span class="p">):</span>
+</span><span id="Values-2222"><a href="#Values-2222"><span class="linenos">2222</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Values-2223"><a href="#Values-2223"><span class="linenos">2223</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Values-2224"><a href="#Values-2224"><span class="linenos">2224</span></a> <span class="s2">&quot;ordinality&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Values-2225"><a href="#Values-2225"><span class="linenos">2225</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Values-2226"><a href="#Values-2226"><span class="linenos">2226</span></a> <span class="p">}</span>
</span></pre></div>
@@ -22051,8 +22551,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Var"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Var-2106"><a href="#Var-2106"><span class="linenos">2106</span></a><span class="k">class</span> <span class="nc">Var</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Var-2107"><a href="#Var-2107"><span class="linenos">2107</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Var-2229"><a href="#Var-2229"><span class="linenos">2229</span></a><span class="k">class</span> <span class="nc">Var</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Var-2230"><a href="#Var-2230"><span class="linenos">2230</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -22115,8 +22615,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Schema"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Schema-2110"><a href="#Schema-2110"><span class="linenos">2110</span></a><span class="k">class</span> <span class="nc">Schema</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Schema-2111"><a href="#Schema-2111"><span class="linenos">2111</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Schema-2233"><a href="#Schema-2233"><span class="linenos">2233</span></a><span class="k">class</span> <span class="nc">Schema</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Schema-2234"><a href="#Schema-2234"><span class="linenos">2234</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -22179,8 +22679,8 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Lock"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Lock-2116"><a href="#Lock-2116"><span class="linenos">2116</span></a><span class="k">class</span> <span class="nc">Lock</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Lock-2117"><a href="#Lock-2117"><span class="linenos">2117</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Lock-2239"><a href="#Lock-2239"><span class="linenos">2239</span></a><span class="k">class</span> <span class="nc">Lock</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Lock-2240"><a href="#Lock-2240"><span class="linenos">2240</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;update&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -22243,591 +22743,593 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Select"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select-2120"><a href="#Select-2120"><span class="linenos">2120</span></a><span class="k">class</span> <span class="nc">Select</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Select-2121"><a href="#Select-2121"><span class="linenos">2121</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Select-2122"><a href="#Select-2122"><span class="linenos">2122</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Select-2123"><a href="#Select-2123"><span class="linenos">2123</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Select-2124"><a href="#Select-2124"><span class="linenos">2124</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Select-2125"><a href="#Select-2125"><span class="linenos">2125</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Select-2126"><a href="#Select-2126"><span class="linenos">2126</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Select-2127"><a href="#Select-2127"><span class="linenos">2127</span></a> <span class="s2">&quot;into&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Select-2128"><a href="#Select-2128"><span class="linenos">2128</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Select-2129"><a href="#Select-2129"><span class="linenos">2129</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="Select-2130"><a href="#Select-2130"><span class="linenos">2130</span></a> <span class="p">}</span>
-</span><span id="Select-2131"><a href="#Select-2131"><span class="linenos">2131</span></a>
-</span><span id="Select-2132"><a href="#Select-2132"><span class="linenos">2132</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2133"><a href="#Select-2133"><span class="linenos">2133</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2134"><a href="#Select-2134"><span class="linenos">2134</span></a><span class="sd"> Set the FROM expression.</span>
-</span><span id="Select-2135"><a href="#Select-2135"><span class="linenos">2135</span></a>
-</span><span id="Select-2136"><a href="#Select-2136"><span class="linenos">2136</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2137"><a href="#Select-2137"><span class="linenos">2137</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
-</span><span id="Select-2138"><a href="#Select-2138"><span class="linenos">2138</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</span>
-</span><span id="Select-2139"><a href="#Select-2139"><span class="linenos">2139</span></a>
-</span><span id="Select-2140"><a href="#Select-2140"><span class="linenos">2140</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2141"><a href="#Select-2141"><span class="linenos">2141</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2142"><a href="#Select-2142"><span class="linenos">2142</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
-</span><span id="Select-2143"><a href="#Select-2143"><span class="linenos">2143</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
-</span><span id="Select-2144"><a href="#Select-2144"><span class="linenos">2144</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select-2145"><a href="#Select-2145"><span class="linenos">2145</span></a><span class="sd"> Otherwise, this flattens all the `From` expression into a single expression.</span>
-</span><span id="Select-2146"><a href="#Select-2146"><span class="linenos">2146</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select-2147"><a href="#Select-2147"><span class="linenos">2147</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2148"><a href="#Select-2148"><span class="linenos">2148</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2149"><a href="#Select-2149"><span class="linenos">2149</span></a>
-</span><span id="Select-2150"><a href="#Select-2150"><span class="linenos">2150</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2151"><a href="#Select-2151"><span class="linenos">2151</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2152"><a href="#Select-2152"><span class="linenos">2152</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2153"><a href="#Select-2153"><span class="linenos">2153</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2154"><a href="#Select-2154"><span class="linenos">2154</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2155"><a href="#Select-2155"><span class="linenos">2155</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2156"><a href="#Select-2156"><span class="linenos">2156</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="Select-2157"><a href="#Select-2157"><span class="linenos">2157</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2158"><a href="#Select-2158"><span class="linenos">2158</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2159"><a href="#Select-2159"><span class="linenos">2159</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span>
-</span><span id="Select-2160"><a href="#Select-2160"><span class="linenos">2160</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
-</span><span id="Select-2161"><a href="#Select-2161"><span class="linenos">2161</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2162"><a href="#Select-2162"><span class="linenos">2162</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2163"><a href="#Select-2163"><span class="linenos">2163</span></a> <span class="p">)</span>
-</span><span id="Select-2164"><a href="#Select-2164"><span class="linenos">2164</span></a>
-</span><span id="Select-2165"><a href="#Select-2165"><span class="linenos">2165</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2166"><a href="#Select-2166"><span class="linenos">2166</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2167"><a href="#Select-2167"><span class="linenos">2167</span></a><span class="sd"> Set the GROUP BY expression.</span>
-</span><span id="Select-2168"><a href="#Select-2168"><span class="linenos">2168</span></a>
-</span><span id="Select-2169"><a href="#Select-2169"><span class="linenos">2169</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2170"><a href="#Select-2170"><span class="linenos">2170</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;, &quot;COUNT(1)&quot;).group_by(&quot;x&quot;).sql()</span>
-</span><span id="Select-2171"><a href="#Select-2171"><span class="linenos">2171</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
-</span><span id="Select-2172"><a href="#Select-2172"><span class="linenos">2172</span></a>
-</span><span id="Select-2173"><a href="#Select-2173"><span class="linenos">2173</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2174"><a href="#Select-2174"><span class="linenos">2174</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2175"><a href="#Select-2175"><span class="linenos">2175</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2176"><a href="#Select-2176"><span class="linenos">2176</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
-</span><span id="Select-2177"><a href="#Select-2177"><span class="linenos">2177</span></a><span class="sd"> If nothing is passed in then a group by is not applied to the expression</span>
-</span><span id="Select-2178"><a href="#Select-2178"><span class="linenos">2178</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select-2179"><a href="#Select-2179"><span class="linenos">2179</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
-</span><span id="Select-2180"><a href="#Select-2180"><span class="linenos">2180</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select-2181"><a href="#Select-2181"><span class="linenos">2181</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2182"><a href="#Select-2182"><span class="linenos">2182</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2183"><a href="#Select-2183"><span class="linenos">2183</span></a>
-</span><span id="Select-2184"><a href="#Select-2184"><span class="linenos">2184</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2185"><a href="#Select-2185"><span class="linenos">2185</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2186"><a href="#Select-2186"><span class="linenos">2186</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2187"><a href="#Select-2187"><span class="linenos">2187</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Select-2188"><a href="#Select-2188"><span class="linenos">2188</span></a> <span class="k">return</span> <span class="bp">self</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Select-2189"><a href="#Select-2189"><span class="linenos">2189</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2190"><a href="#Select-2190"><span class="linenos">2190</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2191"><a href="#Select-2191"><span class="linenos">2191</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2192"><a href="#Select-2192"><span class="linenos">2192</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;group&quot;</span><span class="p">,</span>
-</span><span id="Select-2193"><a href="#Select-2193"><span class="linenos">2193</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2194"><a href="#Select-2194"><span class="linenos">2194</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2195"><a href="#Select-2195"><span class="linenos">2195</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span>
-</span><span id="Select-2196"><a href="#Select-2196"><span class="linenos">2196</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
-</span><span id="Select-2197"><a href="#Select-2197"><span class="linenos">2197</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2198"><a href="#Select-2198"><span class="linenos">2198</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2199"><a href="#Select-2199"><span class="linenos">2199</span></a> <span class="p">)</span>
-</span><span id="Select-2200"><a href="#Select-2200"><span class="linenos">2200</span></a>
-</span><span id="Select-2201"><a href="#Select-2201"><span class="linenos">2201</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2202"><a href="#Select-2202"><span class="linenos">2202</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2203"><a href="#Select-2203"><span class="linenos">2203</span></a><span class="sd"> Set the ORDER BY expression.</span>
-</span><span id="Select-2204"><a href="#Select-2204"><span class="linenos">2204</span></a>
-</span><span id="Select-2205"><a href="#Select-2205"><span class="linenos">2205</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2206"><a href="#Select-2206"><span class="linenos">2206</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).order_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="Select-2207"><a href="#Select-2207"><span class="linenos">2207</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
-</span><span id="Select-2208"><a href="#Select-2208"><span class="linenos">2208</span></a>
-</span><span id="Select-2209"><a href="#Select-2209"><span class="linenos">2209</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2210"><a href="#Select-2210"><span class="linenos">2210</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2211"><a href="#Select-2211"><span class="linenos">2211</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2212"><a href="#Select-2212"><span class="linenos">2212</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
-</span><span id="Select-2213"><a href="#Select-2213"><span class="linenos">2213</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select-2214"><a href="#Select-2214"><span class="linenos">2214</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select-2215"><a href="#Select-2215"><span class="linenos">2215</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select-2216"><a href="#Select-2216"><span class="linenos">2216</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2217"><a href="#Select-2217"><span class="linenos">2217</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2218"><a href="#Select-2218"><span class="linenos">2218</span></a>
-</span><span id="Select-2219"><a href="#Select-2219"><span class="linenos">2219</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2220"><a href="#Select-2220"><span class="linenos">2220</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2221"><a href="#Select-2221"><span class="linenos">2221</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2222"><a href="#Select-2222"><span class="linenos">2222</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2223"><a href="#Select-2223"><span class="linenos">2223</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2224"><a href="#Select-2224"><span class="linenos">2224</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2225"><a href="#Select-2225"><span class="linenos">2225</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;order&quot;</span><span class="p">,</span>
-</span><span id="Select-2226"><a href="#Select-2226"><span class="linenos">2226</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2227"><a href="#Select-2227"><span class="linenos">2227</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2228"><a href="#Select-2228"><span class="linenos">2228</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ORDER BY&quot;</span><span class="p">,</span>
-</span><span id="Select-2229"><a href="#Select-2229"><span class="linenos">2229</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="Select-2230"><a href="#Select-2230"><span class="linenos">2230</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2231"><a href="#Select-2231"><span class="linenos">2231</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2232"><a href="#Select-2232"><span class="linenos">2232</span></a> <span class="p">)</span>
-</span><span id="Select-2233"><a href="#Select-2233"><span class="linenos">2233</span></a>
-</span><span id="Select-2234"><a href="#Select-2234"><span class="linenos">2234</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2235"><a href="#Select-2235"><span class="linenos">2235</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2236"><a href="#Select-2236"><span class="linenos">2236</span></a><span class="sd"> Set the SORT BY expression.</span>
-</span><span id="Select-2237"><a href="#Select-2237"><span class="linenos">2237</span></a>
-</span><span id="Select-2238"><a href="#Select-2238"><span class="linenos">2238</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2239"><a href="#Select-2239"><span class="linenos">2239</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="Select-2240"><a href="#Select-2240"><span class="linenos">2240</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</span>
-</span><span id="Select-2241"><a href="#Select-2241"><span class="linenos">2241</span></a>
-</span><span id="Select-2242"><a href="#Select-2242"><span class="linenos">2242</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2243"><a href="#Select-2243"><span class="linenos">2243</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2244"><a href="#Select-2244"><span class="linenos">2244</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2245"><a href="#Select-2245"><span class="linenos">2245</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
-</span><span id="Select-2246"><a href="#Select-2246"><span class="linenos">2246</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select-2247"><a href="#Select-2247"><span class="linenos">2247</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select-2248"><a href="#Select-2248"><span class="linenos">2248</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select-2249"><a href="#Select-2249"><span class="linenos">2249</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2250"><a href="#Select-2250"><span class="linenos">2250</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2251"><a href="#Select-2251"><span class="linenos">2251</span></a>
-</span><span id="Select-2252"><a href="#Select-2252"><span class="linenos">2252</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2253"><a href="#Select-2253"><span class="linenos">2253</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2254"><a href="#Select-2254"><span class="linenos">2254</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2255"><a href="#Select-2255"><span class="linenos">2255</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2256"><a href="#Select-2256"><span class="linenos">2256</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2257"><a href="#Select-2257"><span class="linenos">2257</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2258"><a href="#Select-2258"><span class="linenos">2258</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span>
-</span><span id="Select-2259"><a href="#Select-2259"><span class="linenos">2259</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2260"><a href="#Select-2260"><span class="linenos">2260</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2261"><a href="#Select-2261"><span class="linenos">2261</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span>
-</span><span id="Select-2262"><a href="#Select-2262"><span class="linenos">2262</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
-</span><span id="Select-2263"><a href="#Select-2263"><span class="linenos">2263</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2264"><a href="#Select-2264"><span class="linenos">2264</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2265"><a href="#Select-2265"><span class="linenos">2265</span></a> <span class="p">)</span>
-</span><span id="Select-2266"><a href="#Select-2266"><span class="linenos">2266</span></a>
-</span><span id="Select-2267"><a href="#Select-2267"><span class="linenos">2267</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2268"><a href="#Select-2268"><span class="linenos">2268</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2269"><a href="#Select-2269"><span class="linenos">2269</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
-</span><span id="Select-2270"><a href="#Select-2270"><span class="linenos">2270</span></a>
-</span><span id="Select-2271"><a href="#Select-2271"><span class="linenos">2271</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2272"><a href="#Select-2272"><span class="linenos">2272</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="Select-2273"><a href="#Select-2273"><span class="linenos">2273</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
-</span><span id="Select-2274"><a href="#Select-2274"><span class="linenos">2274</span></a>
-</span><span id="Select-2275"><a href="#Select-2275"><span class="linenos">2275</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2276"><a href="#Select-2276"><span class="linenos">2276</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2277"><a href="#Select-2277"><span class="linenos">2277</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select-2278"><a href="#Select-2278"><span class="linenos">2278</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
-</span><span id="Select-2279"><a href="#Select-2279"><span class="linenos">2279</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select-2280"><a href="#Select-2280"><span class="linenos">2280</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select-2281"><a href="#Select-2281"><span class="linenos">2281</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select-2282"><a href="#Select-2282"><span class="linenos">2282</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2283"><a href="#Select-2283"><span class="linenos">2283</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2284"><a href="#Select-2284"><span class="linenos">2284</span></a>
-</span><span id="Select-2285"><a href="#Select-2285"><span class="linenos">2285</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2286"><a href="#Select-2286"><span class="linenos">2286</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2287"><a href="#Select-2287"><span class="linenos">2287</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2288"><a href="#Select-2288"><span class="linenos">2288</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select-2289"><a href="#Select-2289"><span class="linenos">2289</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2290"><a href="#Select-2290"><span class="linenos">2290</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2291"><a href="#Select-2291"><span class="linenos">2291</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
-</span><span id="Select-2292"><a href="#Select-2292"><span class="linenos">2292</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2293"><a href="#Select-2293"><span class="linenos">2293</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2294"><a href="#Select-2294"><span class="linenos">2294</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span>
-</span><span id="Select-2295"><a href="#Select-2295"><span class="linenos">2295</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
-</span><span id="Select-2296"><a href="#Select-2296"><span class="linenos">2296</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2297"><a href="#Select-2297"><span class="linenos">2297</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2298"><a href="#Select-2298"><span class="linenos">2298</span></a> <span class="p">)</span>
-</span><span id="Select-2299"><a href="#Select-2299"><span class="linenos">2299</span></a>
-</span><span id="Select-2300"><a href="#Select-2300"><span class="linenos">2300</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2301"><a href="#Select-2301"><span class="linenos">2301</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2302"><a href="#Select-2302"><span class="linenos">2302</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Select-2303"><a href="#Select-2303"><span class="linenos">2303</span></a>
-</span><span id="Select-2304"><a href="#Select-2304"><span class="linenos">2304</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2305"><a href="#Select-2305"><span class="linenos">2305</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).limit(10).sql()</span>
-</span><span id="Select-2306"><a href="#Select-2306"><span class="linenos">2306</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
-</span><span id="Select-2307"><a href="#Select-2307"><span class="linenos">2307</span></a>
-</span><span id="Select-2308"><a href="#Select-2308"><span class="linenos">2308</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2309"><a href="#Select-2309"><span class="linenos">2309</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="Select-2310"><a href="#Select-2310"><span class="linenos">2310</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select-2311"><a href="#Select-2311"><span class="linenos">2311</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Select-2312"><a href="#Select-2312"><span class="linenos">2312</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Select-2313"><a href="#Select-2313"><span class="linenos">2313</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select-2314"><a href="#Select-2314"><span class="linenos">2314</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2315"><a href="#Select-2315"><span class="linenos">2315</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2316"><a href="#Select-2316"><span class="linenos">2316</span></a>
-</span><span id="Select-2317"><a href="#Select-2317"><span class="linenos">2317</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2318"><a href="#Select-2318"><span class="linenos">2318</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2319"><a href="#Select-2319"><span class="linenos">2319</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2320"><a href="#Select-2320"><span class="linenos">2320</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select-2321"><a href="#Select-2321"><span class="linenos">2321</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select-2322"><a href="#Select-2322"><span class="linenos">2322</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2323"><a href="#Select-2323"><span class="linenos">2323</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span>
-</span><span id="Select-2324"><a href="#Select-2324"><span class="linenos">2324</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
-</span><span id="Select-2325"><a href="#Select-2325"><span class="linenos">2325</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">,</span>
-</span><span id="Select-2326"><a href="#Select-2326"><span class="linenos">2326</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2327"><a href="#Select-2327"><span class="linenos">2327</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2328"><a href="#Select-2328"><span class="linenos">2328</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2329"><a href="#Select-2329"><span class="linenos">2329</span></a> <span class="p">)</span>
-</span><span id="Select-2330"><a href="#Select-2330"><span class="linenos">2330</span></a>
-</span><span id="Select-2331"><a href="#Select-2331"><span class="linenos">2331</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2332"><a href="#Select-2332"><span class="linenos">2332</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2333"><a href="#Select-2333"><span class="linenos">2333</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="Select-2334"><a href="#Select-2334"><span class="linenos">2334</span></a>
-</span><span id="Select-2335"><a href="#Select-2335"><span class="linenos">2335</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2336"><a href="#Select-2336"><span class="linenos">2336</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).offset(10).sql()</span>
-</span><span id="Select-2337"><a href="#Select-2337"><span class="linenos">2337</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
-</span><span id="Select-2338"><a href="#Select-2338"><span class="linenos">2338</span></a>
-</span><span id="Select-2339"><a href="#Select-2339"><span class="linenos">2339</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2340"><a href="#Select-2340"><span class="linenos">2340</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="Select-2341"><a href="#Select-2341"><span class="linenos">2341</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select-2342"><a href="#Select-2342"><span class="linenos">2342</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
-</span><span id="Select-2343"><a href="#Select-2343"><span class="linenos">2343</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
-</span><span id="Select-2344"><a href="#Select-2344"><span class="linenos">2344</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select-2345"><a href="#Select-2345"><span class="linenos">2345</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2346"><a href="#Select-2346"><span class="linenos">2346</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2347"><a href="#Select-2347"><span class="linenos">2347</span></a>
-</span><span id="Select-2348"><a href="#Select-2348"><span class="linenos">2348</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2349"><a href="#Select-2349"><span class="linenos">2349</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2350"><a href="#Select-2350"><span class="linenos">2350</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2351"><a href="#Select-2351"><span class="linenos">2351</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select-2352"><a href="#Select-2352"><span class="linenos">2352</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select-2353"><a href="#Select-2353"><span class="linenos">2353</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2354"><a href="#Select-2354"><span class="linenos">2354</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span>
-</span><span id="Select-2355"><a href="#Select-2355"><span class="linenos">2355</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
-</span><span id="Select-2356"><a href="#Select-2356"><span class="linenos">2356</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span>
-</span><span id="Select-2357"><a href="#Select-2357"><span class="linenos">2357</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2358"><a href="#Select-2358"><span class="linenos">2358</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2359"><a href="#Select-2359"><span class="linenos">2359</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2360"><a href="#Select-2360"><span class="linenos">2360</span></a> <span class="p">)</span>
-</span><span id="Select-2361"><a href="#Select-2361"><span class="linenos">2361</span></a>
-</span><span id="Select-2362"><a href="#Select-2362"><span class="linenos">2362</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Select-2363"><a href="#Select-2363"><span class="linenos">2363</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2364"><a href="#Select-2364"><span class="linenos">2364</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Select-2365"><a href="#Select-2365"><span class="linenos">2365</span></a> <span class="n">append</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="Select-2366"><a href="#Select-2366"><span class="linenos">2366</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="Select-2367"><a href="#Select-2367"><span class="linenos">2367</span></a> <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><span id="Select-2368"><a href="#Select-2368"><span class="linenos">2368</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2369"><a href="#Select-2369"><span class="linenos">2369</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2370"><a href="#Select-2370"><span class="linenos">2370</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2371"><a href="#Select-2371"><span class="linenos">2371</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
-</span><span id="Select-2372"><a href="#Select-2372"><span class="linenos">2372</span></a>
-</span><span id="Select-2373"><a href="#Select-2373"><span class="linenos">2373</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2374"><a href="#Select-2374"><span class="linenos">2374</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
-</span><span id="Select-2375"><a href="#Select-2375"><span class="linenos">2375</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
-</span><span id="Select-2376"><a href="#Select-2376"><span class="linenos">2376</span></a>
-</span><span id="Select-2377"><a href="#Select-2377"><span class="linenos">2377</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2378"><a href="#Select-2378"><span class="linenos">2378</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select-2379"><a href="#Select-2379"><span class="linenos">2379</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2380"><a href="#Select-2380"><span class="linenos">2380</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select-2381"><a href="#Select-2381"><span class="linenos">2381</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select-2382"><a href="#Select-2382"><span class="linenos">2382</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select-2383"><a href="#Select-2383"><span class="linenos">2383</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2384"><a href="#Select-2384"><span class="linenos">2384</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select-2385"><a href="#Select-2385"><span class="linenos">2385</span></a>
-</span><span id="Select-2386"><a href="#Select-2386"><span class="linenos">2386</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2387"><a href="#Select-2387"><span class="linenos">2387</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2388"><a href="#Select-2388"><span class="linenos">2388</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2389"><a href="#Select-2389"><span class="linenos">2389</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2390"><a href="#Select-2390"><span class="linenos">2390</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2391"><a href="#Select-2391"><span class="linenos">2391</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2392"><a href="#Select-2392"><span class="linenos">2392</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="Select-2393"><a href="#Select-2393"><span class="linenos">2393</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2394"><a href="#Select-2394"><span class="linenos">2394</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2395"><a href="#Select-2395"><span class="linenos">2395</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2396"><a href="#Select-2396"><span class="linenos">2396</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2397"><a href="#Select-2397"><span class="linenos">2397</span></a> <span class="p">)</span>
-</span><span id="Select-2398"><a href="#Select-2398"><span class="linenos">2398</span></a>
-</span><span id="Select-2399"><a href="#Select-2399"><span class="linenos">2399</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2400"><a href="#Select-2400"><span class="linenos">2400</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2401"><a href="#Select-2401"><span class="linenos">2401</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
-</span><span id="Select-2402"><a href="#Select-2402"><span class="linenos">2402</span></a>
-</span><span id="Select-2403"><a href="#Select-2403"><span class="linenos">2403</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2404"><a href="#Select-2404"><span class="linenos">2404</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).lateral(&quot;OUTER explode(y) tbl2 AS z&quot;).from_(&quot;tbl&quot;).sql()</span>
-</span><span id="Select-2405"><a href="#Select-2405"><span class="linenos">2405</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
-</span><span id="Select-2406"><a href="#Select-2406"><span class="linenos">2406</span></a>
-</span><span id="Select-2407"><a href="#Select-2407"><span class="linenos">2407</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2408"><a href="#Select-2408"><span class="linenos">2408</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2409"><a href="#Select-2409"><span class="linenos">2409</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2410"><a href="#Select-2410"><span class="linenos">2410</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select-2411"><a href="#Select-2411"><span class="linenos">2411</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select-2412"><a href="#Select-2412"><span class="linenos">2412</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select-2413"><a href="#Select-2413"><span class="linenos">2413</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2414"><a href="#Select-2414"><span class="linenos">2414</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2415"><a href="#Select-2415"><span class="linenos">2415</span></a>
-</span><span id="Select-2416"><a href="#Select-2416"><span class="linenos">2416</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2417"><a href="#Select-2417"><span class="linenos">2417</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2418"><a href="#Select-2418"><span class="linenos">2418</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2419"><a href="#Select-2419"><span class="linenos">2419</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2420"><a href="#Select-2420"><span class="linenos">2420</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2421"><a href="#Select-2421"><span class="linenos">2421</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2422"><a href="#Select-2422"><span class="linenos">2422</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
-</span><span id="Select-2423"><a href="#Select-2423"><span class="linenos">2423</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2424"><a href="#Select-2424"><span class="linenos">2424</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="Select-2425"><a href="#Select-2425"><span class="linenos">2425</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LATERAL VIEW&quot;</span><span class="p">,</span>
-</span><span id="Select-2426"><a href="#Select-2426"><span class="linenos">2426</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2427"><a href="#Select-2427"><span class="linenos">2427</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2428"><a href="#Select-2428"><span class="linenos">2428</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2429"><a href="#Select-2429"><span class="linenos">2429</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select-2243"><a href="#Select-2243"><span class="linenos">2243</span></a><span class="k">class</span> <span class="nc">Select</span><span class="p">(</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Select-2244"><a href="#Select-2244"><span class="linenos">2244</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Select-2245"><a href="#Select-2245"><span class="linenos">2245</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Select-2246"><a href="#Select-2246"><span class="linenos">2246</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Select-2247"><a href="#Select-2247"><span class="linenos">2247</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Select-2248"><a href="#Select-2248"><span class="linenos">2248</span></a> <span class="s2">&quot;hint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Select-2249"><a href="#Select-2249"><span class="linenos">2249</span></a> <span class="s2">&quot;distinct&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Select-2250"><a href="#Select-2250"><span class="linenos">2250</span></a> <span class="s2">&quot;into&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Select-2251"><a href="#Select-2251"><span class="linenos">2251</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Select-2252"><a href="#Select-2252"><span class="linenos">2252</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="Select-2253"><a href="#Select-2253"><span class="linenos">2253</span></a> <span class="p">}</span>
+</span><span id="Select-2254"><a href="#Select-2254"><span class="linenos">2254</span></a>
+</span><span id="Select-2255"><a href="#Select-2255"><span class="linenos">2255</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2256"><a href="#Select-2256"><span class="linenos">2256</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2257"><a href="#Select-2257"><span class="linenos">2257</span></a><span class="sd"> Set the FROM expression.</span>
+</span><span id="Select-2258"><a href="#Select-2258"><span class="linenos">2258</span></a>
+</span><span id="Select-2259"><a href="#Select-2259"><span class="linenos">2259</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2260"><a href="#Select-2260"><span class="linenos">2260</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
+</span><span id="Select-2261"><a href="#Select-2261"><span class="linenos">2261</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</span>
+</span><span id="Select-2262"><a href="#Select-2262"><span class="linenos">2262</span></a>
+</span><span id="Select-2263"><a href="#Select-2263"><span class="linenos">2263</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2264"><a href="#Select-2264"><span class="linenos">2264</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2265"><a href="#Select-2265"><span class="linenos">2265</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
+</span><span id="Select-2266"><a href="#Select-2266"><span class="linenos">2266</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
+</span><span id="Select-2267"><a href="#Select-2267"><span class="linenos">2267</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select-2268"><a href="#Select-2268"><span class="linenos">2268</span></a><span class="sd"> Otherwise, this flattens all the `From` expression into a single expression.</span>
+</span><span id="Select-2269"><a href="#Select-2269"><span class="linenos">2269</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select-2270"><a href="#Select-2270"><span class="linenos">2270</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2271"><a href="#Select-2271"><span class="linenos">2271</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2272"><a href="#Select-2272"><span class="linenos">2272</span></a>
+</span><span id="Select-2273"><a href="#Select-2273"><span class="linenos">2273</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2274"><a href="#Select-2274"><span class="linenos">2274</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2275"><a href="#Select-2275"><span class="linenos">2275</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2276"><a href="#Select-2276"><span class="linenos">2276</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2277"><a href="#Select-2277"><span class="linenos">2277</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2278"><a href="#Select-2278"><span class="linenos">2278</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2279"><a href="#Select-2279"><span class="linenos">2279</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="Select-2280"><a href="#Select-2280"><span class="linenos">2280</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2281"><a href="#Select-2281"><span class="linenos">2281</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2282"><a href="#Select-2282"><span class="linenos">2282</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span>
+</span><span id="Select-2283"><a href="#Select-2283"><span class="linenos">2283</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
+</span><span id="Select-2284"><a href="#Select-2284"><span class="linenos">2284</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2285"><a href="#Select-2285"><span class="linenos">2285</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2286"><a href="#Select-2286"><span class="linenos">2286</span></a> <span class="p">)</span>
+</span><span id="Select-2287"><a href="#Select-2287"><span class="linenos">2287</span></a>
+</span><span id="Select-2288"><a href="#Select-2288"><span class="linenos">2288</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2289"><a href="#Select-2289"><span class="linenos">2289</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2290"><a href="#Select-2290"><span class="linenos">2290</span></a><span class="sd"> Set the GROUP BY expression.</span>
+</span><span id="Select-2291"><a href="#Select-2291"><span class="linenos">2291</span></a>
+</span><span id="Select-2292"><a href="#Select-2292"><span class="linenos">2292</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2293"><a href="#Select-2293"><span class="linenos">2293</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;, &quot;COUNT(1)&quot;).group_by(&quot;x&quot;).sql()</span>
+</span><span id="Select-2294"><a href="#Select-2294"><span class="linenos">2294</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
+</span><span id="Select-2295"><a href="#Select-2295"><span class="linenos">2295</span></a>
+</span><span id="Select-2296"><a href="#Select-2296"><span class="linenos">2296</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2297"><a href="#Select-2297"><span class="linenos">2297</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2298"><a href="#Select-2298"><span class="linenos">2298</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2299"><a href="#Select-2299"><span class="linenos">2299</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
+</span><span id="Select-2300"><a href="#Select-2300"><span class="linenos">2300</span></a><span class="sd"> If nothing is passed in then a group by is not applied to the expression</span>
+</span><span id="Select-2301"><a href="#Select-2301"><span class="linenos">2301</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select-2302"><a href="#Select-2302"><span class="linenos">2302</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
+</span><span id="Select-2303"><a href="#Select-2303"><span class="linenos">2303</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select-2304"><a href="#Select-2304"><span class="linenos">2304</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2305"><a href="#Select-2305"><span class="linenos">2305</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2306"><a href="#Select-2306"><span class="linenos">2306</span></a>
+</span><span id="Select-2307"><a href="#Select-2307"><span class="linenos">2307</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2308"><a href="#Select-2308"><span class="linenos">2308</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2309"><a href="#Select-2309"><span class="linenos">2309</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2310"><a href="#Select-2310"><span class="linenos">2310</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Select-2311"><a href="#Select-2311"><span class="linenos">2311</span></a> <span class="k">return</span> <span class="bp">self</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Select-2312"><a href="#Select-2312"><span class="linenos">2312</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2313"><a href="#Select-2313"><span class="linenos">2313</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2314"><a href="#Select-2314"><span class="linenos">2314</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2315"><a href="#Select-2315"><span class="linenos">2315</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;group&quot;</span><span class="p">,</span>
+</span><span id="Select-2316"><a href="#Select-2316"><span class="linenos">2316</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2317"><a href="#Select-2317"><span class="linenos">2317</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2318"><a href="#Select-2318"><span class="linenos">2318</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span>
+</span><span id="Select-2319"><a href="#Select-2319"><span class="linenos">2319</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
+</span><span id="Select-2320"><a href="#Select-2320"><span class="linenos">2320</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2321"><a href="#Select-2321"><span class="linenos">2321</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2322"><a href="#Select-2322"><span class="linenos">2322</span></a> <span class="p">)</span>
+</span><span id="Select-2323"><a href="#Select-2323"><span class="linenos">2323</span></a>
+</span><span id="Select-2324"><a href="#Select-2324"><span class="linenos">2324</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2325"><a href="#Select-2325"><span class="linenos">2325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2326"><a href="#Select-2326"><span class="linenos">2326</span></a><span class="sd"> Set the ORDER BY expression.</span>
+</span><span id="Select-2327"><a href="#Select-2327"><span class="linenos">2327</span></a>
+</span><span id="Select-2328"><a href="#Select-2328"><span class="linenos">2328</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2329"><a href="#Select-2329"><span class="linenos">2329</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).order_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="Select-2330"><a href="#Select-2330"><span class="linenos">2330</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
+</span><span id="Select-2331"><a href="#Select-2331"><span class="linenos">2331</span></a>
+</span><span id="Select-2332"><a href="#Select-2332"><span class="linenos">2332</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2333"><a href="#Select-2333"><span class="linenos">2333</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2334"><a href="#Select-2334"><span class="linenos">2334</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2335"><a href="#Select-2335"><span class="linenos">2335</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
+</span><span id="Select-2336"><a href="#Select-2336"><span class="linenos">2336</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select-2337"><a href="#Select-2337"><span class="linenos">2337</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select-2338"><a href="#Select-2338"><span class="linenos">2338</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select-2339"><a href="#Select-2339"><span class="linenos">2339</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2340"><a href="#Select-2340"><span class="linenos">2340</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2341"><a href="#Select-2341"><span class="linenos">2341</span></a>
+</span><span id="Select-2342"><a href="#Select-2342"><span class="linenos">2342</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2343"><a href="#Select-2343"><span class="linenos">2343</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2344"><a href="#Select-2344"><span class="linenos">2344</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2345"><a href="#Select-2345"><span class="linenos">2345</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2346"><a href="#Select-2346"><span class="linenos">2346</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2347"><a href="#Select-2347"><span class="linenos">2347</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2348"><a href="#Select-2348"><span class="linenos">2348</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;order&quot;</span><span class="p">,</span>
+</span><span id="Select-2349"><a href="#Select-2349"><span class="linenos">2349</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2350"><a href="#Select-2350"><span class="linenos">2350</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2351"><a href="#Select-2351"><span class="linenos">2351</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ORDER BY&quot;</span><span class="p">,</span>
+</span><span id="Select-2352"><a href="#Select-2352"><span class="linenos">2352</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="Select-2353"><a href="#Select-2353"><span class="linenos">2353</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2354"><a href="#Select-2354"><span class="linenos">2354</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2355"><a href="#Select-2355"><span class="linenos">2355</span></a> <span class="p">)</span>
+</span><span id="Select-2356"><a href="#Select-2356"><span class="linenos">2356</span></a>
+</span><span id="Select-2357"><a href="#Select-2357"><span class="linenos">2357</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2358"><a href="#Select-2358"><span class="linenos">2358</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2359"><a href="#Select-2359"><span class="linenos">2359</span></a><span class="sd"> Set the SORT BY expression.</span>
+</span><span id="Select-2360"><a href="#Select-2360"><span class="linenos">2360</span></a>
+</span><span id="Select-2361"><a href="#Select-2361"><span class="linenos">2361</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2362"><a href="#Select-2362"><span class="linenos">2362</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="Select-2363"><a href="#Select-2363"><span class="linenos">2363</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</span>
+</span><span id="Select-2364"><a href="#Select-2364"><span class="linenos">2364</span></a>
+</span><span id="Select-2365"><a href="#Select-2365"><span class="linenos">2365</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2366"><a href="#Select-2366"><span class="linenos">2366</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2367"><a href="#Select-2367"><span class="linenos">2367</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2368"><a href="#Select-2368"><span class="linenos">2368</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
+</span><span id="Select-2369"><a href="#Select-2369"><span class="linenos">2369</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select-2370"><a href="#Select-2370"><span class="linenos">2370</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select-2371"><a href="#Select-2371"><span class="linenos">2371</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select-2372"><a href="#Select-2372"><span class="linenos">2372</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2373"><a href="#Select-2373"><span class="linenos">2373</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2374"><a href="#Select-2374"><span class="linenos">2374</span></a>
+</span><span id="Select-2375"><a href="#Select-2375"><span class="linenos">2375</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2376"><a href="#Select-2376"><span class="linenos">2376</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2377"><a href="#Select-2377"><span class="linenos">2377</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2378"><a href="#Select-2378"><span class="linenos">2378</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2379"><a href="#Select-2379"><span class="linenos">2379</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2380"><a href="#Select-2380"><span class="linenos">2380</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2381"><a href="#Select-2381"><span class="linenos">2381</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span>
+</span><span id="Select-2382"><a href="#Select-2382"><span class="linenos">2382</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2383"><a href="#Select-2383"><span class="linenos">2383</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2384"><a href="#Select-2384"><span class="linenos">2384</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span>
+</span><span id="Select-2385"><a href="#Select-2385"><span class="linenos">2385</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
+</span><span id="Select-2386"><a href="#Select-2386"><span class="linenos">2386</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2387"><a href="#Select-2387"><span class="linenos">2387</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2388"><a href="#Select-2388"><span class="linenos">2388</span></a> <span class="p">)</span>
+</span><span id="Select-2389"><a href="#Select-2389"><span class="linenos">2389</span></a>
+</span><span id="Select-2390"><a href="#Select-2390"><span class="linenos">2390</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2391"><a href="#Select-2391"><span class="linenos">2391</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2392"><a href="#Select-2392"><span class="linenos">2392</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
+</span><span id="Select-2393"><a href="#Select-2393"><span class="linenos">2393</span></a>
+</span><span id="Select-2394"><a href="#Select-2394"><span class="linenos">2394</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2395"><a href="#Select-2395"><span class="linenos">2395</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="Select-2396"><a href="#Select-2396"><span class="linenos">2396</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
+</span><span id="Select-2397"><a href="#Select-2397"><span class="linenos">2397</span></a>
+</span><span id="Select-2398"><a href="#Select-2398"><span class="linenos">2398</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2399"><a href="#Select-2399"><span class="linenos">2399</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2400"><a href="#Select-2400"><span class="linenos">2400</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select-2401"><a href="#Select-2401"><span class="linenos">2401</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
+</span><span id="Select-2402"><a href="#Select-2402"><span class="linenos">2402</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select-2403"><a href="#Select-2403"><span class="linenos">2403</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select-2404"><a href="#Select-2404"><span class="linenos">2404</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select-2405"><a href="#Select-2405"><span class="linenos">2405</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2406"><a href="#Select-2406"><span class="linenos">2406</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2407"><a href="#Select-2407"><span class="linenos">2407</span></a>
+</span><span id="Select-2408"><a href="#Select-2408"><span class="linenos">2408</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2409"><a href="#Select-2409"><span class="linenos">2409</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2410"><a href="#Select-2410"><span class="linenos">2410</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2411"><a href="#Select-2411"><span class="linenos">2411</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select-2412"><a href="#Select-2412"><span class="linenos">2412</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2413"><a href="#Select-2413"><span class="linenos">2413</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2414"><a href="#Select-2414"><span class="linenos">2414</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
+</span><span id="Select-2415"><a href="#Select-2415"><span class="linenos">2415</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2416"><a href="#Select-2416"><span class="linenos">2416</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2417"><a href="#Select-2417"><span class="linenos">2417</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span>
+</span><span id="Select-2418"><a href="#Select-2418"><span class="linenos">2418</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
+</span><span id="Select-2419"><a href="#Select-2419"><span class="linenos">2419</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2420"><a href="#Select-2420"><span class="linenos">2420</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2421"><a href="#Select-2421"><span class="linenos">2421</span></a> <span class="p">)</span>
+</span><span id="Select-2422"><a href="#Select-2422"><span class="linenos">2422</span></a>
+</span><span id="Select-2423"><a href="#Select-2423"><span class="linenos">2423</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2424"><a href="#Select-2424"><span class="linenos">2424</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2425"><a href="#Select-2425"><span class="linenos">2425</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Select-2426"><a href="#Select-2426"><span class="linenos">2426</span></a>
+</span><span id="Select-2427"><a href="#Select-2427"><span class="linenos">2427</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2428"><a href="#Select-2428"><span class="linenos">2428</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).limit(10).sql()</span>
+</span><span id="Select-2429"><a href="#Select-2429"><span class="linenos">2429</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
</span><span id="Select-2430"><a href="#Select-2430"><span class="linenos">2430</span></a>
-</span><span id="Select-2431"><a href="#Select-2431"><span class="linenos">2431</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="Select-2432"><a href="#Select-2432"><span class="linenos">2432</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2433"><a href="#Select-2433"><span class="linenos">2433</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Select-2434"><a href="#Select-2434"><span class="linenos">2434</span></a> <span class="n">on</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select-2435"><a href="#Select-2435"><span class="linenos">2435</span></a> <span class="n">using</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select-2436"><a href="#Select-2436"><span class="linenos">2436</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Select-2437"><a href="#Select-2437"><span class="linenos">2437</span></a> <span class="n">join_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select-2438"><a href="#Select-2438"><span class="linenos">2438</span></a> <span class="n">join_alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select-2439"><a href="#Select-2439"><span class="linenos">2439</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select-2440"><a href="#Select-2440"><span class="linenos">2440</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Select-2441"><a href="#Select-2441"><span class="linenos">2441</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2442"><a href="#Select-2442"><span class="linenos">2442</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2443"><a href="#Select-2443"><span class="linenos">2443</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2444"><a href="#Select-2444"><span class="linenos">2444</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
-</span><span id="Select-2445"><a href="#Select-2445"><span class="linenos">2445</span></a>
-</span><span id="Select-2446"><a href="#Select-2446"><span class="linenos">2446</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2447"><a href="#Select-2447"><span class="linenos">2447</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;).sql()</span>
-</span><span id="Select-2448"><a href="#Select-2448"><span class="linenos">2448</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="Select-2449"><a href="#Select-2449"><span class="linenos">2449</span></a>
-</span><span id="Select-2450"><a href="#Select-2450"><span class="linenos">2450</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;1&quot;).from_(&quot;a&quot;).join(&quot;b&quot;, using=[&quot;x&quot;, &quot;y&quot;, &quot;z&quot;]).sql()</span>
-</span><span id="Select-2451"><a href="#Select-2451"><span class="linenos">2451</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
-</span><span id="Select-2452"><a href="#Select-2452"><span class="linenos">2452</span></a>
-</span><span id="Select-2453"><a href="#Select-2453"><span class="linenos">2453</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
-</span><span id="Select-2454"><a href="#Select-2454"><span class="linenos">2454</span></a>
-</span><span id="Select-2455"><a href="#Select-2455"><span class="linenos">2455</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;, join_type=&quot;left outer&quot;).sql()</span>
-</span><span id="Select-2456"><a href="#Select-2456"><span class="linenos">2456</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="Select-2431"><a href="#Select-2431"><span class="linenos">2431</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2432"><a href="#Select-2432"><span class="linenos">2432</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="Select-2433"><a href="#Select-2433"><span class="linenos">2433</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select-2434"><a href="#Select-2434"><span class="linenos">2434</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Select-2435"><a href="#Select-2435"><span class="linenos">2435</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Select-2436"><a href="#Select-2436"><span class="linenos">2436</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select-2437"><a href="#Select-2437"><span class="linenos">2437</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2438"><a href="#Select-2438"><span class="linenos">2438</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2439"><a href="#Select-2439"><span class="linenos">2439</span></a>
+</span><span id="Select-2440"><a href="#Select-2440"><span class="linenos">2440</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2441"><a href="#Select-2441"><span class="linenos">2441</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2442"><a href="#Select-2442"><span class="linenos">2442</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2443"><a href="#Select-2443"><span class="linenos">2443</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select-2444"><a href="#Select-2444"><span class="linenos">2444</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select-2445"><a href="#Select-2445"><span class="linenos">2445</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2446"><a href="#Select-2446"><span class="linenos">2446</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span>
+</span><span id="Select-2447"><a href="#Select-2447"><span class="linenos">2447</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="Select-2448"><a href="#Select-2448"><span class="linenos">2448</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">,</span>
+</span><span id="Select-2449"><a href="#Select-2449"><span class="linenos">2449</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2450"><a href="#Select-2450"><span class="linenos">2450</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2451"><a href="#Select-2451"><span class="linenos">2451</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2452"><a href="#Select-2452"><span class="linenos">2452</span></a> <span class="p">)</span>
+</span><span id="Select-2453"><a href="#Select-2453"><span class="linenos">2453</span></a>
+</span><span id="Select-2454"><a href="#Select-2454"><span class="linenos">2454</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2455"><a href="#Select-2455"><span class="linenos">2455</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2456"><a href="#Select-2456"><span class="linenos">2456</span></a><span class="sd"> Set the OFFSET expression.</span>
</span><span id="Select-2457"><a href="#Select-2457"><span class="linenos">2457</span></a>
-</span><span id="Select-2458"><a href="#Select-2458"><span class="linenos">2458</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2459"><a href="#Select-2459"><span class="linenos">2459</span></a><span class="sd"> expression (str | Expression): the SQL code string to parse.</span>
-</span><span id="Select-2460"><a href="#Select-2460"><span class="linenos">2460</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2461"><a href="#Select-2461"><span class="linenos">2461</span></a><span class="sd"> on (str | Expression): optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
-</span><span id="Select-2462"><a href="#Select-2462"><span class="linenos">2462</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2463"><a href="#Select-2463"><span class="linenos">2463</span></a><span class="sd"> using (str | Expression): optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
-</span><span id="Select-2464"><a href="#Select-2464"><span class="linenos">2464</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2465"><a href="#Select-2465"><span class="linenos">2465</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select-2466"><a href="#Select-2466"><span class="linenos">2466</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select-2467"><a href="#Select-2467"><span class="linenos">2467</span></a><span class="sd"> join_type (str): If set, alter the parsed join type</span>
-</span><span id="Select-2468"><a href="#Select-2468"><span class="linenos">2468</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select-2469"><a href="#Select-2469"><span class="linenos">2469</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2470"><a href="#Select-2470"><span class="linenos">2470</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2471"><a href="#Select-2471"><span class="linenos">2471</span></a>
-</span><span id="Select-2472"><a href="#Select-2472"><span class="linenos">2472</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2473"><a href="#Select-2473"><span class="linenos">2473</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2474"><a href="#Select-2474"><span class="linenos">2474</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2475"><a href="#Select-2475"><span class="linenos">2475</span></a> <span class="n">parse_args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">}</span>
-</span><span id="Select-2476"><a href="#Select-2476"><span class="linenos">2476</span></a>
-</span><span id="Select-2477"><a href="#Select-2477"><span class="linenos">2477</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Select-2478"><a href="#Select-2478"><span class="linenos">2478</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Join</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;JOIN&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
-</span><span id="Select-2479"><a href="#Select-2479"><span class="linenos">2479</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="Select-2480"><a href="#Select-2480"><span class="linenos">2480</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="p">(</span><span class="n">Join</span><span class="p">,</span> <span class="n">Expression</span><span class="p">),</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
-</span><span id="Select-2481"><a href="#Select-2481"><span class="linenos">2481</span></a>
-</span><span id="Select-2482"><a href="#Select-2482"><span class="linenos">2482</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">expression</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">Join</span><span class="p">)</span> <span class="k">else</span> <span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Select-2483"><a href="#Select-2483"><span class="linenos">2483</span></a>
-</span><span id="Select-2484"><a href="#Select-2484"><span class="linenos">2484</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">Select</span><span class="p">):</span>
-</span><span id="Select-2485"><a href="#Select-2485"><span class="linenos">2485</span></a> <span class="n">join</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="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span>
-</span><span id="Select-2486"><a href="#Select-2486"><span class="linenos">2486</span></a>
-</span><span id="Select-2487"><a href="#Select-2487"><span class="linenos">2487</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
-</span><span id="Select-2488"><a href="#Select-2488"><span class="linenos">2488</span></a> <span class="n">natural</span><span 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="Select-2489"><a href="#Select-2489"><span class="linenos">2489</span></a> <span class="n">side</span><span 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="Select-2490"><a href="#Select-2490"><span class="linenos">2490</span></a> <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">Token</span><span class="p">]</span>
-</span><span id="Select-2491"><a href="#Select-2491"><span class="linenos">2491</span></a>
-</span><span id="Select-2492"><a href="#Select-2492"><span class="linenos">2492</span></a> <span class="n">natural</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="n">maybe_parse</span><span class="p">(</span><span class="n">join_type</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Select-2493"><a href="#Select-2493"><span class="linenos">2493</span></a>
-</span><span id="Select-2494"><a href="#Select-2494"><span class="linenos">2494</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
-</span><span id="Select-2495"><a href="#Select-2495"><span class="linenos">2495</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="Select-2496"><a href="#Select-2496"><span class="linenos">2496</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Select-2497"><a href="#Select-2497"><span class="linenos">2497</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">,</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Select-2498"><a href="#Select-2498"><span class="linenos">2498</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Select-2499"><a href="#Select-2499"><span class="linenos">2499</span></a> <span class="n">join</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">kind</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Select-2500"><a href="#Select-2500"><span class="linenos">2500</span></a>
-</span><span id="Select-2501"><a href="#Select-2501"><span class="linenos">2501</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
-</span><span id="Select-2502"><a href="#Select-2502"><span class="linenos">2502</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">on</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Select-2503"><a href="#Select-2503"><span class="linenos">2503</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</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="Select-2504"><a href="#Select-2504"><span class="linenos">2504</span></a>
-</span><span id="Select-2505"><a href="#Select-2505"><span class="linenos">2505</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Select-2506"><a href="#Select-2506"><span class="linenos">2506</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2507"><a href="#Select-2507"><span class="linenos">2507</span></a> <span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
-</span><span id="Select-2508"><a href="#Select-2508"><span class="linenos">2508</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
-</span><span id="Select-2509"><a href="#Select-2509"><span class="linenos">2509</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="Select-2510"><a href="#Select-2510"><span class="linenos">2510</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2511"><a href="#Select-2511"><span class="linenos">2511</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2512"><a href="#Select-2512"><span class="linenos">2512</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2513"><a href="#Select-2513"><span class="linenos">2513</span></a> <span class="p">)</span>
-</span><span id="Select-2514"><a href="#Select-2514"><span class="linenos">2514</span></a>
-</span><span id="Select-2515"><a href="#Select-2515"><span class="linenos">2515</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
-</span><span id="Select-2516"><a href="#Select-2516"><span class="linenos">2516</span></a> <span class="n">join</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">alias_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">join_alias</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="Select-2517"><a href="#Select-2517"><span class="linenos">2517</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2518"><a href="#Select-2518"><span class="linenos">2518</span></a> <span class="n">join</span><span class="p">,</span>
-</span><span id="Select-2519"><a href="#Select-2519"><span class="linenos">2519</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2520"><a href="#Select-2520"><span class="linenos">2520</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span>
-</span><span id="Select-2521"><a href="#Select-2521"><span class="linenos">2521</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2522"><a href="#Select-2522"><span class="linenos">2522</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2523"><a href="#Select-2523"><span class="linenos">2523</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2524"><a href="#Select-2524"><span class="linenos">2524</span></a> <span class="p">)</span>
+</span><span id="Select-2458"><a href="#Select-2458"><span class="linenos">2458</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2459"><a href="#Select-2459"><span class="linenos">2459</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).offset(10).sql()</span>
+</span><span id="Select-2460"><a href="#Select-2460"><span class="linenos">2460</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
+</span><span id="Select-2461"><a href="#Select-2461"><span class="linenos">2461</span></a>
+</span><span id="Select-2462"><a href="#Select-2462"><span class="linenos">2462</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2463"><a href="#Select-2463"><span class="linenos">2463</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="Select-2464"><a href="#Select-2464"><span class="linenos">2464</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select-2465"><a href="#Select-2465"><span class="linenos">2465</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
+</span><span id="Select-2466"><a href="#Select-2466"><span class="linenos">2466</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
+</span><span id="Select-2467"><a href="#Select-2467"><span class="linenos">2467</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select-2468"><a href="#Select-2468"><span class="linenos">2468</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2469"><a href="#Select-2469"><span class="linenos">2469</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2470"><a href="#Select-2470"><span class="linenos">2470</span></a>
+</span><span id="Select-2471"><a href="#Select-2471"><span class="linenos">2471</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2472"><a href="#Select-2472"><span class="linenos">2472</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2473"><a href="#Select-2473"><span class="linenos">2473</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2474"><a href="#Select-2474"><span class="linenos">2474</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select-2475"><a href="#Select-2475"><span class="linenos">2475</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select-2476"><a href="#Select-2476"><span class="linenos">2476</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2477"><a href="#Select-2477"><span class="linenos">2477</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span>
+</span><span id="Select-2478"><a href="#Select-2478"><span class="linenos">2478</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
+</span><span id="Select-2479"><a href="#Select-2479"><span class="linenos">2479</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span>
+</span><span id="Select-2480"><a href="#Select-2480"><span class="linenos">2480</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2481"><a href="#Select-2481"><span class="linenos">2481</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2482"><a href="#Select-2482"><span class="linenos">2482</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2483"><a href="#Select-2483"><span class="linenos">2483</span></a> <span class="p">)</span>
+</span><span id="Select-2484"><a href="#Select-2484"><span class="linenos">2484</span></a>
+</span><span id="Select-2485"><a href="#Select-2485"><span class="linenos">2485</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Select-2486"><a href="#Select-2486"><span class="linenos">2486</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2487"><a href="#Select-2487"><span class="linenos">2487</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Select-2488"><a href="#Select-2488"><span class="linenos">2488</span></a> <span class="n">append</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="Select-2489"><a href="#Select-2489"><span class="linenos">2489</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="Select-2490"><a href="#Select-2490"><span class="linenos">2490</span></a> <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><span id="Select-2491"><a href="#Select-2491"><span class="linenos">2491</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2492"><a href="#Select-2492"><span class="linenos">2492</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2493"><a href="#Select-2493"><span class="linenos">2493</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2494"><a href="#Select-2494"><span class="linenos">2494</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
+</span><span id="Select-2495"><a href="#Select-2495"><span class="linenos">2495</span></a>
+</span><span id="Select-2496"><a href="#Select-2496"><span class="linenos">2496</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2497"><a href="#Select-2497"><span class="linenos">2497</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
+</span><span id="Select-2498"><a href="#Select-2498"><span class="linenos">2498</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
+</span><span id="Select-2499"><a href="#Select-2499"><span class="linenos">2499</span></a>
+</span><span id="Select-2500"><a href="#Select-2500"><span class="linenos">2500</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2501"><a href="#Select-2501"><span class="linenos">2501</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select-2502"><a href="#Select-2502"><span class="linenos">2502</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2503"><a href="#Select-2503"><span class="linenos">2503</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select-2504"><a href="#Select-2504"><span class="linenos">2504</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select-2505"><a href="#Select-2505"><span class="linenos">2505</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select-2506"><a href="#Select-2506"><span class="linenos">2506</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2507"><a href="#Select-2507"><span class="linenos">2507</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select-2508"><a href="#Select-2508"><span class="linenos">2508</span></a>
+</span><span id="Select-2509"><a href="#Select-2509"><span class="linenos">2509</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2510"><a href="#Select-2510"><span class="linenos">2510</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2511"><a href="#Select-2511"><span class="linenos">2511</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2512"><a href="#Select-2512"><span class="linenos">2512</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-2513"><a href="#Select-2513"><span class="linenos">2513</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2514"><a href="#Select-2514"><span class="linenos">2514</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2515"><a href="#Select-2515"><span class="linenos">2515</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
+</span><span id="Select-2516"><a href="#Select-2516"><span class="linenos">2516</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2517"><a href="#Select-2517"><span class="linenos">2517</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2518"><a href="#Select-2518"><span class="linenos">2518</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2519"><a href="#Select-2519"><span class="linenos">2519</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2520"><a href="#Select-2520"><span class="linenos">2520</span></a> <span class="p">)</span>
+</span><span id="Select-2521"><a href="#Select-2521"><span class="linenos">2521</span></a>
+</span><span id="Select-2522"><a href="#Select-2522"><span class="linenos">2522</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2523"><a href="#Select-2523"><span class="linenos">2523</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2524"><a href="#Select-2524"><span class="linenos">2524</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
</span><span id="Select-2525"><a href="#Select-2525"><span class="linenos">2525</span></a>
-</span><span id="Select-2526"><a href="#Select-2526"><span class="linenos">2526</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2527"><a href="#Select-2527"><span class="linenos">2527</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2528"><a href="#Select-2528"><span class="linenos">2528</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Select-2526"><a href="#Select-2526"><span class="linenos">2526</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2527"><a href="#Select-2527"><span class="linenos">2527</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).lateral(&quot;OUTER explode(y) tbl2 AS z&quot;).from_(&quot;tbl&quot;).sql()</span>
+</span><span id="Select-2528"><a href="#Select-2528"><span class="linenos">2528</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
</span><span id="Select-2529"><a href="#Select-2529"><span class="linenos">2529</span></a>
-</span><span id="Select-2530"><a href="#Select-2530"><span class="linenos">2530</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2531"><a href="#Select-2531"><span class="linenos">2531</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
-</span><span id="Select-2532"><a href="#Select-2532"><span class="linenos">2532</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
-</span><span id="Select-2533"><a href="#Select-2533"><span class="linenos">2533</span></a>
-</span><span id="Select-2534"><a href="#Select-2534"><span class="linenos">2534</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2535"><a href="#Select-2535"><span class="linenos">2535</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2536"><a href="#Select-2536"><span class="linenos">2536</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2537"><a href="#Select-2537"><span class="linenos">2537</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select-2538"><a href="#Select-2538"><span class="linenos">2538</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select-2539"><a href="#Select-2539"><span class="linenos">2539</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select-2540"><a href="#Select-2540"><span class="linenos">2540</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select-2541"><a href="#Select-2541"><span class="linenos">2541</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2542"><a href="#Select-2542"><span class="linenos">2542</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select-2543"><a href="#Select-2543"><span class="linenos">2543</span></a>
-</span><span id="Select-2544"><a href="#Select-2544"><span class="linenos">2544</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2545"><a href="#Select-2545"><span class="linenos">2545</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2546"><a href="#Select-2546"><span class="linenos">2546</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2547"><a href="#Select-2547"><span class="linenos">2547</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select-2548"><a href="#Select-2548"><span class="linenos">2548</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2549"><a href="#Select-2549"><span class="linenos">2549</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2550"><a href="#Select-2550"><span class="linenos">2550</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="Select-2551"><a href="#Select-2551"><span class="linenos">2551</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2552"><a href="#Select-2552"><span class="linenos">2552</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Select-2553"><a href="#Select-2553"><span class="linenos">2553</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2554"><a href="#Select-2554"><span class="linenos">2554</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2555"><a href="#Select-2555"><span class="linenos">2555</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2556"><a href="#Select-2556"><span class="linenos">2556</span></a> <span class="p">)</span>
-</span><span id="Select-2557"><a href="#Select-2557"><span class="linenos">2557</span></a>
-</span><span id="Select-2558"><a href="#Select-2558"><span class="linenos">2558</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2559"><a href="#Select-2559"><span class="linenos">2559</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2560"><a href="#Select-2560"><span class="linenos">2560</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
-</span><span id="Select-2561"><a href="#Select-2561"><span class="linenos">2561</span></a>
-</span><span id="Select-2562"><a href="#Select-2562"><span class="linenos">2562</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2563"><a href="#Select-2563"><span class="linenos">2563</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;COUNT(y)&quot;).from_(&quot;tbl&quot;).group_by(&quot;x&quot;).having(&quot;COUNT(y) &gt; 3&quot;).sql()</span>
-</span><span id="Select-2564"><a href="#Select-2564"><span class="linenos">2564</span></a><span class="sd"> &#39;SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) &gt; 3&#39;</span>
-</span><span id="Select-2565"><a href="#Select-2565"><span class="linenos">2565</span></a>
-</span><span id="Select-2566"><a href="#Select-2566"><span class="linenos">2566</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2567"><a href="#Select-2567"><span class="linenos">2567</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select-2568"><a href="#Select-2568"><span class="linenos">2568</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2569"><a href="#Select-2569"><span class="linenos">2569</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select-2570"><a href="#Select-2570"><span class="linenos">2570</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select-2571"><a href="#Select-2571"><span class="linenos">2571</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select-2572"><a href="#Select-2572"><span class="linenos">2572</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select-2573"><a href="#Select-2573"><span class="linenos">2573</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2574"><a href="#Select-2574"><span class="linenos">2574</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2530"><a href="#Select-2530"><span class="linenos">2530</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2531"><a href="#Select-2531"><span class="linenos">2531</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2532"><a href="#Select-2532"><span class="linenos">2532</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2533"><a href="#Select-2533"><span class="linenos">2533</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select-2534"><a href="#Select-2534"><span class="linenos">2534</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select-2535"><a href="#Select-2535"><span class="linenos">2535</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select-2536"><a href="#Select-2536"><span class="linenos">2536</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2537"><a href="#Select-2537"><span class="linenos">2537</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2538"><a href="#Select-2538"><span class="linenos">2538</span></a>
+</span><span id="Select-2539"><a href="#Select-2539"><span class="linenos">2539</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2540"><a href="#Select-2540"><span class="linenos">2540</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2541"><a href="#Select-2541"><span class="linenos">2541</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2542"><a href="#Select-2542"><span class="linenos">2542</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-2543"><a href="#Select-2543"><span class="linenos">2543</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2544"><a href="#Select-2544"><span class="linenos">2544</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2545"><a href="#Select-2545"><span class="linenos">2545</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
+</span><span id="Select-2546"><a href="#Select-2546"><span class="linenos">2546</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2547"><a href="#Select-2547"><span class="linenos">2547</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="Select-2548"><a href="#Select-2548"><span class="linenos">2548</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LATERAL VIEW&quot;</span><span class="p">,</span>
+</span><span id="Select-2549"><a href="#Select-2549"><span class="linenos">2549</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2550"><a href="#Select-2550"><span class="linenos">2550</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2551"><a href="#Select-2551"><span class="linenos">2551</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2552"><a href="#Select-2552"><span class="linenos">2552</span></a> <span class="p">)</span>
+</span><span id="Select-2553"><a href="#Select-2553"><span class="linenos">2553</span></a>
+</span><span id="Select-2554"><a href="#Select-2554"><span class="linenos">2554</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
+</span><span id="Select-2555"><a href="#Select-2555"><span class="linenos">2555</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2556"><a href="#Select-2556"><span class="linenos">2556</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Select-2557"><a href="#Select-2557"><span class="linenos">2557</span></a> <span class="n">on</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select-2558"><a href="#Select-2558"><span class="linenos">2558</span></a> <span class="n">using</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select-2559"><a href="#Select-2559"><span class="linenos">2559</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Select-2560"><a href="#Select-2560"><span class="linenos">2560</span></a> <span class="n">join_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select-2561"><a href="#Select-2561"><span class="linenos">2561</span></a> <span class="n">join_alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select-2562"><a href="#Select-2562"><span class="linenos">2562</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select-2563"><a href="#Select-2563"><span class="linenos">2563</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Select-2564"><a href="#Select-2564"><span class="linenos">2564</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2565"><a href="#Select-2565"><span class="linenos">2565</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select-2566"><a href="#Select-2566"><span class="linenos">2566</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2567"><a href="#Select-2567"><span class="linenos">2567</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
+</span><span id="Select-2568"><a href="#Select-2568"><span class="linenos">2568</span></a>
+</span><span id="Select-2569"><a href="#Select-2569"><span class="linenos">2569</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2570"><a href="#Select-2570"><span class="linenos">2570</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;).sql()</span>
+</span><span id="Select-2571"><a href="#Select-2571"><span class="linenos">2571</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="Select-2572"><a href="#Select-2572"><span class="linenos">2572</span></a>
+</span><span id="Select-2573"><a href="#Select-2573"><span class="linenos">2573</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;1&quot;).from_(&quot;a&quot;).join(&quot;b&quot;, using=[&quot;x&quot;, &quot;y&quot;, &quot;z&quot;]).sql()</span>
+</span><span id="Select-2574"><a href="#Select-2574"><span class="linenos">2574</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
</span><span id="Select-2575"><a href="#Select-2575"><span class="linenos">2575</span></a>
-</span><span id="Select-2576"><a href="#Select-2576"><span class="linenos">2576</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2577"><a href="#Select-2577"><span class="linenos">2577</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2578"><a href="#Select-2578"><span class="linenos">2578</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2579"><a href="#Select-2579"><span class="linenos">2579</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select-2580"><a href="#Select-2580"><span class="linenos">2580</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2581"><a href="#Select-2581"><span class="linenos">2581</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2582"><a href="#Select-2582"><span class="linenos">2582</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;having&quot;</span><span class="p">,</span>
-</span><span id="Select-2583"><a href="#Select-2583"><span class="linenos">2583</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2584"><a href="#Select-2584"><span class="linenos">2584</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
-</span><span id="Select-2585"><a href="#Select-2585"><span class="linenos">2585</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2586"><a href="#Select-2586"><span class="linenos">2586</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2587"><a href="#Select-2587"><span class="linenos">2587</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2588"><a href="#Select-2588"><span class="linenos">2588</span></a> <span class="p">)</span>
-</span><span id="Select-2589"><a href="#Select-2589"><span class="linenos">2589</span></a>
-</span><span id="Select-2590"><a href="#Select-2590"><span class="linenos">2590</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2591"><a href="#Select-2591"><span class="linenos">2591</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select-2592"><a href="#Select-2592"><span class="linenos">2592</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2593"><a href="#Select-2593"><span class="linenos">2593</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2594"><a href="#Select-2594"><span class="linenos">2594</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span>
-</span><span id="Select-2595"><a href="#Select-2595"><span class="linenos">2595</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2596"><a href="#Select-2596"><span class="linenos">2596</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="Select-2597"><a href="#Select-2597"><span class="linenos">2597</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2598"><a href="#Select-2598"><span class="linenos">2598</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2599"><a href="#Select-2599"><span class="linenos">2599</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2600"><a href="#Select-2600"><span class="linenos">2600</span></a> <span class="p">)</span>
-</span><span id="Select-2601"><a href="#Select-2601"><span class="linenos">2601</span></a>
-</span><span id="Select-2602"><a href="#Select-2602"><span class="linenos">2602</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2603"><a href="#Select-2603"><span class="linenos">2603</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select-2604"><a href="#Select-2604"><span class="linenos">2604</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select-2605"><a href="#Select-2605"><span class="linenos">2605</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select-2606"><a href="#Select-2606"><span class="linenos">2606</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
-</span><span id="Select-2607"><a href="#Select-2607"><span class="linenos">2607</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select-2608"><a href="#Select-2608"><span class="linenos">2608</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
-</span><span id="Select-2609"><a href="#Select-2609"><span class="linenos">2609</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2610"><a href="#Select-2610"><span class="linenos">2610</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select-2611"><a href="#Select-2611"><span class="linenos">2611</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2612"><a href="#Select-2612"><span class="linenos">2612</span></a> <span class="p">)</span>
-</span><span id="Select-2613"><a href="#Select-2613"><span class="linenos">2613</span></a>
-</span><span id="Select-2614"><a href="#Select-2614"><span class="linenos">2614</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select-2615"><a href="#Select-2615"><span class="linenos">2615</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2616"><a href="#Select-2616"><span class="linenos">2616</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="Select-2617"><a href="#Select-2617"><span class="linenos">2617</span></a>
-</span><span id="Select-2618"><a href="#Select-2618"><span class="linenos">2618</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2619"><a href="#Select-2619"><span class="linenos">2619</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
-</span><span id="Select-2620"><a href="#Select-2620"><span class="linenos">2620</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
-</span><span id="Select-2621"><a href="#Select-2621"><span class="linenos">2621</span></a>
-</span><span id="Select-2622"><a href="#Select-2622"><span class="linenos">2622</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2623"><a href="#Select-2623"><span class="linenos">2623</span></a><span class="sd"> distinct (bool): whether the Select should be distinct</span>
-</span><span id="Select-2624"><a href="#Select-2624"><span class="linenos">2624</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2625"><a href="#Select-2625"><span class="linenos">2625</span></a>
-</span><span id="Select-2626"><a href="#Select-2626"><span class="linenos">2626</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2627"><a href="#Select-2627"><span class="linenos">2627</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select-2628"><a href="#Select-2628"><span class="linenos">2628</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2629"><a href="#Select-2629"><span class="linenos">2629</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Select-2630"><a href="#Select-2630"><span class="linenos">2630</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">,</span> <span class="n">Distinct</span><span class="p">()</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Select-2631"><a href="#Select-2631"><span class="linenos">2631</span></a> <span class="k">return</span> <span class="n">instance</span>
-</span><span id="Select-2632"><a href="#Select-2632"><span class="linenos">2632</span></a>
-</span><span id="Select-2633"><a href="#Select-2633"><span class="linenos">2633</span></a> <span class="k">def</span> <span class="nf">ctas</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">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Create</span><span class="p">:</span>
-</span><span id="Select-2634"><a href="#Select-2634"><span class="linenos">2634</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2635"><a href="#Select-2635"><span class="linenos">2635</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
-</span><span id="Select-2636"><a href="#Select-2636"><span class="linenos">2636</span></a>
-</span><span id="Select-2637"><a href="#Select-2637"><span class="linenos">2637</span></a><span class="sd"> Example:</span>
-</span><span id="Select-2638"><a href="#Select-2638"><span class="linenos">2638</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).ctas(&quot;x&quot;).sql()</span>
-</span><span id="Select-2639"><a href="#Select-2639"><span class="linenos">2639</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
-</span><span id="Select-2640"><a href="#Select-2640"><span class="linenos">2640</span></a>
-</span><span id="Select-2641"><a href="#Select-2641"><span class="linenos">2641</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2642"><a href="#Select-2642"><span class="linenos">2642</span></a><span class="sd"> table (str | Expression): the SQL code string to parse as the table name.</span>
-</span><span id="Select-2643"><a href="#Select-2643"><span class="linenos">2643</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select-2644"><a href="#Select-2644"><span class="linenos">2644</span></a><span class="sd"> properties (dict): an optional mapping of table properties</span>
-</span><span id="Select-2645"><a href="#Select-2645"><span class="linenos">2645</span></a><span class="sd"> dialect (str): the dialect used to parse the input table.</span>
-</span><span id="Select-2646"><a href="#Select-2646"><span class="linenos">2646</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select-2647"><a href="#Select-2647"><span class="linenos">2647</span></a><span class="sd"> opts (kwargs): other options to use to parse the input table.</span>
+</span><span id="Select-2576"><a href="#Select-2576"><span class="linenos">2576</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
+</span><span id="Select-2577"><a href="#Select-2577"><span class="linenos">2577</span></a>
+</span><span id="Select-2578"><a href="#Select-2578"><span class="linenos">2578</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;, join_type=&quot;left outer&quot;).sql()</span>
+</span><span id="Select-2579"><a href="#Select-2579"><span class="linenos">2579</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="Select-2580"><a href="#Select-2580"><span class="linenos">2580</span></a>
+</span><span id="Select-2581"><a href="#Select-2581"><span class="linenos">2581</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2582"><a href="#Select-2582"><span class="linenos">2582</span></a><span class="sd"> expression (str | Expression): the SQL code string to parse.</span>
+</span><span id="Select-2583"><a href="#Select-2583"><span class="linenos">2583</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2584"><a href="#Select-2584"><span class="linenos">2584</span></a><span class="sd"> on (str | Expression): optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
+</span><span id="Select-2585"><a href="#Select-2585"><span class="linenos">2585</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2586"><a href="#Select-2586"><span class="linenos">2586</span></a><span class="sd"> using (str | Expression): optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
+</span><span id="Select-2587"><a href="#Select-2587"><span class="linenos">2587</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2588"><a href="#Select-2588"><span class="linenos">2588</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select-2589"><a href="#Select-2589"><span class="linenos">2589</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select-2590"><a href="#Select-2590"><span class="linenos">2590</span></a><span class="sd"> join_type (str): If set, alter the parsed join type</span>
+</span><span id="Select-2591"><a href="#Select-2591"><span class="linenos">2591</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select-2592"><a href="#Select-2592"><span class="linenos">2592</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2593"><a href="#Select-2593"><span class="linenos">2593</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2594"><a href="#Select-2594"><span class="linenos">2594</span></a>
+</span><span id="Select-2595"><a href="#Select-2595"><span class="linenos">2595</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2596"><a href="#Select-2596"><span class="linenos">2596</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2597"><a href="#Select-2597"><span class="linenos">2597</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2598"><a href="#Select-2598"><span class="linenos">2598</span></a> <span class="n">parse_args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">}</span>
+</span><span id="Select-2599"><a href="#Select-2599"><span class="linenos">2599</span></a>
+</span><span id="Select-2600"><a href="#Select-2600"><span class="linenos">2600</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Select-2601"><a href="#Select-2601"><span class="linenos">2601</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Join</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;JOIN&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
+</span><span id="Select-2602"><a href="#Select-2602"><span class="linenos">2602</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="Select-2603"><a href="#Select-2603"><span class="linenos">2603</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="p">(</span><span class="n">Join</span><span class="p">,</span> <span class="n">Expression</span><span class="p">),</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
+</span><span id="Select-2604"><a href="#Select-2604"><span class="linenos">2604</span></a>
+</span><span id="Select-2605"><a href="#Select-2605"><span class="linenos">2605</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">expression</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">Join</span><span class="p">)</span> <span class="k">else</span> <span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Select-2606"><a href="#Select-2606"><span class="linenos">2606</span></a>
+</span><span id="Select-2607"><a href="#Select-2607"><span class="linenos">2607</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">Select</span><span class="p">):</span>
+</span><span id="Select-2608"><a href="#Select-2608"><span class="linenos">2608</span></a> <span class="n">join</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="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span>
+</span><span id="Select-2609"><a href="#Select-2609"><span class="linenos">2609</span></a>
+</span><span id="Select-2610"><a href="#Select-2610"><span class="linenos">2610</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
+</span><span id="Select-2611"><a href="#Select-2611"><span class="linenos">2611</span></a> <span class="n">natural</span><span 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="Select-2612"><a href="#Select-2612"><span class="linenos">2612</span></a> <span class="n">side</span><span 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="Select-2613"><a href="#Select-2613"><span class="linenos">2613</span></a> <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">Token</span><span class="p">]</span>
+</span><span id="Select-2614"><a href="#Select-2614"><span class="linenos">2614</span></a>
+</span><span id="Select-2615"><a href="#Select-2615"><span class="linenos">2615</span></a> <span class="n">natural</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="n">maybe_parse</span><span class="p">(</span><span class="n">join_type</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Select-2616"><a href="#Select-2616"><span class="linenos">2616</span></a>
+</span><span id="Select-2617"><a href="#Select-2617"><span class="linenos">2617</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
+</span><span id="Select-2618"><a href="#Select-2618"><span class="linenos">2618</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="Select-2619"><a href="#Select-2619"><span class="linenos">2619</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Select-2620"><a href="#Select-2620"><span class="linenos">2620</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">,</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Select-2621"><a href="#Select-2621"><span class="linenos">2621</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Select-2622"><a href="#Select-2622"><span class="linenos">2622</span></a> <span class="n">join</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">kind</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Select-2623"><a href="#Select-2623"><span class="linenos">2623</span></a>
+</span><span id="Select-2624"><a href="#Select-2624"><span class="linenos">2624</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
+</span><span id="Select-2625"><a href="#Select-2625"><span class="linenos">2625</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">on</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Select-2626"><a href="#Select-2626"><span class="linenos">2626</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</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="Select-2627"><a href="#Select-2627"><span class="linenos">2627</span></a>
+</span><span id="Select-2628"><a href="#Select-2628"><span class="linenos">2628</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Select-2629"><a href="#Select-2629"><span class="linenos">2629</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-2630"><a href="#Select-2630"><span class="linenos">2630</span></a> <span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
+</span><span id="Select-2631"><a href="#Select-2631"><span class="linenos">2631</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
+</span><span id="Select-2632"><a href="#Select-2632"><span class="linenos">2632</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="Select-2633"><a href="#Select-2633"><span class="linenos">2633</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2634"><a href="#Select-2634"><span class="linenos">2634</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2635"><a href="#Select-2635"><span class="linenos">2635</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2636"><a href="#Select-2636"><span class="linenos">2636</span></a> <span class="p">)</span>
+</span><span id="Select-2637"><a href="#Select-2637"><span class="linenos">2637</span></a>
+</span><span id="Select-2638"><a href="#Select-2638"><span class="linenos">2638</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
+</span><span id="Select-2639"><a href="#Select-2639"><span class="linenos">2639</span></a> <span class="n">join</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">alias_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">join_alias</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="Select-2640"><a href="#Select-2640"><span class="linenos">2640</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-2641"><a href="#Select-2641"><span class="linenos">2641</span></a> <span class="n">join</span><span class="p">,</span>
+</span><span id="Select-2642"><a href="#Select-2642"><span class="linenos">2642</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2643"><a href="#Select-2643"><span class="linenos">2643</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span>
+</span><span id="Select-2644"><a href="#Select-2644"><span class="linenos">2644</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2645"><a href="#Select-2645"><span class="linenos">2645</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2646"><a href="#Select-2646"><span class="linenos">2646</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2647"><a href="#Select-2647"><span class="linenos">2647</span></a> <span class="p">)</span>
</span><span id="Select-2648"><a href="#Select-2648"><span class="linenos">2648</span></a>
-</span><span id="Select-2649"><a href="#Select-2649"><span class="linenos">2649</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2650"><a href="#Select-2650"><span class="linenos">2650</span></a><span class="sd"> Create: the CREATE TABLE AS expression</span>
-</span><span id="Select-2651"><a href="#Select-2651"><span class="linenos">2651</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select-2652"><a href="#Select-2652"><span class="linenos">2652</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Select-2653"><a href="#Select-2653"><span class="linenos">2653</span></a> <span class="n">table_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="Select-2654"><a href="#Select-2654"><span class="linenos">2654</span></a> <span class="n">table</span><span class="p">,</span>
-</span><span id="Select-2655"><a href="#Select-2655"><span class="linenos">2655</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="Select-2656"><a href="#Select-2656"><span class="linenos">2656</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select-2657"><a href="#Select-2657"><span class="linenos">2657</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select-2658"><a href="#Select-2658"><span class="linenos">2658</span></a> <span class="p">)</span>
-</span><span id="Select-2659"><a href="#Select-2659"><span class="linenos">2659</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Select-2660"><a href="#Select-2660"><span class="linenos">2660</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="Select-2661"><a href="#Select-2661"><span class="linenos">2661</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
-</span><span id="Select-2662"><a href="#Select-2662"><span class="linenos">2662</span></a>
-</span><span id="Select-2663"><a href="#Select-2663"><span class="linenos">2663</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
-</span><span id="Select-2664"><a href="#Select-2664"><span class="linenos">2664</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table_expression</span><span class="p">,</span>
-</span><span id="Select-2665"><a href="#Select-2665"><span class="linenos">2665</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;table&quot;</span><span class="p">,</span>
-</span><span id="Select-2666"><a href="#Select-2666"><span class="linenos">2666</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="Select-2667"><a href="#Select-2667"><span class="linenos">2667</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties_expression</span><span class="p">,</span>
-</span><span id="Select-2668"><a href="#Select-2668"><span class="linenos">2668</span></a> <span class="p">)</span>
-</span><span id="Select-2669"><a href="#Select-2669"><span class="linenos">2669</span></a>
-</span><span id="Select-2670"><a href="#Select-2670"><span class="linenos">2670</span></a> <span class="k">def</span> <span class="nf">lock</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">update</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="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="n">Select</span><span class="p">:</span>
-</span><span id="Select-2671"><a href="#Select-2671"><span class="linenos">2671</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select-2672"><a href="#Select-2672"><span class="linenos">2672</span></a><span class="sd"> Set the locking read mode for this expression.</span>
-</span><span id="Select-2673"><a href="#Select-2673"><span class="linenos">2673</span></a>
-</span><span id="Select-2674"><a href="#Select-2674"><span class="linenos">2674</span></a><span class="sd"> Examples:</span>
-</span><span id="Select-2675"><a href="#Select-2675"><span class="linenos">2675</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock().sql(&quot;mysql&quot;)</span>
-</span><span id="Select-2676"><a href="#Select-2676"><span class="linenos">2676</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
-</span><span id="Select-2677"><a href="#Select-2677"><span class="linenos">2677</span></a>
-</span><span id="Select-2678"><a href="#Select-2678"><span class="linenos">2678</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock(update=False).sql(&quot;mysql&quot;)</span>
-</span><span id="Select-2679"><a href="#Select-2679"><span class="linenos">2679</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
+</span><span id="Select-2649"><a href="#Select-2649"><span class="linenos">2649</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2650"><a href="#Select-2650"><span class="linenos">2650</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2651"><a href="#Select-2651"><span class="linenos">2651</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Select-2652"><a href="#Select-2652"><span class="linenos">2652</span></a>
+</span><span id="Select-2653"><a href="#Select-2653"><span class="linenos">2653</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2654"><a href="#Select-2654"><span class="linenos">2654</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
+</span><span id="Select-2655"><a href="#Select-2655"><span class="linenos">2655</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
+</span><span id="Select-2656"><a href="#Select-2656"><span class="linenos">2656</span></a>
+</span><span id="Select-2657"><a href="#Select-2657"><span class="linenos">2657</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2658"><a href="#Select-2658"><span class="linenos">2658</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2659"><a href="#Select-2659"><span class="linenos">2659</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2660"><a href="#Select-2660"><span class="linenos">2660</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select-2661"><a href="#Select-2661"><span class="linenos">2661</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select-2662"><a href="#Select-2662"><span class="linenos">2662</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select-2663"><a href="#Select-2663"><span class="linenos">2663</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select-2664"><a href="#Select-2664"><span class="linenos">2664</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2665"><a href="#Select-2665"><span class="linenos">2665</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2666"><a href="#Select-2666"><span class="linenos">2666</span></a>
+</span><span id="Select-2667"><a href="#Select-2667"><span class="linenos">2667</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2668"><a href="#Select-2668"><span class="linenos">2668</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2669"><a href="#Select-2669"><span class="linenos">2669</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2670"><a href="#Select-2670"><span class="linenos">2670</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select-2671"><a href="#Select-2671"><span class="linenos">2671</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2672"><a href="#Select-2672"><span class="linenos">2672</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2673"><a href="#Select-2673"><span class="linenos">2673</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="Select-2674"><a href="#Select-2674"><span class="linenos">2674</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2675"><a href="#Select-2675"><span class="linenos">2675</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Select-2676"><a href="#Select-2676"><span class="linenos">2676</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2677"><a href="#Select-2677"><span class="linenos">2677</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2678"><a href="#Select-2678"><span class="linenos">2678</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2679"><a href="#Select-2679"><span class="linenos">2679</span></a> <span class="p">)</span>
</span><span id="Select-2680"><a href="#Select-2680"><span class="linenos">2680</span></a>
-</span><span id="Select-2681"><a href="#Select-2681"><span class="linenos">2681</span></a><span class="sd"> Args:</span>
-</span><span id="Select-2682"><a href="#Select-2682"><span class="linenos">2682</span></a><span class="sd"> update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`.</span>
-</span><span id="Select-2683"><a href="#Select-2683"><span class="linenos">2683</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2681"><a href="#Select-2681"><span class="linenos">2681</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2682"><a href="#Select-2682"><span class="linenos">2682</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2683"><a href="#Select-2683"><span class="linenos">2683</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
</span><span id="Select-2684"><a href="#Select-2684"><span class="linenos">2684</span></a>
-</span><span id="Select-2685"><a href="#Select-2685"><span class="linenos">2685</span></a><span class="sd"> Returns:</span>
-</span><span id="Select-2686"><a href="#Select-2686"><span class="linenos">2686</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Select-2687"><a href="#Select-2687"><span class="linenos">2687</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2685"><a href="#Select-2685"><span class="linenos">2685</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2686"><a href="#Select-2686"><span class="linenos">2686</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;COUNT(y)&quot;).from_(&quot;tbl&quot;).group_by(&quot;x&quot;).having(&quot;COUNT(y) &gt; 3&quot;).sql()</span>
+</span><span id="Select-2687"><a href="#Select-2687"><span class="linenos">2687</span></a><span class="sd"> &#39;SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) &gt; 3&#39;</span>
</span><span id="Select-2688"><a href="#Select-2688"><span class="linenos">2688</span></a>
-</span><span id="Select-2689"><a href="#Select-2689"><span class="linenos">2689</span></a> <span class="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Select-2690"><a href="#Select-2690"><span class="linenos">2690</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;lock&quot;</span><span class="p">,</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><span id="Select-2691"><a href="#Select-2691"><span class="linenos">2691</span></a>
-</span><span id="Select-2692"><a href="#Select-2692"><span class="linenos">2692</span></a> <span class="k">return</span> <span class="n">inst</span>
-</span><span id="Select-2693"><a href="#Select-2693"><span class="linenos">2693</span></a>
-</span><span id="Select-2694"><a href="#Select-2694"><span class="linenos">2694</span></a> <span class="nd">@property</span>
-</span><span id="Select-2695"><a href="#Select-2695"><span class="linenos">2695</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="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="Select-2696"><a href="#Select-2696"><span class="linenos">2696</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span>
-</span><span id="Select-2697"><a href="#Select-2697"><span class="linenos">2697</span></a>
-</span><span id="Select-2698"><a href="#Select-2698"><span class="linenos">2698</span></a> <span class="nd">@property</span>
-</span><span id="Select-2699"><a href="#Select-2699"><span class="linenos">2699</span></a> <span class="k">def</span> <span class="nf">is_star</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="Select-2700"><a href="#Select-2700"><span class="linenos">2700</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <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">expressions</span><span class="p">)</span>
-</span><span id="Select-2701"><a href="#Select-2701"><span class="linenos">2701</span></a>
-</span><span id="Select-2702"><a href="#Select-2702"><span class="linenos">2702</span></a> <span class="nd">@property</span>
-</span><span id="Select-2703"><a href="#Select-2703"><span class="linenos">2703</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="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">Expression</span><span class="p">]:</span>
-</span><span id="Select-2704"><a href="#Select-2704"><span class="linenos">2704</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Select-2689"><a href="#Select-2689"><span class="linenos">2689</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2690"><a href="#Select-2690"><span class="linenos">2690</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select-2691"><a href="#Select-2691"><span class="linenos">2691</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2692"><a href="#Select-2692"><span class="linenos">2692</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select-2693"><a href="#Select-2693"><span class="linenos">2693</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select-2694"><a href="#Select-2694"><span class="linenos">2694</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select-2695"><a href="#Select-2695"><span class="linenos">2695</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select-2696"><a href="#Select-2696"><span class="linenos">2696</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2697"><a href="#Select-2697"><span class="linenos">2697</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select-2698"><a href="#Select-2698"><span class="linenos">2698</span></a>
+</span><span id="Select-2699"><a href="#Select-2699"><span class="linenos">2699</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2700"><a href="#Select-2700"><span class="linenos">2700</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2701"><a href="#Select-2701"><span class="linenos">2701</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2702"><a href="#Select-2702"><span class="linenos">2702</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select-2703"><a href="#Select-2703"><span class="linenos">2703</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2704"><a href="#Select-2704"><span class="linenos">2704</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2705"><a href="#Select-2705"><span class="linenos">2705</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;having&quot;</span><span class="p">,</span>
+</span><span id="Select-2706"><a href="#Select-2706"><span class="linenos">2706</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2707"><a href="#Select-2707"><span class="linenos">2707</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
+</span><span id="Select-2708"><a href="#Select-2708"><span class="linenos">2708</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2709"><a href="#Select-2709"><span class="linenos">2709</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2710"><a href="#Select-2710"><span class="linenos">2710</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2711"><a href="#Select-2711"><span class="linenos">2711</span></a> <span class="p">)</span>
+</span><span id="Select-2712"><a href="#Select-2712"><span class="linenos">2712</span></a>
+</span><span id="Select-2713"><a href="#Select-2713"><span class="linenos">2713</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2714"><a href="#Select-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select-2715"><a href="#Select-2715"><span class="linenos">2715</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2716"><a href="#Select-2716"><span class="linenos">2716</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2717"><a href="#Select-2717"><span class="linenos">2717</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span>
+</span><span id="Select-2718"><a href="#Select-2718"><span class="linenos">2718</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2719"><a href="#Select-2719"><span class="linenos">2719</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="Select-2720"><a href="#Select-2720"><span class="linenos">2720</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2721"><a href="#Select-2721"><span class="linenos">2721</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2722"><a href="#Select-2722"><span class="linenos">2722</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2723"><a href="#Select-2723"><span class="linenos">2723</span></a> <span class="p">)</span>
+</span><span id="Select-2724"><a href="#Select-2724"><span class="linenos">2724</span></a>
+</span><span id="Select-2725"><a href="#Select-2725"><span class="linenos">2725</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2726"><a href="#Select-2726"><span class="linenos">2726</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select-2727"><a href="#Select-2727"><span class="linenos">2727</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select-2728"><a href="#Select-2728"><span class="linenos">2728</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select-2729"><a href="#Select-2729"><span class="linenos">2729</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
+</span><span id="Select-2730"><a href="#Select-2730"><span class="linenos">2730</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select-2731"><a href="#Select-2731"><span class="linenos">2731</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
+</span><span id="Select-2732"><a href="#Select-2732"><span class="linenos">2732</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2733"><a href="#Select-2733"><span class="linenos">2733</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select-2734"><a href="#Select-2734"><span class="linenos">2734</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2735"><a href="#Select-2735"><span class="linenos">2735</span></a> <span class="p">)</span>
+</span><span id="Select-2736"><a href="#Select-2736"><span class="linenos">2736</span></a>
+</span><span id="Select-2737"><a href="#Select-2737"><span class="linenos">2737</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">ons</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">distinct</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="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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2738"><a href="#Select-2738"><span class="linenos">2738</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2739"><a href="#Select-2739"><span class="linenos">2739</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="Select-2740"><a href="#Select-2740"><span class="linenos">2740</span></a>
+</span><span id="Select-2741"><a href="#Select-2741"><span class="linenos">2741</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2742"><a href="#Select-2742"><span class="linenos">2742</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
+</span><span id="Select-2743"><a href="#Select-2743"><span class="linenos">2743</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
+</span><span id="Select-2744"><a href="#Select-2744"><span class="linenos">2744</span></a>
+</span><span id="Select-2745"><a href="#Select-2745"><span class="linenos">2745</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2746"><a href="#Select-2746"><span class="linenos">2746</span></a><span class="sd"> ons: the expressions to distinct on</span>
+</span><span id="Select-2747"><a href="#Select-2747"><span class="linenos">2747</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
+</span><span id="Select-2748"><a href="#Select-2748"><span class="linenos">2748</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2749"><a href="#Select-2749"><span class="linenos">2749</span></a>
+</span><span id="Select-2750"><a href="#Select-2750"><span class="linenos">2750</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2751"><a href="#Select-2751"><span class="linenos">2751</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select-2752"><a href="#Select-2752"><span class="linenos">2752</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2753"><a href="#Select-2753"><span class="linenos">2753</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Select-2754"><a href="#Select-2754"><span class="linenos">2754</span></a> <span class="n">on</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">maybe_parse</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">on</span> <span class="ow">in</span> <span class="n">ons</span><span class="p">])</span> <span class="k">if</span> <span class="n">ons</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Select-2755"><a href="#Select-2755"><span class="linenos">2755</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">,</span> <span class="n">Distinct</span><span class="p">(</span><span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">)</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Select-2756"><a href="#Select-2756"><span class="linenos">2756</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="Select-2757"><a href="#Select-2757"><span class="linenos">2757</span></a>
+</span><span id="Select-2758"><a href="#Select-2758"><span class="linenos">2758</span></a> <span class="k">def</span> <span class="nf">ctas</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">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Create</span><span class="p">:</span>
+</span><span id="Select-2759"><a href="#Select-2759"><span class="linenos">2759</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2760"><a href="#Select-2760"><span class="linenos">2760</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
+</span><span id="Select-2761"><a href="#Select-2761"><span class="linenos">2761</span></a>
+</span><span id="Select-2762"><a href="#Select-2762"><span class="linenos">2762</span></a><span class="sd"> Example:</span>
+</span><span id="Select-2763"><a href="#Select-2763"><span class="linenos">2763</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).ctas(&quot;x&quot;).sql()</span>
+</span><span id="Select-2764"><a href="#Select-2764"><span class="linenos">2764</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
+</span><span id="Select-2765"><a href="#Select-2765"><span class="linenos">2765</span></a>
+</span><span id="Select-2766"><a href="#Select-2766"><span class="linenos">2766</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2767"><a href="#Select-2767"><span class="linenos">2767</span></a><span class="sd"> table (str | Expression): the SQL code string to parse as the table name.</span>
+</span><span id="Select-2768"><a href="#Select-2768"><span class="linenos">2768</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select-2769"><a href="#Select-2769"><span class="linenos">2769</span></a><span class="sd"> properties (dict): an optional mapping of table properties</span>
+</span><span id="Select-2770"><a href="#Select-2770"><span class="linenos">2770</span></a><span class="sd"> dialect (str): the dialect used to parse the input table.</span>
+</span><span id="Select-2771"><a href="#Select-2771"><span class="linenos">2771</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2772"><a href="#Select-2772"><span class="linenos">2772</span></a><span class="sd"> opts (kwargs): other options to use to parse the input table.</span>
+</span><span id="Select-2773"><a href="#Select-2773"><span class="linenos">2773</span></a>
+</span><span id="Select-2774"><a href="#Select-2774"><span class="linenos">2774</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2775"><a href="#Select-2775"><span class="linenos">2775</span></a><span class="sd"> Create: the CREATE TABLE AS expression</span>
+</span><span id="Select-2776"><a href="#Select-2776"><span class="linenos">2776</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2777"><a href="#Select-2777"><span class="linenos">2777</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Select-2778"><a href="#Select-2778"><span class="linenos">2778</span></a> <span class="n">table_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="Select-2779"><a href="#Select-2779"><span class="linenos">2779</span></a> <span class="n">table</span><span class="p">,</span>
+</span><span id="Select-2780"><a href="#Select-2780"><span class="linenos">2780</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="Select-2781"><a href="#Select-2781"><span class="linenos">2781</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select-2782"><a href="#Select-2782"><span class="linenos">2782</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select-2783"><a href="#Select-2783"><span class="linenos">2783</span></a> <span class="p">)</span>
+</span><span id="Select-2784"><a href="#Select-2784"><span class="linenos">2784</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Select-2785"><a href="#Select-2785"><span class="linenos">2785</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="Select-2786"><a href="#Select-2786"><span class="linenos">2786</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
+</span><span id="Select-2787"><a href="#Select-2787"><span class="linenos">2787</span></a>
+</span><span id="Select-2788"><a href="#Select-2788"><span class="linenos">2788</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
+</span><span id="Select-2789"><a href="#Select-2789"><span class="linenos">2789</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table_expression</span><span class="p">,</span>
+</span><span id="Select-2790"><a href="#Select-2790"><span class="linenos">2790</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;table&quot;</span><span class="p">,</span>
+</span><span id="Select-2791"><a href="#Select-2791"><span class="linenos">2791</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="Select-2792"><a href="#Select-2792"><span class="linenos">2792</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties_expression</span><span class="p">,</span>
+</span><span id="Select-2793"><a href="#Select-2793"><span class="linenos">2793</span></a> <span class="p">)</span>
+</span><span id="Select-2794"><a href="#Select-2794"><span class="linenos">2794</span></a>
+</span><span id="Select-2795"><a href="#Select-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">lock</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">update</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="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="n">Select</span><span class="p">:</span>
+</span><span id="Select-2796"><a href="#Select-2796"><span class="linenos">2796</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select-2797"><a href="#Select-2797"><span class="linenos">2797</span></a><span class="sd"> Set the locking read mode for this expression.</span>
+</span><span id="Select-2798"><a href="#Select-2798"><span class="linenos">2798</span></a>
+</span><span id="Select-2799"><a href="#Select-2799"><span class="linenos">2799</span></a><span class="sd"> Examples:</span>
+</span><span id="Select-2800"><a href="#Select-2800"><span class="linenos">2800</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock().sql(&quot;mysql&quot;)</span>
+</span><span id="Select-2801"><a href="#Select-2801"><span class="linenos">2801</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
+</span><span id="Select-2802"><a href="#Select-2802"><span class="linenos">2802</span></a>
+</span><span id="Select-2803"><a href="#Select-2803"><span class="linenos">2803</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock(update=False).sql(&quot;mysql&quot;)</span>
+</span><span id="Select-2804"><a href="#Select-2804"><span class="linenos">2804</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
+</span><span id="Select-2805"><a href="#Select-2805"><span class="linenos">2805</span></a>
+</span><span id="Select-2806"><a href="#Select-2806"><span class="linenos">2806</span></a><span class="sd"> Args:</span>
+</span><span id="Select-2807"><a href="#Select-2807"><span class="linenos">2807</span></a><span class="sd"> update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`.</span>
+</span><span id="Select-2808"><a href="#Select-2808"><span class="linenos">2808</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select-2809"><a href="#Select-2809"><span class="linenos">2809</span></a>
+</span><span id="Select-2810"><a href="#Select-2810"><span class="linenos">2810</span></a><span class="sd"> Returns:</span>
+</span><span id="Select-2811"><a href="#Select-2811"><span class="linenos">2811</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Select-2812"><a href="#Select-2812"><span class="linenos">2812</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select-2813"><a href="#Select-2813"><span class="linenos">2813</span></a>
+</span><span id="Select-2814"><a href="#Select-2814"><span class="linenos">2814</span></a> <span class="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Select-2815"><a href="#Select-2815"><span class="linenos">2815</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;lock&quot;</span><span class="p">,</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><span id="Select-2816"><a href="#Select-2816"><span class="linenos">2816</span></a>
+</span><span id="Select-2817"><a href="#Select-2817"><span class="linenos">2817</span></a> <span class="k">return</span> <span class="n">inst</span>
+</span><span id="Select-2818"><a href="#Select-2818"><span class="linenos">2818</span></a>
+</span><span id="Select-2819"><a href="#Select-2819"><span class="linenos">2819</span></a> <span class="nd">@property</span>
+</span><span id="Select-2820"><a href="#Select-2820"><span class="linenos">2820</span></a> <span class="k">def</span> <span class="nf">named_selects</span><span class="p">(</span><span class="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="Select-2821"><a href="#Select-2821"><span class="linenos">2821</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">output_name</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span>
+</span><span id="Select-2822"><a href="#Select-2822"><span class="linenos">2822</span></a>
+</span><span id="Select-2823"><a href="#Select-2823"><span class="linenos">2823</span></a> <span class="nd">@property</span>
+</span><span id="Select-2824"><a href="#Select-2824"><span class="linenos">2824</span></a> <span class="k">def</span> <span class="nf">is_star</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="Select-2825"><a href="#Select-2825"><span class="linenos">2825</span></a> <span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">is_star</span> <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">expressions</span><span class="p">)</span>
+</span><span id="Select-2826"><a href="#Select-2826"><span class="linenos">2826</span></a>
+</span><span id="Select-2827"><a href="#Select-2827"><span class="linenos">2827</span></a> <span class="nd">@property</span>
+</span><span id="Select-2828"><a href="#Select-2828"><span class="linenos">2828</span></a> <span class="k">def</span> <span class="nf">selects</span><span class="p">(</span><span class="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">Expression</span><span class="p">]:</span>
+</span><span id="Select-2829"><a href="#Select-2829"><span class="linenos">2829</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
</span></pre></div>
@@ -22844,38 +23346,38 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Select.from_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.from_-2132"><a href="#Select.from_-2132"><span class="linenos">2132</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.from_-2133"><a href="#Select.from_-2133"><span class="linenos">2133</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.from_-2134"><a href="#Select.from_-2134"><span class="linenos">2134</span></a><span class="sd"> Set the FROM expression.</span>
-</span><span id="Select.from_-2135"><a href="#Select.from_-2135"><span class="linenos">2135</span></a>
-</span><span id="Select.from_-2136"><a href="#Select.from_-2136"><span class="linenos">2136</span></a><span class="sd"> Example:</span>
-</span><span id="Select.from_-2137"><a href="#Select.from_-2137"><span class="linenos">2137</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
-</span><span id="Select.from_-2138"><a href="#Select.from_-2138"><span class="linenos">2138</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</span>
-</span><span id="Select.from_-2139"><a href="#Select.from_-2139"><span class="linenos">2139</span></a>
-</span><span id="Select.from_-2140"><a href="#Select.from_-2140"><span class="linenos">2140</span></a><span class="sd"> Args:</span>
-</span><span id="Select.from_-2141"><a href="#Select.from_-2141"><span class="linenos">2141</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.from_-2142"><a href="#Select.from_-2142"><span class="linenos">2142</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
-</span><span id="Select.from_-2143"><a href="#Select.from_-2143"><span class="linenos">2143</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
-</span><span id="Select.from_-2144"><a href="#Select.from_-2144"><span class="linenos">2144</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select.from_-2145"><a href="#Select.from_-2145"><span class="linenos">2145</span></a><span class="sd"> Otherwise, this flattens all the `From` expression into a single expression.</span>
-</span><span id="Select.from_-2146"><a href="#Select.from_-2146"><span class="linenos">2146</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select.from_-2147"><a href="#Select.from_-2147"><span class="linenos">2147</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.from_-2148"><a href="#Select.from_-2148"><span class="linenos">2148</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.from_-2149"><a href="#Select.from_-2149"><span class="linenos">2149</span></a>
-</span><span id="Select.from_-2150"><a href="#Select.from_-2150"><span class="linenos">2150</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.from_-2151"><a href="#Select.from_-2151"><span class="linenos">2151</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.from_-2152"><a href="#Select.from_-2152"><span class="linenos">2152</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.from_-2153"><a href="#Select.from_-2153"><span class="linenos">2153</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select.from_-2154"><a href="#Select.from_-2154"><span class="linenos">2154</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.from_-2155"><a href="#Select.from_-2155"><span class="linenos">2155</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.from_-2156"><a href="#Select.from_-2156"><span class="linenos">2156</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="Select.from_-2157"><a href="#Select.from_-2157"><span class="linenos">2157</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.from_-2158"><a href="#Select.from_-2158"><span class="linenos">2158</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.from_-2159"><a href="#Select.from_-2159"><span class="linenos">2159</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span>
-</span><span id="Select.from_-2160"><a href="#Select.from_-2160"><span class="linenos">2160</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
-</span><span id="Select.from_-2161"><a href="#Select.from_-2161"><span class="linenos">2161</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.from_-2162"><a href="#Select.from_-2162"><span class="linenos">2162</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.from_-2163"><a href="#Select.from_-2163"><span class="linenos">2163</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.from_-2255"><a href="#Select.from_-2255"><span class="linenos">2255</span></a> <span class="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.from_-2256"><a href="#Select.from_-2256"><span class="linenos">2256</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.from_-2257"><a href="#Select.from_-2257"><span class="linenos">2257</span></a><span class="sd"> Set the FROM expression.</span>
+</span><span id="Select.from_-2258"><a href="#Select.from_-2258"><span class="linenos">2258</span></a>
+</span><span id="Select.from_-2259"><a href="#Select.from_-2259"><span class="linenos">2259</span></a><span class="sd"> Example:</span>
+</span><span id="Select.from_-2260"><a href="#Select.from_-2260"><span class="linenos">2260</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sql()</span>
+</span><span id="Select.from_-2261"><a href="#Select.from_-2261"><span class="linenos">2261</span></a><span class="sd"> &#39;SELECT x FROM tbl&#39;</span>
+</span><span id="Select.from_-2262"><a href="#Select.from_-2262"><span class="linenos">2262</span></a>
+</span><span id="Select.from_-2263"><a href="#Select.from_-2263"><span class="linenos">2263</span></a><span class="sd"> Args:</span>
+</span><span id="Select.from_-2264"><a href="#Select.from_-2264"><span class="linenos">2264</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.from_-2265"><a href="#Select.from_-2265"><span class="linenos">2265</span></a><span class="sd"> If a `From` instance is passed, this is used as-is.</span>
+</span><span id="Select.from_-2266"><a href="#Select.from_-2266"><span class="linenos">2266</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `From`.</span>
+</span><span id="Select.from_-2267"><a href="#Select.from_-2267"><span class="linenos">2267</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select.from_-2268"><a href="#Select.from_-2268"><span class="linenos">2268</span></a><span class="sd"> Otherwise, this flattens all the `From` expression into a single expression.</span>
+</span><span id="Select.from_-2269"><a href="#Select.from_-2269"><span class="linenos">2269</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select.from_-2270"><a href="#Select.from_-2270"><span class="linenos">2270</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.from_-2271"><a href="#Select.from_-2271"><span class="linenos">2271</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.from_-2272"><a href="#Select.from_-2272"><span class="linenos">2272</span></a>
+</span><span id="Select.from_-2273"><a href="#Select.from_-2273"><span class="linenos">2273</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.from_-2274"><a href="#Select.from_-2274"><span class="linenos">2274</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.from_-2275"><a href="#Select.from_-2275"><span class="linenos">2275</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.from_-2276"><a href="#Select.from_-2276"><span class="linenos">2276</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select.from_-2277"><a href="#Select.from_-2277"><span class="linenos">2277</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.from_-2278"><a href="#Select.from_-2278"><span class="linenos">2278</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.from_-2279"><a href="#Select.from_-2279"><span class="linenos">2279</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="Select.from_-2280"><a href="#Select.from_-2280"><span class="linenos">2280</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.from_-2281"><a href="#Select.from_-2281"><span class="linenos">2281</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.from_-2282"><a href="#Select.from_-2282"><span class="linenos">2282</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span>
+</span><span id="Select.from_-2283"><a href="#Select.from_-2283"><span class="linenos">2283</span></a> <span class="n">into</span><span class="o">=</span><span class="n">From</span><span class="p">,</span>
+</span><span id="Select.from_-2284"><a href="#Select.from_-2284"><span class="linenos">2284</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.from_-2285"><a href="#Select.from_-2285"><span class="linenos">2285</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.from_-2286"><a href="#Select.from_-2286"><span class="linenos">2286</span></a> <span class="p">)</span>
</span></pre></div>
@@ -22924,41 +23426,41 @@ Otherwise, this flattens all the <code><a href="#From">From</a></code> expressio
</div>
<a class="headerlink" href="#Select.group_by"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.group_by-2165"><a href="#Select.group_by-2165"><span class="linenos">2165</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.group_by-2166"><a href="#Select.group_by-2166"><span class="linenos">2166</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.group_by-2167"><a href="#Select.group_by-2167"><span class="linenos">2167</span></a><span class="sd"> Set the GROUP BY expression.</span>
-</span><span id="Select.group_by-2168"><a href="#Select.group_by-2168"><span class="linenos">2168</span></a>
-</span><span id="Select.group_by-2169"><a href="#Select.group_by-2169"><span class="linenos">2169</span></a><span class="sd"> Example:</span>
-</span><span id="Select.group_by-2170"><a href="#Select.group_by-2170"><span class="linenos">2170</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;, &quot;COUNT(1)&quot;).group_by(&quot;x&quot;).sql()</span>
-</span><span id="Select.group_by-2171"><a href="#Select.group_by-2171"><span class="linenos">2171</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
-</span><span id="Select.group_by-2172"><a href="#Select.group_by-2172"><span class="linenos">2172</span></a>
-</span><span id="Select.group_by-2173"><a href="#Select.group_by-2173"><span class="linenos">2173</span></a><span class="sd"> Args:</span>
-</span><span id="Select.group_by-2174"><a href="#Select.group_by-2174"><span class="linenos">2174</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.group_by-2175"><a href="#Select.group_by-2175"><span class="linenos">2175</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.group_by-2176"><a href="#Select.group_by-2176"><span class="linenos">2176</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
-</span><span id="Select.group_by-2177"><a href="#Select.group_by-2177"><span class="linenos">2177</span></a><span class="sd"> If nothing is passed in then a group by is not applied to the expression</span>
-</span><span id="Select.group_by-2178"><a href="#Select.group_by-2178"><span class="linenos">2178</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select.group_by-2179"><a href="#Select.group_by-2179"><span class="linenos">2179</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
-</span><span id="Select.group_by-2180"><a href="#Select.group_by-2180"><span class="linenos">2180</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select.group_by-2181"><a href="#Select.group_by-2181"><span class="linenos">2181</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.group_by-2182"><a href="#Select.group_by-2182"><span class="linenos">2182</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.group_by-2183"><a href="#Select.group_by-2183"><span class="linenos">2183</span></a>
-</span><span id="Select.group_by-2184"><a href="#Select.group_by-2184"><span class="linenos">2184</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.group_by-2185"><a href="#Select.group_by-2185"><span class="linenos">2185</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.group_by-2186"><a href="#Select.group_by-2186"><span class="linenos">2186</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.group_by-2187"><a href="#Select.group_by-2187"><span class="linenos">2187</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Select.group_by-2188"><a href="#Select.group_by-2188"><span class="linenos">2188</span></a> <span class="k">return</span> <span class="bp">self</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="Select.group_by-2189"><a href="#Select.group_by-2189"><span class="linenos">2189</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select.group_by-2190"><a href="#Select.group_by-2190"><span class="linenos">2190</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.group_by-2191"><a href="#Select.group_by-2191"><span class="linenos">2191</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.group_by-2192"><a href="#Select.group_by-2192"><span class="linenos">2192</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;group&quot;</span><span class="p">,</span>
-</span><span id="Select.group_by-2193"><a href="#Select.group_by-2193"><span class="linenos">2193</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.group_by-2194"><a href="#Select.group_by-2194"><span class="linenos">2194</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.group_by-2195"><a href="#Select.group_by-2195"><span class="linenos">2195</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span>
-</span><span id="Select.group_by-2196"><a href="#Select.group_by-2196"><span class="linenos">2196</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
-</span><span id="Select.group_by-2197"><a href="#Select.group_by-2197"><span class="linenos">2197</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.group_by-2198"><a href="#Select.group_by-2198"><span class="linenos">2198</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.group_by-2199"><a href="#Select.group_by-2199"><span class="linenos">2199</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.group_by-2288"><a href="#Select.group_by-2288"><span class="linenos">2288</span></a> <span class="k">def</span> <span class="nf">group_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.group_by-2289"><a href="#Select.group_by-2289"><span class="linenos">2289</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.group_by-2290"><a href="#Select.group_by-2290"><span class="linenos">2290</span></a><span class="sd"> Set the GROUP BY expression.</span>
+</span><span id="Select.group_by-2291"><a href="#Select.group_by-2291"><span class="linenos">2291</span></a>
+</span><span id="Select.group_by-2292"><a href="#Select.group_by-2292"><span class="linenos">2292</span></a><span class="sd"> Example:</span>
+</span><span id="Select.group_by-2293"><a href="#Select.group_by-2293"><span class="linenos">2293</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;, &quot;COUNT(1)&quot;).group_by(&quot;x&quot;).sql()</span>
+</span><span id="Select.group_by-2294"><a href="#Select.group_by-2294"><span class="linenos">2294</span></a><span class="sd"> &#39;SELECT x, COUNT(1) FROM tbl GROUP BY x&#39;</span>
+</span><span id="Select.group_by-2295"><a href="#Select.group_by-2295"><span class="linenos">2295</span></a>
+</span><span id="Select.group_by-2296"><a href="#Select.group_by-2296"><span class="linenos">2296</span></a><span class="sd"> Args:</span>
+</span><span id="Select.group_by-2297"><a href="#Select.group_by-2297"><span class="linenos">2297</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.group_by-2298"><a href="#Select.group_by-2298"><span class="linenos">2298</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.group_by-2299"><a href="#Select.group_by-2299"><span class="linenos">2299</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Group`.</span>
+</span><span id="Select.group_by-2300"><a href="#Select.group_by-2300"><span class="linenos">2300</span></a><span class="sd"> If nothing is passed in then a group by is not applied to the expression</span>
+</span><span id="Select.group_by-2301"><a href="#Select.group_by-2301"><span class="linenos">2301</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select.group_by-2302"><a href="#Select.group_by-2302"><span class="linenos">2302</span></a><span class="sd"> Otherwise, this flattens all the `Group` expression into a single expression.</span>
+</span><span id="Select.group_by-2303"><a href="#Select.group_by-2303"><span class="linenos">2303</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select.group_by-2304"><a href="#Select.group_by-2304"><span class="linenos">2304</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.group_by-2305"><a href="#Select.group_by-2305"><span class="linenos">2305</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.group_by-2306"><a href="#Select.group_by-2306"><span class="linenos">2306</span></a>
+</span><span id="Select.group_by-2307"><a href="#Select.group_by-2307"><span class="linenos">2307</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.group_by-2308"><a href="#Select.group_by-2308"><span class="linenos">2308</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.group_by-2309"><a href="#Select.group_by-2309"><span class="linenos">2309</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.group_by-2310"><a href="#Select.group_by-2310"><span class="linenos">2310</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Select.group_by-2311"><a href="#Select.group_by-2311"><span class="linenos">2311</span></a> <span class="k">return</span> <span class="bp">self</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="Select.group_by-2312"><a href="#Select.group_by-2312"><span class="linenos">2312</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select.group_by-2313"><a href="#Select.group_by-2313"><span class="linenos">2313</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.group_by-2314"><a href="#Select.group_by-2314"><span class="linenos">2314</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.group_by-2315"><a href="#Select.group_by-2315"><span class="linenos">2315</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;group&quot;</span><span class="p">,</span>
+</span><span id="Select.group_by-2316"><a href="#Select.group_by-2316"><span class="linenos">2316</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.group_by-2317"><a href="#Select.group_by-2317"><span class="linenos">2317</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.group_by-2318"><a href="#Select.group_by-2318"><span class="linenos">2318</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;GROUP BY&quot;</span><span class="p">,</span>
+</span><span id="Select.group_by-2319"><a href="#Select.group_by-2319"><span class="linenos">2319</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Group</span><span class="p">,</span>
+</span><span id="Select.group_by-2320"><a href="#Select.group_by-2320"><span class="linenos">2320</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.group_by-2321"><a href="#Select.group_by-2321"><span class="linenos">2321</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.group_by-2322"><a href="#Select.group_by-2322"><span class="linenos">2322</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23008,38 +23510,38 @@ Otherwise, this flattens all the <code><a href="#Group">Group</a></code> express
</div>
<a class="headerlink" href="#Select.order_by"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.order_by-2201"><a href="#Select.order_by-2201"><span class="linenos">2201</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.order_by-2202"><a href="#Select.order_by-2202"><span class="linenos">2202</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.order_by-2203"><a href="#Select.order_by-2203"><span class="linenos">2203</span></a><span class="sd"> Set the ORDER BY expression.</span>
-</span><span id="Select.order_by-2204"><a href="#Select.order_by-2204"><span class="linenos">2204</span></a>
-</span><span id="Select.order_by-2205"><a href="#Select.order_by-2205"><span class="linenos">2205</span></a><span class="sd"> Example:</span>
-</span><span id="Select.order_by-2206"><a href="#Select.order_by-2206"><span class="linenos">2206</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).order_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="Select.order_by-2207"><a href="#Select.order_by-2207"><span class="linenos">2207</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
-</span><span id="Select.order_by-2208"><a href="#Select.order_by-2208"><span class="linenos">2208</span></a>
-</span><span id="Select.order_by-2209"><a href="#Select.order_by-2209"><span class="linenos">2209</span></a><span class="sd"> Args:</span>
-</span><span id="Select.order_by-2210"><a href="#Select.order_by-2210"><span class="linenos">2210</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.order_by-2211"><a href="#Select.order_by-2211"><span class="linenos">2211</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.order_by-2212"><a href="#Select.order_by-2212"><span class="linenos">2212</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
-</span><span id="Select.order_by-2213"><a href="#Select.order_by-2213"><span class="linenos">2213</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select.order_by-2214"><a href="#Select.order_by-2214"><span class="linenos">2214</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select.order_by-2215"><a href="#Select.order_by-2215"><span class="linenos">2215</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select.order_by-2216"><a href="#Select.order_by-2216"><span class="linenos">2216</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.order_by-2217"><a href="#Select.order_by-2217"><span class="linenos">2217</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.order_by-2218"><a href="#Select.order_by-2218"><span class="linenos">2218</span></a>
-</span><span id="Select.order_by-2219"><a href="#Select.order_by-2219"><span class="linenos">2219</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.order_by-2220"><a href="#Select.order_by-2220"><span class="linenos">2220</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.order_by-2221"><a href="#Select.order_by-2221"><span class="linenos">2221</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.order_by-2222"><a href="#Select.order_by-2222"><span class="linenos">2222</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select.order_by-2223"><a href="#Select.order_by-2223"><span class="linenos">2223</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.order_by-2224"><a href="#Select.order_by-2224"><span class="linenos">2224</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.order_by-2225"><a href="#Select.order_by-2225"><span class="linenos">2225</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;order&quot;</span><span class="p">,</span>
-</span><span id="Select.order_by-2226"><a href="#Select.order_by-2226"><span class="linenos">2226</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.order_by-2227"><a href="#Select.order_by-2227"><span class="linenos">2227</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.order_by-2228"><a href="#Select.order_by-2228"><span class="linenos">2228</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ORDER BY&quot;</span><span class="p">,</span>
-</span><span id="Select.order_by-2229"><a href="#Select.order_by-2229"><span class="linenos">2229</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="Select.order_by-2230"><a href="#Select.order_by-2230"><span class="linenos">2230</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.order_by-2231"><a href="#Select.order_by-2231"><span class="linenos">2231</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.order_by-2232"><a href="#Select.order_by-2232"><span class="linenos">2232</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.order_by-2324"><a href="#Select.order_by-2324"><span class="linenos">2324</span></a> <span class="k">def</span> <span class="nf">order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.order_by-2325"><a href="#Select.order_by-2325"><span class="linenos">2325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.order_by-2326"><a href="#Select.order_by-2326"><span class="linenos">2326</span></a><span class="sd"> Set the ORDER BY expression.</span>
+</span><span id="Select.order_by-2327"><a href="#Select.order_by-2327"><span class="linenos">2327</span></a>
+</span><span id="Select.order_by-2328"><a href="#Select.order_by-2328"><span class="linenos">2328</span></a><span class="sd"> Example:</span>
+</span><span id="Select.order_by-2329"><a href="#Select.order_by-2329"><span class="linenos">2329</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).order_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="Select.order_by-2330"><a href="#Select.order_by-2330"><span class="linenos">2330</span></a><span class="sd"> &#39;SELECT x FROM tbl ORDER BY x DESC&#39;</span>
+</span><span id="Select.order_by-2331"><a href="#Select.order_by-2331"><span class="linenos">2331</span></a>
+</span><span id="Select.order_by-2332"><a href="#Select.order_by-2332"><span class="linenos">2332</span></a><span class="sd"> Args:</span>
+</span><span id="Select.order_by-2333"><a href="#Select.order_by-2333"><span class="linenos">2333</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.order_by-2334"><a href="#Select.order_by-2334"><span class="linenos">2334</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.order_by-2335"><a href="#Select.order_by-2335"><span class="linenos">2335</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Order`.</span>
+</span><span id="Select.order_by-2336"><a href="#Select.order_by-2336"><span class="linenos">2336</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select.order_by-2337"><a href="#Select.order_by-2337"><span class="linenos">2337</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select.order_by-2338"><a href="#Select.order_by-2338"><span class="linenos">2338</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select.order_by-2339"><a href="#Select.order_by-2339"><span class="linenos">2339</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.order_by-2340"><a href="#Select.order_by-2340"><span class="linenos">2340</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.order_by-2341"><a href="#Select.order_by-2341"><span class="linenos">2341</span></a>
+</span><span id="Select.order_by-2342"><a href="#Select.order_by-2342"><span class="linenos">2342</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.order_by-2343"><a href="#Select.order_by-2343"><span class="linenos">2343</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.order_by-2344"><a href="#Select.order_by-2344"><span class="linenos">2344</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.order_by-2345"><a href="#Select.order_by-2345"><span class="linenos">2345</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select.order_by-2346"><a href="#Select.order_by-2346"><span class="linenos">2346</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.order_by-2347"><a href="#Select.order_by-2347"><span class="linenos">2347</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.order_by-2348"><a href="#Select.order_by-2348"><span class="linenos">2348</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;order&quot;</span><span class="p">,</span>
+</span><span id="Select.order_by-2349"><a href="#Select.order_by-2349"><span class="linenos">2349</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.order_by-2350"><a href="#Select.order_by-2350"><span class="linenos">2350</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.order_by-2351"><a href="#Select.order_by-2351"><span class="linenos">2351</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;ORDER BY&quot;</span><span class="p">,</span>
+</span><span id="Select.order_by-2352"><a href="#Select.order_by-2352"><span class="linenos">2352</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="Select.order_by-2353"><a href="#Select.order_by-2353"><span class="linenos">2353</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.order_by-2354"><a href="#Select.order_by-2354"><span class="linenos">2354</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.order_by-2355"><a href="#Select.order_by-2355"><span class="linenos">2355</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23088,38 +23590,38 @@ Otherwise, this flattens all the <code><a href="#Order">Order</a></code> express
</div>
<a class="headerlink" href="#Select.sort_by"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.sort_by-2234"><a href="#Select.sort_by-2234"><span class="linenos">2234</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.sort_by-2235"><a href="#Select.sort_by-2235"><span class="linenos">2235</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.sort_by-2236"><a href="#Select.sort_by-2236"><span class="linenos">2236</span></a><span class="sd"> Set the SORT BY expression.</span>
-</span><span id="Select.sort_by-2237"><a href="#Select.sort_by-2237"><span class="linenos">2237</span></a>
-</span><span id="Select.sort_by-2238"><a href="#Select.sort_by-2238"><span class="linenos">2238</span></a><span class="sd"> Example:</span>
-</span><span id="Select.sort_by-2239"><a href="#Select.sort_by-2239"><span class="linenos">2239</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="Select.sort_by-2240"><a href="#Select.sort_by-2240"><span class="linenos">2240</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</span>
-</span><span id="Select.sort_by-2241"><a href="#Select.sort_by-2241"><span class="linenos">2241</span></a>
-</span><span id="Select.sort_by-2242"><a href="#Select.sort_by-2242"><span class="linenos">2242</span></a><span class="sd"> Args:</span>
-</span><span id="Select.sort_by-2243"><a href="#Select.sort_by-2243"><span class="linenos">2243</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.sort_by-2244"><a href="#Select.sort_by-2244"><span class="linenos">2244</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.sort_by-2245"><a href="#Select.sort_by-2245"><span class="linenos">2245</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
-</span><span id="Select.sort_by-2246"><a href="#Select.sort_by-2246"><span class="linenos">2246</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select.sort_by-2247"><a href="#Select.sort_by-2247"><span class="linenos">2247</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select.sort_by-2248"><a href="#Select.sort_by-2248"><span class="linenos">2248</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select.sort_by-2249"><a href="#Select.sort_by-2249"><span class="linenos">2249</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.sort_by-2250"><a href="#Select.sort_by-2250"><span class="linenos">2250</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.sort_by-2251"><a href="#Select.sort_by-2251"><span class="linenos">2251</span></a>
-</span><span id="Select.sort_by-2252"><a href="#Select.sort_by-2252"><span class="linenos">2252</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.sort_by-2253"><a href="#Select.sort_by-2253"><span class="linenos">2253</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.sort_by-2254"><a href="#Select.sort_by-2254"><span class="linenos">2254</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.sort_by-2255"><a href="#Select.sort_by-2255"><span class="linenos">2255</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select.sort_by-2256"><a href="#Select.sort_by-2256"><span class="linenos">2256</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.sort_by-2257"><a href="#Select.sort_by-2257"><span class="linenos">2257</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.sort_by-2258"><a href="#Select.sort_by-2258"><span class="linenos">2258</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span>
-</span><span id="Select.sort_by-2259"><a href="#Select.sort_by-2259"><span class="linenos">2259</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.sort_by-2260"><a href="#Select.sort_by-2260"><span class="linenos">2260</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.sort_by-2261"><a href="#Select.sort_by-2261"><span class="linenos">2261</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span>
-</span><span id="Select.sort_by-2262"><a href="#Select.sort_by-2262"><span class="linenos">2262</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
-</span><span id="Select.sort_by-2263"><a href="#Select.sort_by-2263"><span class="linenos">2263</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.sort_by-2264"><a href="#Select.sort_by-2264"><span class="linenos">2264</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.sort_by-2265"><a href="#Select.sort_by-2265"><span class="linenos">2265</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.sort_by-2357"><a href="#Select.sort_by-2357"><span class="linenos">2357</span></a> <span class="k">def</span> <span class="nf">sort_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.sort_by-2358"><a href="#Select.sort_by-2358"><span class="linenos">2358</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.sort_by-2359"><a href="#Select.sort_by-2359"><span class="linenos">2359</span></a><span class="sd"> Set the SORT BY expression.</span>
+</span><span id="Select.sort_by-2360"><a href="#Select.sort_by-2360"><span class="linenos">2360</span></a>
+</span><span id="Select.sort_by-2361"><a href="#Select.sort_by-2361"><span class="linenos">2361</span></a><span class="sd"> Example:</span>
+</span><span id="Select.sort_by-2362"><a href="#Select.sort_by-2362"><span class="linenos">2362</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).sort_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="Select.sort_by-2363"><a href="#Select.sort_by-2363"><span class="linenos">2363</span></a><span class="sd"> &#39;SELECT x FROM tbl SORT BY x DESC&#39;</span>
+</span><span id="Select.sort_by-2364"><a href="#Select.sort_by-2364"><span class="linenos">2364</span></a>
+</span><span id="Select.sort_by-2365"><a href="#Select.sort_by-2365"><span class="linenos">2365</span></a><span class="sd"> Args:</span>
+</span><span id="Select.sort_by-2366"><a href="#Select.sort_by-2366"><span class="linenos">2366</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.sort_by-2367"><a href="#Select.sort_by-2367"><span class="linenos">2367</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.sort_by-2368"><a href="#Select.sort_by-2368"><span class="linenos">2368</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `SORT`.</span>
+</span><span id="Select.sort_by-2369"><a href="#Select.sort_by-2369"><span class="linenos">2369</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select.sort_by-2370"><a href="#Select.sort_by-2370"><span class="linenos">2370</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select.sort_by-2371"><a href="#Select.sort_by-2371"><span class="linenos">2371</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select.sort_by-2372"><a href="#Select.sort_by-2372"><span class="linenos">2372</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.sort_by-2373"><a href="#Select.sort_by-2373"><span class="linenos">2373</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.sort_by-2374"><a href="#Select.sort_by-2374"><span class="linenos">2374</span></a>
+</span><span id="Select.sort_by-2375"><a href="#Select.sort_by-2375"><span class="linenos">2375</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.sort_by-2376"><a href="#Select.sort_by-2376"><span class="linenos">2376</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.sort_by-2377"><a href="#Select.sort_by-2377"><span class="linenos">2377</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.sort_by-2378"><a href="#Select.sort_by-2378"><span class="linenos">2378</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select.sort_by-2379"><a href="#Select.sort_by-2379"><span class="linenos">2379</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.sort_by-2380"><a href="#Select.sort_by-2380"><span class="linenos">2380</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.sort_by-2381"><a href="#Select.sort_by-2381"><span class="linenos">2381</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span>
+</span><span id="Select.sort_by-2382"><a href="#Select.sort_by-2382"><span class="linenos">2382</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.sort_by-2383"><a href="#Select.sort_by-2383"><span class="linenos">2383</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.sort_by-2384"><a href="#Select.sort_by-2384"><span class="linenos">2384</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;SORT BY&quot;</span><span class="p">,</span>
+</span><span id="Select.sort_by-2385"><a href="#Select.sort_by-2385"><span class="linenos">2385</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Sort</span><span class="p">,</span>
+</span><span id="Select.sort_by-2386"><a href="#Select.sort_by-2386"><span class="linenos">2386</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.sort_by-2387"><a href="#Select.sort_by-2387"><span class="linenos">2387</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.sort_by-2388"><a href="#Select.sort_by-2388"><span class="linenos">2388</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23168,38 +23670,38 @@ Otherwise, this flattens all the <code><a href="#Order">Order</a></code> express
</div>
<a class="headerlink" href="#Select.cluster_by"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.cluster_by-2267"><a href="#Select.cluster_by-2267"><span class="linenos">2267</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.cluster_by-2268"><a href="#Select.cluster_by-2268"><span class="linenos">2268</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.cluster_by-2269"><a href="#Select.cluster_by-2269"><span class="linenos">2269</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
-</span><span id="Select.cluster_by-2270"><a href="#Select.cluster_by-2270"><span class="linenos">2270</span></a>
-</span><span id="Select.cluster_by-2271"><a href="#Select.cluster_by-2271"><span class="linenos">2271</span></a><span class="sd"> Example:</span>
-</span><span id="Select.cluster_by-2272"><a href="#Select.cluster_by-2272"><span class="linenos">2272</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql()</span>
-</span><span id="Select.cluster_by-2273"><a href="#Select.cluster_by-2273"><span class="linenos">2273</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
-</span><span id="Select.cluster_by-2274"><a href="#Select.cluster_by-2274"><span class="linenos">2274</span></a>
-</span><span id="Select.cluster_by-2275"><a href="#Select.cluster_by-2275"><span class="linenos">2275</span></a><span class="sd"> Args:</span>
-</span><span id="Select.cluster_by-2276"><a href="#Select.cluster_by-2276"><span class="linenos">2276</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.cluster_by-2277"><a href="#Select.cluster_by-2277"><span class="linenos">2277</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
-</span><span id="Select.cluster_by-2278"><a href="#Select.cluster_by-2278"><span class="linenos">2278</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
-</span><span id="Select.cluster_by-2279"><a href="#Select.cluster_by-2279"><span class="linenos">2279</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select.cluster_by-2280"><a href="#Select.cluster_by-2280"><span class="linenos">2280</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
-</span><span id="Select.cluster_by-2281"><a href="#Select.cluster_by-2281"><span class="linenos">2281</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select.cluster_by-2282"><a href="#Select.cluster_by-2282"><span class="linenos">2282</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.cluster_by-2283"><a href="#Select.cluster_by-2283"><span class="linenos">2283</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.cluster_by-2284"><a href="#Select.cluster_by-2284"><span class="linenos">2284</span></a>
-</span><span id="Select.cluster_by-2285"><a href="#Select.cluster_by-2285"><span class="linenos">2285</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.cluster_by-2286"><a href="#Select.cluster_by-2286"><span class="linenos">2286</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.cluster_by-2287"><a href="#Select.cluster_by-2287"><span class="linenos">2287</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.cluster_by-2288"><a href="#Select.cluster_by-2288"><span class="linenos">2288</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
-</span><span id="Select.cluster_by-2289"><a href="#Select.cluster_by-2289"><span class="linenos">2289</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2290"><a href="#Select.cluster_by-2290"><span class="linenos">2290</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2291"><a href="#Select.cluster_by-2291"><span class="linenos">2291</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2292"><a href="#Select.cluster_by-2292"><span class="linenos">2292</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2293"><a href="#Select.cluster_by-2293"><span class="linenos">2293</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2294"><a href="#Select.cluster_by-2294"><span class="linenos">2294</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2295"><a href="#Select.cluster_by-2295"><span class="linenos">2295</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2296"><a href="#Select.cluster_by-2296"><span class="linenos">2296</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2297"><a href="#Select.cluster_by-2297"><span class="linenos">2297</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.cluster_by-2298"><a href="#Select.cluster_by-2298"><span class="linenos">2298</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.cluster_by-2390"><a href="#Select.cluster_by-2390"><span class="linenos">2390</span></a> <span class="k">def</span> <span class="nf">cluster_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.cluster_by-2391"><a href="#Select.cluster_by-2391"><span class="linenos">2391</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.cluster_by-2392"><a href="#Select.cluster_by-2392"><span class="linenos">2392</span></a><span class="sd"> Set the CLUSTER BY expression.</span>
+</span><span id="Select.cluster_by-2393"><a href="#Select.cluster_by-2393"><span class="linenos">2393</span></a>
+</span><span id="Select.cluster_by-2394"><a href="#Select.cluster_by-2394"><span class="linenos">2394</span></a><span class="sd"> Example:</span>
+</span><span id="Select.cluster_by-2395"><a href="#Select.cluster_by-2395"><span class="linenos">2395</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).cluster_by(&quot;x DESC&quot;).sql()</span>
+</span><span id="Select.cluster_by-2396"><a href="#Select.cluster_by-2396"><span class="linenos">2396</span></a><span class="sd"> &#39;SELECT x FROM tbl CLUSTER BY x DESC&#39;</span>
+</span><span id="Select.cluster_by-2397"><a href="#Select.cluster_by-2397"><span class="linenos">2397</span></a>
+</span><span id="Select.cluster_by-2398"><a href="#Select.cluster_by-2398"><span class="linenos">2398</span></a><span class="sd"> Args:</span>
+</span><span id="Select.cluster_by-2399"><a href="#Select.cluster_by-2399"><span class="linenos">2399</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.cluster_by-2400"><a href="#Select.cluster_by-2400"><span class="linenos">2400</span></a><span class="sd"> If a `Group` instance is passed, this is used as-is.</span>
+</span><span id="Select.cluster_by-2401"><a href="#Select.cluster_by-2401"><span class="linenos">2401</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Cluster`.</span>
+</span><span id="Select.cluster_by-2402"><a href="#Select.cluster_by-2402"><span class="linenos">2402</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select.cluster_by-2403"><a href="#Select.cluster_by-2403"><span class="linenos">2403</span></a><span class="sd"> Otherwise, this flattens all the `Order` expression into a single expression.</span>
+</span><span id="Select.cluster_by-2404"><a href="#Select.cluster_by-2404"><span class="linenos">2404</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select.cluster_by-2405"><a href="#Select.cluster_by-2405"><span class="linenos">2405</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.cluster_by-2406"><a href="#Select.cluster_by-2406"><span class="linenos">2406</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.cluster_by-2407"><a href="#Select.cluster_by-2407"><span class="linenos">2407</span></a>
+</span><span id="Select.cluster_by-2408"><a href="#Select.cluster_by-2408"><span class="linenos">2408</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.cluster_by-2409"><a href="#Select.cluster_by-2409"><span class="linenos">2409</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.cluster_by-2410"><a href="#Select.cluster_by-2410"><span class="linenos">2410</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.cluster_by-2411"><a href="#Select.cluster_by-2411"><span class="linenos">2411</span></a> <span class="k">return</span> <span class="n">_apply_child_list_builder</span><span class="p">(</span>
+</span><span id="Select.cluster_by-2412"><a href="#Select.cluster_by-2412"><span class="linenos">2412</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2413"><a href="#Select.cluster_by-2413"><span class="linenos">2413</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2414"><a href="#Select.cluster_by-2414"><span class="linenos">2414</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2415"><a href="#Select.cluster_by-2415"><span class="linenos">2415</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2416"><a href="#Select.cluster_by-2416"><span class="linenos">2416</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2417"><a href="#Select.cluster_by-2417"><span class="linenos">2417</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2418"><a href="#Select.cluster_by-2418"><span class="linenos">2418</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Cluster</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2419"><a href="#Select.cluster_by-2419"><span class="linenos">2419</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2420"><a href="#Select.cluster_by-2420"><span class="linenos">2420</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.cluster_by-2421"><a href="#Select.cluster_by-2421"><span class="linenos">2421</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23248,36 +23750,36 @@ Otherwise, this flattens all the <code><a href="#Order">Order</a></code> express
</div>
<a class="headerlink" href="#Select.limit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.limit-2300"><a href="#Select.limit-2300"><span class="linenos">2300</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.limit-2301"><a href="#Select.limit-2301"><span class="linenos">2301</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.limit-2302"><a href="#Select.limit-2302"><span class="linenos">2302</span></a><span class="sd"> Set the LIMIT expression.</span>
-</span><span id="Select.limit-2303"><a href="#Select.limit-2303"><span class="linenos">2303</span></a>
-</span><span id="Select.limit-2304"><a href="#Select.limit-2304"><span class="linenos">2304</span></a><span class="sd"> Example:</span>
-</span><span id="Select.limit-2305"><a href="#Select.limit-2305"><span class="linenos">2305</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).limit(10).sql()</span>
-</span><span id="Select.limit-2306"><a href="#Select.limit-2306"><span class="linenos">2306</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
-</span><span id="Select.limit-2307"><a href="#Select.limit-2307"><span class="linenos">2307</span></a>
-</span><span id="Select.limit-2308"><a href="#Select.limit-2308"><span class="linenos">2308</span></a><span class="sd"> Args:</span>
-</span><span id="Select.limit-2309"><a href="#Select.limit-2309"><span class="linenos">2309</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="Select.limit-2310"><a href="#Select.limit-2310"><span class="linenos">2310</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select.limit-2311"><a href="#Select.limit-2311"><span class="linenos">2311</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
-</span><span id="Select.limit-2312"><a href="#Select.limit-2312"><span class="linenos">2312</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
-</span><span id="Select.limit-2313"><a href="#Select.limit-2313"><span class="linenos">2313</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select.limit-2314"><a href="#Select.limit-2314"><span class="linenos">2314</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.limit-2315"><a href="#Select.limit-2315"><span class="linenos">2315</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.limit-2316"><a href="#Select.limit-2316"><span class="linenos">2316</span></a>
-</span><span id="Select.limit-2317"><a href="#Select.limit-2317"><span class="linenos">2317</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.limit-2318"><a href="#Select.limit-2318"><span class="linenos">2318</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.limit-2319"><a href="#Select.limit-2319"><span class="linenos">2319</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.limit-2320"><a href="#Select.limit-2320"><span class="linenos">2320</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select.limit-2321"><a href="#Select.limit-2321"><span class="linenos">2321</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select.limit-2322"><a href="#Select.limit-2322"><span class="linenos">2322</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.limit-2323"><a href="#Select.limit-2323"><span class="linenos">2323</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span>
-</span><span id="Select.limit-2324"><a href="#Select.limit-2324"><span class="linenos">2324</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
-</span><span id="Select.limit-2325"><a href="#Select.limit-2325"><span class="linenos">2325</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">,</span>
-</span><span id="Select.limit-2326"><a href="#Select.limit-2326"><span class="linenos">2326</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.limit-2327"><a href="#Select.limit-2327"><span class="linenos">2327</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.limit-2328"><a href="#Select.limit-2328"><span class="linenos">2328</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.limit-2329"><a href="#Select.limit-2329"><span class="linenos">2329</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.limit-2423"><a href="#Select.limit-2423"><span class="linenos">2423</span></a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.limit-2424"><a href="#Select.limit-2424"><span class="linenos">2424</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.limit-2425"><a href="#Select.limit-2425"><span class="linenos">2425</span></a><span class="sd"> Set the LIMIT expression.</span>
+</span><span id="Select.limit-2426"><a href="#Select.limit-2426"><span class="linenos">2426</span></a>
+</span><span id="Select.limit-2427"><a href="#Select.limit-2427"><span class="linenos">2427</span></a><span class="sd"> Example:</span>
+</span><span id="Select.limit-2428"><a href="#Select.limit-2428"><span class="linenos">2428</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).limit(10).sql()</span>
+</span><span id="Select.limit-2429"><a href="#Select.limit-2429"><span class="linenos">2429</span></a><span class="sd"> &#39;SELECT x FROM tbl LIMIT 10&#39;</span>
+</span><span id="Select.limit-2430"><a href="#Select.limit-2430"><span class="linenos">2430</span></a>
+</span><span id="Select.limit-2431"><a href="#Select.limit-2431"><span class="linenos">2431</span></a><span class="sd"> Args:</span>
+</span><span id="Select.limit-2432"><a href="#Select.limit-2432"><span class="linenos">2432</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="Select.limit-2433"><a href="#Select.limit-2433"><span class="linenos">2433</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select.limit-2434"><a href="#Select.limit-2434"><span class="linenos">2434</span></a><span class="sd"> If a `Limit` instance is passed, this is used as-is.</span>
+</span><span id="Select.limit-2435"><a href="#Select.limit-2435"><span class="linenos">2435</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Limit`.</span>
+</span><span id="Select.limit-2436"><a href="#Select.limit-2436"><span class="linenos">2436</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select.limit-2437"><a href="#Select.limit-2437"><span class="linenos">2437</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.limit-2438"><a href="#Select.limit-2438"><span class="linenos">2438</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.limit-2439"><a href="#Select.limit-2439"><span class="linenos">2439</span></a>
+</span><span id="Select.limit-2440"><a href="#Select.limit-2440"><span class="linenos">2440</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.limit-2441"><a href="#Select.limit-2441"><span class="linenos">2441</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.limit-2442"><a href="#Select.limit-2442"><span class="linenos">2442</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.limit-2443"><a href="#Select.limit-2443"><span class="linenos">2443</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select.limit-2444"><a href="#Select.limit-2444"><span class="linenos">2444</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select.limit-2445"><a href="#Select.limit-2445"><span class="linenos">2445</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.limit-2446"><a href="#Select.limit-2446"><span class="linenos">2446</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span>
+</span><span id="Select.limit-2447"><a href="#Select.limit-2447"><span class="linenos">2447</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="Select.limit-2448"><a href="#Select.limit-2448"><span class="linenos">2448</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LIMIT&quot;</span><span class="p">,</span>
+</span><span id="Select.limit-2449"><a href="#Select.limit-2449"><span class="linenos">2449</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.limit-2450"><a href="#Select.limit-2450"><span class="linenos">2450</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.limit-2451"><a href="#Select.limit-2451"><span class="linenos">2451</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.limit-2452"><a href="#Select.limit-2452"><span class="linenos">2452</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23325,36 +23827,36 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Select.offset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.offset-2331"><a href="#Select.offset-2331"><span class="linenos">2331</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.offset-2332"><a href="#Select.offset-2332"><span class="linenos">2332</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.offset-2333"><a href="#Select.offset-2333"><span class="linenos">2333</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="Select.offset-2334"><a href="#Select.offset-2334"><span class="linenos">2334</span></a>
-</span><span id="Select.offset-2335"><a href="#Select.offset-2335"><span class="linenos">2335</span></a><span class="sd"> Example:</span>
-</span><span id="Select.offset-2336"><a href="#Select.offset-2336"><span class="linenos">2336</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).offset(10).sql()</span>
-</span><span id="Select.offset-2337"><a href="#Select.offset-2337"><span class="linenos">2337</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
-</span><span id="Select.offset-2338"><a href="#Select.offset-2338"><span class="linenos">2338</span></a>
-</span><span id="Select.offset-2339"><a href="#Select.offset-2339"><span class="linenos">2339</span></a><span class="sd"> Args:</span>
-</span><span id="Select.offset-2340"><a href="#Select.offset-2340"><span class="linenos">2340</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
-</span><span id="Select.offset-2341"><a href="#Select.offset-2341"><span class="linenos">2341</span></a><span class="sd"> This can also be an integer.</span>
-</span><span id="Select.offset-2342"><a href="#Select.offset-2342"><span class="linenos">2342</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
-</span><span id="Select.offset-2343"><a href="#Select.offset-2343"><span class="linenos">2343</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
-</span><span id="Select.offset-2344"><a href="#Select.offset-2344"><span class="linenos">2344</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="Select.offset-2345"><a href="#Select.offset-2345"><span class="linenos">2345</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.offset-2346"><a href="#Select.offset-2346"><span class="linenos">2346</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.offset-2347"><a href="#Select.offset-2347"><span class="linenos">2347</span></a>
-</span><span id="Select.offset-2348"><a href="#Select.offset-2348"><span class="linenos">2348</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.offset-2349"><a href="#Select.offset-2349"><span class="linenos">2349</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.offset-2350"><a href="#Select.offset-2350"><span class="linenos">2350</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.offset-2351"><a href="#Select.offset-2351"><span class="linenos">2351</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
-</span><span id="Select.offset-2352"><a href="#Select.offset-2352"><span class="linenos">2352</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Select.offset-2353"><a href="#Select.offset-2353"><span class="linenos">2353</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.offset-2354"><a href="#Select.offset-2354"><span class="linenos">2354</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span>
-</span><span id="Select.offset-2355"><a href="#Select.offset-2355"><span class="linenos">2355</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
-</span><span id="Select.offset-2356"><a href="#Select.offset-2356"><span class="linenos">2356</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span>
-</span><span id="Select.offset-2357"><a href="#Select.offset-2357"><span class="linenos">2357</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.offset-2358"><a href="#Select.offset-2358"><span class="linenos">2358</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.offset-2359"><a href="#Select.offset-2359"><span class="linenos">2359</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.offset-2360"><a href="#Select.offset-2360"><span class="linenos">2360</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.offset-2454"><a href="#Select.offset-2454"><span class="linenos">2454</span></a> <span class="k">def</span> <span class="nf">offset</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.offset-2455"><a href="#Select.offset-2455"><span class="linenos">2455</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.offset-2456"><a href="#Select.offset-2456"><span class="linenos">2456</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="Select.offset-2457"><a href="#Select.offset-2457"><span class="linenos">2457</span></a>
+</span><span id="Select.offset-2458"><a href="#Select.offset-2458"><span class="linenos">2458</span></a><span class="sd"> Example:</span>
+</span><span id="Select.offset-2459"><a href="#Select.offset-2459"><span class="linenos">2459</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).offset(10).sql()</span>
+</span><span id="Select.offset-2460"><a href="#Select.offset-2460"><span class="linenos">2460</span></a><span class="sd"> &#39;SELECT x FROM tbl OFFSET 10&#39;</span>
+</span><span id="Select.offset-2461"><a href="#Select.offset-2461"><span class="linenos">2461</span></a>
+</span><span id="Select.offset-2462"><a href="#Select.offset-2462"><span class="linenos">2462</span></a><span class="sd"> Args:</span>
+</span><span id="Select.offset-2463"><a href="#Select.offset-2463"><span class="linenos">2463</span></a><span class="sd"> expression (str | int | Expression): the SQL code string to parse.</span>
+</span><span id="Select.offset-2464"><a href="#Select.offset-2464"><span class="linenos">2464</span></a><span class="sd"> This can also be an integer.</span>
+</span><span id="Select.offset-2465"><a href="#Select.offset-2465"><span class="linenos">2465</span></a><span class="sd"> If a `Offset` instance is passed, this is used as-is.</span>
+</span><span id="Select.offset-2466"><a href="#Select.offset-2466"><span class="linenos">2466</span></a><span class="sd"> If another `Expression` instance is passed, it will be wrapped in a `Offset`.</span>
+</span><span id="Select.offset-2467"><a href="#Select.offset-2467"><span class="linenos">2467</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="Select.offset-2468"><a href="#Select.offset-2468"><span class="linenos">2468</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.offset-2469"><a href="#Select.offset-2469"><span class="linenos">2469</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.offset-2470"><a href="#Select.offset-2470"><span class="linenos">2470</span></a>
+</span><span id="Select.offset-2471"><a href="#Select.offset-2471"><span class="linenos">2471</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.offset-2472"><a href="#Select.offset-2472"><span class="linenos">2472</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.offset-2473"><a href="#Select.offset-2473"><span class="linenos">2473</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.offset-2474"><a href="#Select.offset-2474"><span class="linenos">2474</span></a> <span class="k">return</span> <span class="n">_apply_builder</span><span class="p">(</span>
+</span><span id="Select.offset-2475"><a href="#Select.offset-2475"><span class="linenos">2475</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Select.offset-2476"><a href="#Select.offset-2476"><span class="linenos">2476</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.offset-2477"><a href="#Select.offset-2477"><span class="linenos">2477</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span>
+</span><span id="Select.offset-2478"><a href="#Select.offset-2478"><span class="linenos">2478</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Offset</span><span class="p">,</span>
+</span><span id="Select.offset-2479"><a href="#Select.offset-2479"><span class="linenos">2479</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span>
+</span><span id="Select.offset-2480"><a href="#Select.offset-2480"><span class="linenos">2480</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.offset-2481"><a href="#Select.offset-2481"><span class="linenos">2481</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.offset-2482"><a href="#Select.offset-2482"><span class="linenos">2482</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.offset-2483"><a href="#Select.offset-2483"><span class="linenos">2483</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23402,42 +23904,42 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Select.select"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.select-2362"><a href="#Select.select-2362"><span class="linenos">2362</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
-</span><span id="Select.select-2363"><a href="#Select.select-2363"><span class="linenos">2363</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.select-2364"><a href="#Select.select-2364"><span class="linenos">2364</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="Select.select-2365"><a href="#Select.select-2365"><span class="linenos">2365</span></a> <span class="n">append</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="Select.select-2366"><a href="#Select.select-2366"><span class="linenos">2366</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="Select.select-2367"><a href="#Select.select-2367"><span class="linenos">2367</span></a> <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><span id="Select.select-2368"><a href="#Select.select-2368"><span class="linenos">2368</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.select-2369"><a href="#Select.select-2369"><span class="linenos">2369</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.select-2370"><a href="#Select.select-2370"><span class="linenos">2370</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.select-2371"><a href="#Select.select-2371"><span class="linenos">2371</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
-</span><span id="Select.select-2372"><a href="#Select.select-2372"><span class="linenos">2372</span></a>
-</span><span id="Select.select-2373"><a href="#Select.select-2373"><span class="linenos">2373</span></a><span class="sd"> Example:</span>
-</span><span id="Select.select-2374"><a href="#Select.select-2374"><span class="linenos">2374</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
-</span><span id="Select.select-2375"><a href="#Select.select-2375"><span class="linenos">2375</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
-</span><span id="Select.select-2376"><a href="#Select.select-2376"><span class="linenos">2376</span></a>
-</span><span id="Select.select-2377"><a href="#Select.select-2377"><span class="linenos">2377</span></a><span class="sd"> Args:</span>
-</span><span id="Select.select-2378"><a href="#Select.select-2378"><span class="linenos">2378</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
-</span><span id="Select.select-2379"><a href="#Select.select-2379"><span class="linenos">2379</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.select-2380"><a href="#Select.select-2380"><span class="linenos">2380</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
-</span><span id="Select.select-2381"><a href="#Select.select-2381"><span class="linenos">2381</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select.select-2382"><a href="#Select.select-2382"><span class="linenos">2382</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="Select.select-2383"><a href="#Select.select-2383"><span class="linenos">2383</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.select-2384"><a href="#Select.select-2384"><span class="linenos">2384</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
-</span><span id="Select.select-2385"><a href="#Select.select-2385"><span class="linenos">2385</span></a>
-</span><span id="Select.select-2386"><a href="#Select.select-2386"><span class="linenos">2386</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.select-2387"><a href="#Select.select-2387"><span class="linenos">2387</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.select-2388"><a href="#Select.select-2388"><span class="linenos">2388</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.select-2389"><a href="#Select.select-2389"><span class="linenos">2389</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.select-2390"><a href="#Select.select-2390"><span class="linenos">2390</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.select-2391"><a href="#Select.select-2391"><span class="linenos">2391</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.select-2392"><a href="#Select.select-2392"><span class="linenos">2392</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="Select.select-2393"><a href="#Select.select-2393"><span class="linenos">2393</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.select-2394"><a href="#Select.select-2394"><span class="linenos">2394</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.select-2395"><a href="#Select.select-2395"><span class="linenos">2395</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.select-2396"><a href="#Select.select-2396"><span class="linenos">2396</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.select-2397"><a href="#Select.select-2397"><span class="linenos">2397</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.select-2485"><a href="#Select.select-2485"><span class="linenos">2485</span></a> <span class="k">def</span> <span class="nf">select</span><span class="p">(</span>
+</span><span id="Select.select-2486"><a href="#Select.select-2486"><span class="linenos">2486</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.select-2487"><a href="#Select.select-2487"><span class="linenos">2487</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="Select.select-2488"><a href="#Select.select-2488"><span class="linenos">2488</span></a> <span class="n">append</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="Select.select-2489"><a href="#Select.select-2489"><span class="linenos">2489</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="Select.select-2490"><a href="#Select.select-2490"><span class="linenos">2490</span></a> <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><span id="Select.select-2491"><a href="#Select.select-2491"><span class="linenos">2491</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.select-2492"><a href="#Select.select-2492"><span class="linenos">2492</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.select-2493"><a href="#Select.select-2493"><span class="linenos">2493</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.select-2494"><a href="#Select.select-2494"><span class="linenos">2494</span></a><span class="sd"> Append to or set the SELECT expressions.</span>
+</span><span id="Select.select-2495"><a href="#Select.select-2495"><span class="linenos">2495</span></a>
+</span><span id="Select.select-2496"><a href="#Select.select-2496"><span class="linenos">2496</span></a><span class="sd"> Example:</span>
+</span><span id="Select.select-2497"><a href="#Select.select-2497"><span class="linenos">2497</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;y&quot;).sql()</span>
+</span><span id="Select.select-2498"><a href="#Select.select-2498"><span class="linenos">2498</span></a><span class="sd"> &#39;SELECT x, y&#39;</span>
+</span><span id="Select.select-2499"><a href="#Select.select-2499"><span class="linenos">2499</span></a>
+</span><span id="Select.select-2500"><a href="#Select.select-2500"><span class="linenos">2500</span></a><span class="sd"> Args:</span>
+</span><span id="Select.select-2501"><a href="#Select.select-2501"><span class="linenos">2501</span></a><span class="sd"> *expressions: the SQL code strings to parse.</span>
+</span><span id="Select.select-2502"><a href="#Select.select-2502"><span class="linenos">2502</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.select-2503"><a href="#Select.select-2503"><span class="linenos">2503</span></a><span class="sd"> append: if `True`, add to any existing expressions.</span>
+</span><span id="Select.select-2504"><a href="#Select.select-2504"><span class="linenos">2504</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select.select-2505"><a href="#Select.select-2505"><span class="linenos">2505</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="Select.select-2506"><a href="#Select.select-2506"><span class="linenos">2506</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.select-2507"><a href="#Select.select-2507"><span class="linenos">2507</span></a><span class="sd"> opts: other options to use to parse the input expressions.</span>
+</span><span id="Select.select-2508"><a href="#Select.select-2508"><span class="linenos">2508</span></a>
+</span><span id="Select.select-2509"><a href="#Select.select-2509"><span class="linenos">2509</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.select-2510"><a href="#Select.select-2510"><span class="linenos">2510</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.select-2511"><a href="#Select.select-2511"><span class="linenos">2511</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.select-2512"><a href="#Select.select-2512"><span class="linenos">2512</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.select-2513"><a href="#Select.select-2513"><span class="linenos">2513</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.select-2514"><a href="#Select.select-2514"><span class="linenos">2514</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.select-2515"><a href="#Select.select-2515"><span class="linenos">2515</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
+</span><span id="Select.select-2516"><a href="#Select.select-2516"><span class="linenos">2516</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.select-2517"><a href="#Select.select-2517"><span class="linenos">2517</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.select-2518"><a href="#Select.select-2518"><span class="linenos">2518</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.select-2519"><a href="#Select.select-2519"><span class="linenos">2519</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.select-2520"><a href="#Select.select-2520"><span class="linenos">2520</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23485,37 +23987,37 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Select.lateral"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.lateral-2399"><a href="#Select.lateral-2399"><span class="linenos">2399</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.lateral-2400"><a href="#Select.lateral-2400"><span class="linenos">2400</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.lateral-2401"><a href="#Select.lateral-2401"><span class="linenos">2401</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
-</span><span id="Select.lateral-2402"><a href="#Select.lateral-2402"><span class="linenos">2402</span></a>
-</span><span id="Select.lateral-2403"><a href="#Select.lateral-2403"><span class="linenos">2403</span></a><span class="sd"> Example:</span>
-</span><span id="Select.lateral-2404"><a href="#Select.lateral-2404"><span class="linenos">2404</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).lateral(&quot;OUTER explode(y) tbl2 AS z&quot;).from_(&quot;tbl&quot;).sql()</span>
-</span><span id="Select.lateral-2405"><a href="#Select.lateral-2405"><span class="linenos">2405</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
-</span><span id="Select.lateral-2406"><a href="#Select.lateral-2406"><span class="linenos">2406</span></a>
-</span><span id="Select.lateral-2407"><a href="#Select.lateral-2407"><span class="linenos">2407</span></a><span class="sd"> Args:</span>
-</span><span id="Select.lateral-2408"><a href="#Select.lateral-2408"><span class="linenos">2408</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.lateral-2409"><a href="#Select.lateral-2409"><span class="linenos">2409</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.lateral-2410"><a href="#Select.lateral-2410"><span class="linenos">2410</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select.lateral-2411"><a href="#Select.lateral-2411"><span class="linenos">2411</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select.lateral-2412"><a href="#Select.lateral-2412"><span class="linenos">2412</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select.lateral-2413"><a href="#Select.lateral-2413"><span class="linenos">2413</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.lateral-2414"><a href="#Select.lateral-2414"><span class="linenos">2414</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.lateral-2415"><a href="#Select.lateral-2415"><span class="linenos">2415</span></a>
-</span><span id="Select.lateral-2416"><a href="#Select.lateral-2416"><span class="linenos">2416</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.lateral-2417"><a href="#Select.lateral-2417"><span class="linenos">2417</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.lateral-2418"><a href="#Select.lateral-2418"><span class="linenos">2418</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.lateral-2419"><a href="#Select.lateral-2419"><span class="linenos">2419</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.lateral-2420"><a href="#Select.lateral-2420"><span class="linenos">2420</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.lateral-2421"><a href="#Select.lateral-2421"><span class="linenos">2421</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.lateral-2422"><a href="#Select.lateral-2422"><span class="linenos">2422</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
-</span><span id="Select.lateral-2423"><a href="#Select.lateral-2423"><span class="linenos">2423</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.lateral-2424"><a href="#Select.lateral-2424"><span class="linenos">2424</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="Select.lateral-2425"><a href="#Select.lateral-2425"><span class="linenos">2425</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LATERAL VIEW&quot;</span><span class="p">,</span>
-</span><span id="Select.lateral-2426"><a href="#Select.lateral-2426"><span class="linenos">2426</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.lateral-2427"><a href="#Select.lateral-2427"><span class="linenos">2427</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.lateral-2428"><a href="#Select.lateral-2428"><span class="linenos">2428</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.lateral-2429"><a href="#Select.lateral-2429"><span class="linenos">2429</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.lateral-2522"><a href="#Select.lateral-2522"><span class="linenos">2522</span></a> <span class="k">def</span> <span class="nf">lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.lateral-2523"><a href="#Select.lateral-2523"><span class="linenos">2523</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.lateral-2524"><a href="#Select.lateral-2524"><span class="linenos">2524</span></a><span class="sd"> Append to or set the LATERAL expressions.</span>
+</span><span id="Select.lateral-2525"><a href="#Select.lateral-2525"><span class="linenos">2525</span></a>
+</span><span id="Select.lateral-2526"><a href="#Select.lateral-2526"><span class="linenos">2526</span></a><span class="sd"> Example:</span>
+</span><span id="Select.lateral-2527"><a href="#Select.lateral-2527"><span class="linenos">2527</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).lateral(&quot;OUTER explode(y) tbl2 AS z&quot;).from_(&quot;tbl&quot;).sql()</span>
+</span><span id="Select.lateral-2528"><a href="#Select.lateral-2528"><span class="linenos">2528</span></a><span class="sd"> &#39;SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z&#39;</span>
+</span><span id="Select.lateral-2529"><a href="#Select.lateral-2529"><span class="linenos">2529</span></a>
+</span><span id="Select.lateral-2530"><a href="#Select.lateral-2530"><span class="linenos">2530</span></a><span class="sd"> Args:</span>
+</span><span id="Select.lateral-2531"><a href="#Select.lateral-2531"><span class="linenos">2531</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.lateral-2532"><a href="#Select.lateral-2532"><span class="linenos">2532</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.lateral-2533"><a href="#Select.lateral-2533"><span class="linenos">2533</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select.lateral-2534"><a href="#Select.lateral-2534"><span class="linenos">2534</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select.lateral-2535"><a href="#Select.lateral-2535"><span class="linenos">2535</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select.lateral-2536"><a href="#Select.lateral-2536"><span class="linenos">2536</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.lateral-2537"><a href="#Select.lateral-2537"><span class="linenos">2537</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.lateral-2538"><a href="#Select.lateral-2538"><span class="linenos">2538</span></a>
+</span><span id="Select.lateral-2539"><a href="#Select.lateral-2539"><span class="linenos">2539</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.lateral-2540"><a href="#Select.lateral-2540"><span class="linenos">2540</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.lateral-2541"><a href="#Select.lateral-2541"><span class="linenos">2541</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.lateral-2542"><a href="#Select.lateral-2542"><span class="linenos">2542</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.lateral-2543"><a href="#Select.lateral-2543"><span class="linenos">2543</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.lateral-2544"><a href="#Select.lateral-2544"><span class="linenos">2544</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.lateral-2545"><a href="#Select.lateral-2545"><span class="linenos">2545</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
+</span><span id="Select.lateral-2546"><a href="#Select.lateral-2546"><span class="linenos">2546</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.lateral-2547"><a href="#Select.lateral-2547"><span class="linenos">2547</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="Select.lateral-2548"><a href="#Select.lateral-2548"><span class="linenos">2548</span></a> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;LATERAL VIEW&quot;</span><span class="p">,</span>
+</span><span id="Select.lateral-2549"><a href="#Select.lateral-2549"><span class="linenos">2549</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.lateral-2550"><a href="#Select.lateral-2550"><span class="linenos">2550</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.lateral-2551"><a href="#Select.lateral-2551"><span class="linenos">2551</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.lateral-2552"><a href="#Select.lateral-2552"><span class="linenos">2552</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23563,100 +24065,100 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Select.join"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.join-2431"><a href="#Select.join-2431"><span class="linenos">2431</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
-</span><span id="Select.join-2432"><a href="#Select.join-2432"><span class="linenos">2432</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.join-2433"><a href="#Select.join-2433"><span class="linenos">2433</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Select.join-2434"><a href="#Select.join-2434"><span class="linenos">2434</span></a> <span class="n">on</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select.join-2435"><a href="#Select.join-2435"><span class="linenos">2435</span></a> <span class="n">using</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select.join-2436"><a href="#Select.join-2436"><span class="linenos">2436</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Select.join-2437"><a href="#Select.join-2437"><span class="linenos">2437</span></a> <span class="n">join_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select.join-2438"><a href="#Select.join-2438"><span class="linenos">2438</span></a> <span class="n">join_alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select.join-2439"><a href="#Select.join-2439"><span class="linenos">2439</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Select.join-2440"><a href="#Select.join-2440"><span class="linenos">2440</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Select.join-2441"><a href="#Select.join-2441"><span class="linenos">2441</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.join-2442"><a href="#Select.join-2442"><span class="linenos">2442</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.join-2443"><a href="#Select.join-2443"><span class="linenos">2443</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.join-2444"><a href="#Select.join-2444"><span class="linenos">2444</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
-</span><span id="Select.join-2445"><a href="#Select.join-2445"><span class="linenos">2445</span></a>
-</span><span id="Select.join-2446"><a href="#Select.join-2446"><span class="linenos">2446</span></a><span class="sd"> Example:</span>
-</span><span id="Select.join-2447"><a href="#Select.join-2447"><span class="linenos">2447</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;).sql()</span>
-</span><span id="Select.join-2448"><a href="#Select.join-2448"><span class="linenos">2448</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="Select.join-2449"><a href="#Select.join-2449"><span class="linenos">2449</span></a>
-</span><span id="Select.join-2450"><a href="#Select.join-2450"><span class="linenos">2450</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;1&quot;).from_(&quot;a&quot;).join(&quot;b&quot;, using=[&quot;x&quot;, &quot;y&quot;, &quot;z&quot;]).sql()</span>
-</span><span id="Select.join-2451"><a href="#Select.join-2451"><span class="linenos">2451</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
-</span><span id="Select.join-2452"><a href="#Select.join-2452"><span class="linenos">2452</span></a>
-</span><span id="Select.join-2453"><a href="#Select.join-2453"><span class="linenos">2453</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
-</span><span id="Select.join-2454"><a href="#Select.join-2454"><span class="linenos">2454</span></a>
-</span><span id="Select.join-2455"><a href="#Select.join-2455"><span class="linenos">2455</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;, join_type=&quot;left outer&quot;).sql()</span>
-</span><span id="Select.join-2456"><a href="#Select.join-2456"><span class="linenos">2456</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
-</span><span id="Select.join-2457"><a href="#Select.join-2457"><span class="linenos">2457</span></a>
-</span><span id="Select.join-2458"><a href="#Select.join-2458"><span class="linenos">2458</span></a><span class="sd"> Args:</span>
-</span><span id="Select.join-2459"><a href="#Select.join-2459"><span class="linenos">2459</span></a><span class="sd"> expression (str | Expression): the SQL code string to parse.</span>
-</span><span id="Select.join-2460"><a href="#Select.join-2460"><span class="linenos">2460</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.join-2461"><a href="#Select.join-2461"><span class="linenos">2461</span></a><span class="sd"> on (str | Expression): optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
-</span><span id="Select.join-2462"><a href="#Select.join-2462"><span class="linenos">2462</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.join-2463"><a href="#Select.join-2463"><span class="linenos">2463</span></a><span class="sd"> using (str | Expression): optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
-</span><span id="Select.join-2464"><a href="#Select.join-2464"><span class="linenos">2464</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.join-2465"><a href="#Select.join-2465"><span class="linenos">2465</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
-</span><span id="Select.join-2466"><a href="#Select.join-2466"><span class="linenos">2466</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
-</span><span id="Select.join-2467"><a href="#Select.join-2467"><span class="linenos">2467</span></a><span class="sd"> join_type (str): If set, alter the parsed join type</span>
-</span><span id="Select.join-2468"><a href="#Select.join-2468"><span class="linenos">2468</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select.join-2469"><a href="#Select.join-2469"><span class="linenos">2469</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.join-2470"><a href="#Select.join-2470"><span class="linenos">2470</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.join-2471"><a href="#Select.join-2471"><span class="linenos">2471</span></a>
-</span><span id="Select.join-2472"><a href="#Select.join-2472"><span class="linenos">2472</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.join-2473"><a href="#Select.join-2473"><span class="linenos">2473</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.join-2474"><a href="#Select.join-2474"><span class="linenos">2474</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.join-2475"><a href="#Select.join-2475"><span class="linenos">2475</span></a> <span class="n">parse_args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">}</span>
-</span><span id="Select.join-2476"><a href="#Select.join-2476"><span class="linenos">2476</span></a>
-</span><span id="Select.join-2477"><a href="#Select.join-2477"><span class="linenos">2477</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Select.join-2478"><a href="#Select.join-2478"><span class="linenos">2478</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Join</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;JOIN&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
-</span><span id="Select.join-2479"><a href="#Select.join-2479"><span class="linenos">2479</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="Select.join-2480"><a href="#Select.join-2480"><span class="linenos">2480</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="p">(</span><span class="n">Join</span><span class="p">,</span> <span class="n">Expression</span><span class="p">),</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
-</span><span id="Select.join-2481"><a href="#Select.join-2481"><span class="linenos">2481</span></a>
-</span><span id="Select.join-2482"><a href="#Select.join-2482"><span class="linenos">2482</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">expression</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">Join</span><span class="p">)</span> <span class="k">else</span> <span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Select.join-2483"><a href="#Select.join-2483"><span class="linenos">2483</span></a>
-</span><span id="Select.join-2484"><a href="#Select.join-2484"><span class="linenos">2484</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">Select</span><span class="p">):</span>
-</span><span id="Select.join-2485"><a href="#Select.join-2485"><span class="linenos">2485</span></a> <span class="n">join</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="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span>
-</span><span id="Select.join-2486"><a href="#Select.join-2486"><span class="linenos">2486</span></a>
-</span><span id="Select.join-2487"><a href="#Select.join-2487"><span class="linenos">2487</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
-</span><span id="Select.join-2488"><a href="#Select.join-2488"><span class="linenos">2488</span></a> <span class="n">natural</span><span 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="Select.join-2489"><a href="#Select.join-2489"><span class="linenos">2489</span></a> <span class="n">side</span><span 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="Select.join-2490"><a href="#Select.join-2490"><span class="linenos">2490</span></a> <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">Token</span><span class="p">]</span>
-</span><span id="Select.join-2491"><a href="#Select.join-2491"><span class="linenos">2491</span></a>
-</span><span id="Select.join-2492"><a href="#Select.join-2492"><span class="linenos">2492</span></a> <span class="n">natural</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="n">maybe_parse</span><span class="p">(</span><span class="n">join_type</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Select.join-2493"><a href="#Select.join-2493"><span class="linenos">2493</span></a>
-</span><span id="Select.join-2494"><a href="#Select.join-2494"><span class="linenos">2494</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
-</span><span id="Select.join-2495"><a href="#Select.join-2495"><span class="linenos">2495</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="Select.join-2496"><a href="#Select.join-2496"><span class="linenos">2496</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Select.join-2497"><a href="#Select.join-2497"><span class="linenos">2497</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">,</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Select.join-2498"><a href="#Select.join-2498"><span class="linenos">2498</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Select.join-2499"><a href="#Select.join-2499"><span class="linenos">2499</span></a> <span class="n">join</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">kind</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Select.join-2500"><a href="#Select.join-2500"><span class="linenos">2500</span></a>
-</span><span id="Select.join-2501"><a href="#Select.join-2501"><span class="linenos">2501</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
-</span><span id="Select.join-2502"><a href="#Select.join-2502"><span class="linenos">2502</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">on</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="Select.join-2503"><a href="#Select.join-2503"><span class="linenos">2503</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</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="Select.join-2504"><a href="#Select.join-2504"><span class="linenos">2504</span></a>
-</span><span id="Select.join-2505"><a href="#Select.join-2505"><span class="linenos">2505</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Select.join-2506"><a href="#Select.join-2506"><span class="linenos">2506</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.join-2507"><a href="#Select.join-2507"><span class="linenos">2507</span></a> <span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
-</span><span id="Select.join-2508"><a href="#Select.join-2508"><span class="linenos">2508</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
-</span><span id="Select.join-2509"><a href="#Select.join-2509"><span class="linenos">2509</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
-</span><span id="Select.join-2510"><a href="#Select.join-2510"><span class="linenos">2510</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.join-2511"><a href="#Select.join-2511"><span class="linenos">2511</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.join-2512"><a href="#Select.join-2512"><span class="linenos">2512</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.join-2513"><a href="#Select.join-2513"><span class="linenos">2513</span></a> <span class="p">)</span>
-</span><span id="Select.join-2514"><a href="#Select.join-2514"><span class="linenos">2514</span></a>
-</span><span id="Select.join-2515"><a href="#Select.join-2515"><span class="linenos">2515</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
-</span><span id="Select.join-2516"><a href="#Select.join-2516"><span class="linenos">2516</span></a> <span class="n">join</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">alias_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">join_alias</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="Select.join-2517"><a href="#Select.join-2517"><span class="linenos">2517</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.join-2518"><a href="#Select.join-2518"><span class="linenos">2518</span></a> <span class="n">join</span><span class="p">,</span>
-</span><span id="Select.join-2519"><a href="#Select.join-2519"><span class="linenos">2519</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.join-2520"><a href="#Select.join-2520"><span class="linenos">2520</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span>
-</span><span id="Select.join-2521"><a href="#Select.join-2521"><span class="linenos">2521</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.join-2522"><a href="#Select.join-2522"><span class="linenos">2522</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.join-2523"><a href="#Select.join-2523"><span class="linenos">2523</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.join-2524"><a href="#Select.join-2524"><span class="linenos">2524</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.join-2554"><a href="#Select.join-2554"><span class="linenos">2554</span></a> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span>
+</span><span id="Select.join-2555"><a href="#Select.join-2555"><span class="linenos">2555</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.join-2556"><a href="#Select.join-2556"><span class="linenos">2556</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Select.join-2557"><a href="#Select.join-2557"><span class="linenos">2557</span></a> <span class="n">on</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select.join-2558"><a href="#Select.join-2558"><span class="linenos">2558</span></a> <span class="n">using</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select.join-2559"><a href="#Select.join-2559"><span class="linenos">2559</span></a> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Select.join-2560"><a href="#Select.join-2560"><span class="linenos">2560</span></a> <span class="n">join_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select.join-2561"><a href="#Select.join-2561"><span class="linenos">2561</span></a> <span class="n">join_alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select.join-2562"><a href="#Select.join-2562"><span class="linenos">2562</span></a> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Select.join-2563"><a href="#Select.join-2563"><span class="linenos">2563</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Select.join-2564"><a href="#Select.join-2564"><span class="linenos">2564</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.join-2565"><a href="#Select.join-2565"><span class="linenos">2565</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="Select.join-2566"><a href="#Select.join-2566"><span class="linenos">2566</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.join-2567"><a href="#Select.join-2567"><span class="linenos">2567</span></a><span class="sd"> Append to or set the JOIN expressions.</span>
+</span><span id="Select.join-2568"><a href="#Select.join-2568"><span class="linenos">2568</span></a>
+</span><span id="Select.join-2569"><a href="#Select.join-2569"><span class="linenos">2569</span></a><span class="sd"> Example:</span>
+</span><span id="Select.join-2570"><a href="#Select.join-2570"><span class="linenos">2570</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;).sql()</span>
+</span><span id="Select.join-2571"><a href="#Select.join-2571"><span class="linenos">2571</span></a><span class="sd"> &#39;SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="Select.join-2572"><a href="#Select.join-2572"><span class="linenos">2572</span></a>
+</span><span id="Select.join-2573"><a href="#Select.join-2573"><span class="linenos">2573</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;1&quot;).from_(&quot;a&quot;).join(&quot;b&quot;, using=[&quot;x&quot;, &quot;y&quot;, &quot;z&quot;]).sql()</span>
+</span><span id="Select.join-2574"><a href="#Select.join-2574"><span class="linenos">2574</span></a><span class="sd"> &#39;SELECT 1 FROM a JOIN b USING (x, y, z)&#39;</span>
+</span><span id="Select.join-2575"><a href="#Select.join-2575"><span class="linenos">2575</span></a>
+</span><span id="Select.join-2576"><a href="#Select.join-2576"><span class="linenos">2576</span></a><span class="sd"> Use `join_type` to change the type of join:</span>
+</span><span id="Select.join-2577"><a href="#Select.join-2577"><span class="linenos">2577</span></a>
+</span><span id="Select.join-2578"><a href="#Select.join-2578"><span class="linenos">2578</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).join(&quot;tbl2&quot;, on=&quot;tbl1.y = tbl2.y&quot;, join_type=&quot;left outer&quot;).sql()</span>
+</span><span id="Select.join-2579"><a href="#Select.join-2579"><span class="linenos">2579</span></a><span class="sd"> &#39;SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y&#39;</span>
+</span><span id="Select.join-2580"><a href="#Select.join-2580"><span class="linenos">2580</span></a>
+</span><span id="Select.join-2581"><a href="#Select.join-2581"><span class="linenos">2581</span></a><span class="sd"> Args:</span>
+</span><span id="Select.join-2582"><a href="#Select.join-2582"><span class="linenos">2582</span></a><span class="sd"> expression (str | Expression): the SQL code string to parse.</span>
+</span><span id="Select.join-2583"><a href="#Select.join-2583"><span class="linenos">2583</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.join-2584"><a href="#Select.join-2584"><span class="linenos">2584</span></a><span class="sd"> on (str | Expression): optionally specify the join &quot;on&quot; criteria as a SQL string.</span>
+</span><span id="Select.join-2585"><a href="#Select.join-2585"><span class="linenos">2585</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.join-2586"><a href="#Select.join-2586"><span class="linenos">2586</span></a><span class="sd"> using (str | Expression): optionally specify the join &quot;using&quot; criteria as a SQL string.</span>
+</span><span id="Select.join-2587"><a href="#Select.join-2587"><span class="linenos">2587</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.join-2588"><a href="#Select.join-2588"><span class="linenos">2588</span></a><span class="sd"> append (bool): if `True`, add to any existing expressions.</span>
+</span><span id="Select.join-2589"><a href="#Select.join-2589"><span class="linenos">2589</span></a><span class="sd"> Otherwise, this resets the expressions.</span>
+</span><span id="Select.join-2590"><a href="#Select.join-2590"><span class="linenos">2590</span></a><span class="sd"> join_type (str): If set, alter the parsed join type</span>
+</span><span id="Select.join-2591"><a href="#Select.join-2591"><span class="linenos">2591</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select.join-2592"><a href="#Select.join-2592"><span class="linenos">2592</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.join-2593"><a href="#Select.join-2593"><span class="linenos">2593</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.join-2594"><a href="#Select.join-2594"><span class="linenos">2594</span></a>
+</span><span id="Select.join-2595"><a href="#Select.join-2595"><span class="linenos">2595</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.join-2596"><a href="#Select.join-2596"><span class="linenos">2596</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.join-2597"><a href="#Select.join-2597"><span class="linenos">2597</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.join-2598"><a href="#Select.join-2598"><span class="linenos">2598</span></a> <span class="n">parse_args</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;dialect&quot;</span><span class="p">:</span> <span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">}</span>
+</span><span id="Select.join-2599"><a href="#Select.join-2599"><span class="linenos">2599</span></a>
+</span><span id="Select.join-2600"><a href="#Select.join-2600"><span class="linenos">2600</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Select.join-2601"><a href="#Select.join-2601"><span class="linenos">2601</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Join</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot;JOIN&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
+</span><span id="Select.join-2602"><a href="#Select.join-2602"><span class="linenos">2602</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="Select.join-2603"><a href="#Select.join-2603"><span class="linenos">2603</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="p">(</span><span class="n">Join</span><span class="p">,</span> <span class="n">Expression</span><span class="p">),</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span>
+</span><span id="Select.join-2604"><a href="#Select.join-2604"><span class="linenos">2604</span></a>
+</span><span id="Select.join-2605"><a href="#Select.join-2605"><span class="linenos">2605</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">expression</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">Join</span><span class="p">)</span> <span class="k">else</span> <span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Select.join-2606"><a href="#Select.join-2606"><span class="linenos">2606</span></a>
+</span><span id="Select.join-2607"><a href="#Select.join-2607"><span class="linenos">2607</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">Select</span><span class="p">):</span>
+</span><span id="Select.join-2608"><a href="#Select.join-2608"><span class="linenos">2608</span></a> <span class="n">join</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="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">subquery</span><span class="p">())</span>
+</span><span id="Select.join-2609"><a href="#Select.join-2609"><span class="linenos">2609</span></a>
+</span><span id="Select.join-2610"><a href="#Select.join-2610"><span class="linenos">2610</span></a> <span class="k">if</span> <span class="n">join_type</span><span class="p">:</span>
+</span><span id="Select.join-2611"><a href="#Select.join-2611"><span class="linenos">2611</span></a> <span class="n">natural</span><span 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="Select.join-2612"><a href="#Select.join-2612"><span class="linenos">2612</span></a> <span class="n">side</span><span 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="Select.join-2613"><a href="#Select.join-2613"><span class="linenos">2613</span></a> <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">Token</span><span class="p">]</span>
+</span><span id="Select.join-2614"><a href="#Select.join-2614"><span class="linenos">2614</span></a>
+</span><span id="Select.join-2615"><a href="#Select.join-2615"><span class="linenos">2615</span></a> <span class="n">natural</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="n">maybe_parse</span><span class="p">(</span><span class="n">join_type</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">parse_args</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Select.join-2616"><a href="#Select.join-2616"><span class="linenos">2616</span></a>
+</span><span id="Select.join-2617"><a href="#Select.join-2617"><span class="linenos">2617</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
+</span><span id="Select.join-2618"><a href="#Select.join-2618"><span class="linenos">2618</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="Select.join-2619"><a href="#Select.join-2619"><span class="linenos">2619</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Select.join-2620"><a href="#Select.join-2620"><span class="linenos">2620</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;side&quot;</span><span class="p">,</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Select.join-2621"><a href="#Select.join-2621"><span class="linenos">2621</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Select.join-2622"><a href="#Select.join-2622"><span class="linenos">2622</span></a> <span class="n">join</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">kind</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Select.join-2623"><a href="#Select.join-2623"><span class="linenos">2623</span></a>
+</span><span id="Select.join-2624"><a href="#Select.join-2624"><span class="linenos">2624</span></a> <span class="k">if</span> <span class="n">on</span><span class="p">:</span>
+</span><span id="Select.join-2625"><a href="#Select.join-2625"><span class="linenos">2625</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">on</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">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="Select.join-2626"><a href="#Select.join-2626"><span class="linenos">2626</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</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="Select.join-2627"><a href="#Select.join-2627"><span class="linenos">2627</span></a>
+</span><span id="Select.join-2628"><a href="#Select.join-2628"><span class="linenos">2628</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Select.join-2629"><a href="#Select.join-2629"><span class="linenos">2629</span></a> <span class="n">join</span> <span class="o">=</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.join-2630"><a href="#Select.join-2630"><span class="linenos">2630</span></a> <span class="o">*</span><span class="n">ensure_collection</span><span class="p">(</span><span class="n">using</span><span class="p">),</span>
+</span><span id="Select.join-2631"><a href="#Select.join-2631"><span class="linenos">2631</span></a> <span class="n">instance</span><span class="o">=</span><span class="n">join</span><span class="p">,</span>
+</span><span id="Select.join-2632"><a href="#Select.join-2632"><span class="linenos">2632</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;using&quot;</span><span class="p">,</span>
+</span><span id="Select.join-2633"><a href="#Select.join-2633"><span class="linenos">2633</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.join-2634"><a href="#Select.join-2634"><span class="linenos">2634</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.join-2635"><a href="#Select.join-2635"><span class="linenos">2635</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.join-2636"><a href="#Select.join-2636"><span class="linenos">2636</span></a> <span class="p">)</span>
+</span><span id="Select.join-2637"><a href="#Select.join-2637"><span class="linenos">2637</span></a>
+</span><span id="Select.join-2638"><a href="#Select.join-2638"><span class="linenos">2638</span></a> <span class="k">if</span> <span class="n">join_alias</span><span class="p">:</span>
+</span><span id="Select.join-2639"><a href="#Select.join-2639"><span class="linenos">2639</span></a> <span class="n">join</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">alias_</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">join_alias</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="Select.join-2640"><a href="#Select.join-2640"><span class="linenos">2640</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.join-2641"><a href="#Select.join-2641"><span class="linenos">2641</span></a> <span class="n">join</span><span class="p">,</span>
+</span><span id="Select.join-2642"><a href="#Select.join-2642"><span class="linenos">2642</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.join-2643"><a href="#Select.join-2643"><span class="linenos">2643</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span>
+</span><span id="Select.join-2644"><a href="#Select.join-2644"><span class="linenos">2644</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.join-2645"><a href="#Select.join-2645"><span class="linenos">2645</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.join-2646"><a href="#Select.join-2646"><span class="linenos">2646</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.join-2647"><a href="#Select.join-2647"><span class="linenos">2647</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23723,37 +24225,37 @@ Otherwise, this resets the expressions.</li>
</div>
<a class="headerlink" href="#Select.where"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.where-2526"><a href="#Select.where-2526"><span class="linenos">2526</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.where-2527"><a href="#Select.where-2527"><span class="linenos">2527</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.where-2528"><a href="#Select.where-2528"><span class="linenos">2528</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
-</span><span id="Select.where-2529"><a href="#Select.where-2529"><span class="linenos">2529</span></a>
-</span><span id="Select.where-2530"><a href="#Select.where-2530"><span class="linenos">2530</span></a><span class="sd"> Example:</span>
-</span><span id="Select.where-2531"><a href="#Select.where-2531"><span class="linenos">2531</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
-</span><span id="Select.where-2532"><a href="#Select.where-2532"><span class="linenos">2532</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
-</span><span id="Select.where-2533"><a href="#Select.where-2533"><span class="linenos">2533</span></a>
-</span><span id="Select.where-2534"><a href="#Select.where-2534"><span class="linenos">2534</span></a><span class="sd"> Args:</span>
-</span><span id="Select.where-2535"><a href="#Select.where-2535"><span class="linenos">2535</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.where-2536"><a href="#Select.where-2536"><span class="linenos">2536</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.where-2537"><a href="#Select.where-2537"><span class="linenos">2537</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select.where-2538"><a href="#Select.where-2538"><span class="linenos">2538</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select.where-2539"><a href="#Select.where-2539"><span class="linenos">2539</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select.where-2540"><a href="#Select.where-2540"><span class="linenos">2540</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select.where-2541"><a href="#Select.where-2541"><span class="linenos">2541</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.where-2542"><a href="#Select.where-2542"><span class="linenos">2542</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.where-2543"><a href="#Select.where-2543"><span class="linenos">2543</span></a>
-</span><span id="Select.where-2544"><a href="#Select.where-2544"><span class="linenos">2544</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.where-2545"><a href="#Select.where-2545"><span class="linenos">2545</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.where-2546"><a href="#Select.where-2546"><span class="linenos">2546</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.where-2547"><a href="#Select.where-2547"><span class="linenos">2547</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select.where-2548"><a href="#Select.where-2548"><span class="linenos">2548</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.where-2549"><a href="#Select.where-2549"><span class="linenos">2549</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.where-2550"><a href="#Select.where-2550"><span class="linenos">2550</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="Select.where-2551"><a href="#Select.where-2551"><span class="linenos">2551</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.where-2552"><a href="#Select.where-2552"><span class="linenos">2552</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
-</span><span id="Select.where-2553"><a href="#Select.where-2553"><span class="linenos">2553</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.where-2554"><a href="#Select.where-2554"><span class="linenos">2554</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.where-2555"><a href="#Select.where-2555"><span class="linenos">2555</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.where-2556"><a href="#Select.where-2556"><span class="linenos">2556</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.where-2649"><a href="#Select.where-2649"><span class="linenos">2649</span></a> <span class="k">def</span> <span class="nf">where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.where-2650"><a href="#Select.where-2650"><span class="linenos">2650</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.where-2651"><a href="#Select.where-2651"><span class="linenos">2651</span></a><span class="sd"> Append to or set the WHERE expressions.</span>
+</span><span id="Select.where-2652"><a href="#Select.where-2652"><span class="linenos">2652</span></a>
+</span><span id="Select.where-2653"><a href="#Select.where-2653"><span class="linenos">2653</span></a><span class="sd"> Example:</span>
+</span><span id="Select.where-2654"><a href="#Select.where-2654"><span class="linenos">2654</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;).sql()</span>
+</span><span id="Select.where-2655"><a href="#Select.where-2655"><span class="linenos">2655</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; OR x &lt; &#39;b&#39;&quot;</span>
+</span><span id="Select.where-2656"><a href="#Select.where-2656"><span class="linenos">2656</span></a>
+</span><span id="Select.where-2657"><a href="#Select.where-2657"><span class="linenos">2657</span></a><span class="sd"> Args:</span>
+</span><span id="Select.where-2658"><a href="#Select.where-2658"><span class="linenos">2658</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.where-2659"><a href="#Select.where-2659"><span class="linenos">2659</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.where-2660"><a href="#Select.where-2660"><span class="linenos">2660</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select.where-2661"><a href="#Select.where-2661"><span class="linenos">2661</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select.where-2662"><a href="#Select.where-2662"><span class="linenos">2662</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select.where-2663"><a href="#Select.where-2663"><span class="linenos">2663</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select.where-2664"><a href="#Select.where-2664"><span class="linenos">2664</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.where-2665"><a href="#Select.where-2665"><span class="linenos">2665</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.where-2666"><a href="#Select.where-2666"><span class="linenos">2666</span></a>
+</span><span id="Select.where-2667"><a href="#Select.where-2667"><span class="linenos">2667</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.where-2668"><a href="#Select.where-2668"><span class="linenos">2668</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.where-2669"><a href="#Select.where-2669"><span class="linenos">2669</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.where-2670"><a href="#Select.where-2670"><span class="linenos">2670</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select.where-2671"><a href="#Select.where-2671"><span class="linenos">2671</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.where-2672"><a href="#Select.where-2672"><span class="linenos">2672</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.where-2673"><a href="#Select.where-2673"><span class="linenos">2673</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="Select.where-2674"><a href="#Select.where-2674"><span class="linenos">2674</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.where-2675"><a href="#Select.where-2675"><span class="linenos">2675</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Where</span><span class="p">,</span>
+</span><span id="Select.where-2676"><a href="#Select.where-2676"><span class="linenos">2676</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.where-2677"><a href="#Select.where-2677"><span class="linenos">2677</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.where-2678"><a href="#Select.where-2678"><span class="linenos">2678</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.where-2679"><a href="#Select.where-2679"><span class="linenos">2679</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23802,37 +24304,37 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Select.having"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.having-2558"><a href="#Select.having-2558"><span class="linenos">2558</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.having-2559"><a href="#Select.having-2559"><span class="linenos">2559</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.having-2560"><a href="#Select.having-2560"><span class="linenos">2560</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
-</span><span id="Select.having-2561"><a href="#Select.having-2561"><span class="linenos">2561</span></a>
-</span><span id="Select.having-2562"><a href="#Select.having-2562"><span class="linenos">2562</span></a><span class="sd"> Example:</span>
-</span><span id="Select.having-2563"><a href="#Select.having-2563"><span class="linenos">2563</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;COUNT(y)&quot;).from_(&quot;tbl&quot;).group_by(&quot;x&quot;).having(&quot;COUNT(y) &gt; 3&quot;).sql()</span>
-</span><span id="Select.having-2564"><a href="#Select.having-2564"><span class="linenos">2564</span></a><span class="sd"> &#39;SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) &gt; 3&#39;</span>
-</span><span id="Select.having-2565"><a href="#Select.having-2565"><span class="linenos">2565</span></a>
-</span><span id="Select.having-2566"><a href="#Select.having-2566"><span class="linenos">2566</span></a><span class="sd"> Args:</span>
-</span><span id="Select.having-2567"><a href="#Select.having-2567"><span class="linenos">2567</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="Select.having-2568"><a href="#Select.having-2568"><span class="linenos">2568</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.having-2569"><a href="#Select.having-2569"><span class="linenos">2569</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
-</span><span id="Select.having-2570"><a href="#Select.having-2570"><span class="linenos">2570</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
-</span><span id="Select.having-2571"><a href="#Select.having-2571"><span class="linenos">2571</span></a><span class="sd"> Otherwise, this resets the expression.</span>
-</span><span id="Select.having-2572"><a href="#Select.having-2572"><span class="linenos">2572</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
-</span><span id="Select.having-2573"><a href="#Select.having-2573"><span class="linenos">2573</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.having-2574"><a href="#Select.having-2574"><span class="linenos">2574</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="Select.having-2575"><a href="#Select.having-2575"><span class="linenos">2575</span></a>
-</span><span id="Select.having-2576"><a href="#Select.having-2576"><span class="linenos">2576</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.having-2577"><a href="#Select.having-2577"><span class="linenos">2577</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.having-2578"><a href="#Select.having-2578"><span class="linenos">2578</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.having-2579"><a href="#Select.having-2579"><span class="linenos">2579</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select.having-2580"><a href="#Select.having-2580"><span class="linenos">2580</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.having-2581"><a href="#Select.having-2581"><span class="linenos">2581</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.having-2582"><a href="#Select.having-2582"><span class="linenos">2582</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;having&quot;</span><span class="p">,</span>
-</span><span id="Select.having-2583"><a href="#Select.having-2583"><span class="linenos">2583</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.having-2584"><a href="#Select.having-2584"><span class="linenos">2584</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
-</span><span id="Select.having-2585"><a href="#Select.having-2585"><span class="linenos">2585</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.having-2586"><a href="#Select.having-2586"><span class="linenos">2586</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.having-2587"><a href="#Select.having-2587"><span class="linenos">2587</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.having-2588"><a href="#Select.having-2588"><span class="linenos">2588</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.having-2681"><a href="#Select.having-2681"><span class="linenos">2681</span></a> <span class="k">def</span> <span class="nf">having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.having-2682"><a href="#Select.having-2682"><span class="linenos">2682</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.having-2683"><a href="#Select.having-2683"><span class="linenos">2683</span></a><span class="sd"> Append to or set the HAVING expressions.</span>
+</span><span id="Select.having-2684"><a href="#Select.having-2684"><span class="linenos">2684</span></a>
+</span><span id="Select.having-2685"><a href="#Select.having-2685"><span class="linenos">2685</span></a><span class="sd"> Example:</span>
+</span><span id="Select.having-2686"><a href="#Select.having-2686"><span class="linenos">2686</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;, &quot;COUNT(y)&quot;).from_(&quot;tbl&quot;).group_by(&quot;x&quot;).having(&quot;COUNT(y) &gt; 3&quot;).sql()</span>
+</span><span id="Select.having-2687"><a href="#Select.having-2687"><span class="linenos">2687</span></a><span class="sd"> &#39;SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) &gt; 3&#39;</span>
+</span><span id="Select.having-2688"><a href="#Select.having-2688"><span class="linenos">2688</span></a>
+</span><span id="Select.having-2689"><a href="#Select.having-2689"><span class="linenos">2689</span></a><span class="sd"> Args:</span>
+</span><span id="Select.having-2690"><a href="#Select.having-2690"><span class="linenos">2690</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="Select.having-2691"><a href="#Select.having-2691"><span class="linenos">2691</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.having-2692"><a href="#Select.having-2692"><span class="linenos">2692</span></a><span class="sd"> Multiple expressions are combined with an AND operator.</span>
+</span><span id="Select.having-2693"><a href="#Select.having-2693"><span class="linenos">2693</span></a><span class="sd"> append (bool): if `True`, AND the new expressions to any existing expression.</span>
+</span><span id="Select.having-2694"><a href="#Select.having-2694"><span class="linenos">2694</span></a><span class="sd"> Otherwise, this resets the expression.</span>
+</span><span id="Select.having-2695"><a href="#Select.having-2695"><span class="linenos">2695</span></a><span class="sd"> dialect (str): the dialect used to parse the input expressions.</span>
+</span><span id="Select.having-2696"><a href="#Select.having-2696"><span class="linenos">2696</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.having-2697"><a href="#Select.having-2697"><span class="linenos">2697</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="Select.having-2698"><a href="#Select.having-2698"><span class="linenos">2698</span></a>
+</span><span id="Select.having-2699"><a href="#Select.having-2699"><span class="linenos">2699</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.having-2700"><a href="#Select.having-2700"><span class="linenos">2700</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.having-2701"><a href="#Select.having-2701"><span class="linenos">2701</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.having-2702"><a href="#Select.having-2702"><span class="linenos">2702</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select.having-2703"><a href="#Select.having-2703"><span class="linenos">2703</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.having-2704"><a href="#Select.having-2704"><span class="linenos">2704</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.having-2705"><a href="#Select.having-2705"><span class="linenos">2705</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;having&quot;</span><span class="p">,</span>
+</span><span id="Select.having-2706"><a href="#Select.having-2706"><span class="linenos">2706</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.having-2707"><a href="#Select.having-2707"><span class="linenos">2707</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Having</span><span class="p">,</span>
+</span><span id="Select.having-2708"><a href="#Select.having-2708"><span class="linenos">2708</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.having-2709"><a href="#Select.having-2709"><span class="linenos">2709</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.having-2710"><a href="#Select.having-2710"><span class="linenos">2710</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.having-2711"><a href="#Select.having-2711"><span class="linenos">2711</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23881,17 +24383,17 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Select.window"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.window-2590"><a href="#Select.window-2590"><span class="linenos">2590</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.window-2591"><a href="#Select.window-2591"><span class="linenos">2591</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
-</span><span id="Select.window-2592"><a href="#Select.window-2592"><span class="linenos">2592</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.window-2593"><a href="#Select.window-2593"><span class="linenos">2593</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.window-2594"><a href="#Select.window-2594"><span class="linenos">2594</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span>
-</span><span id="Select.window-2595"><a href="#Select.window-2595"><span class="linenos">2595</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.window-2596"><a href="#Select.window-2596"><span class="linenos">2596</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="Select.window-2597"><a href="#Select.window-2597"><span class="linenos">2597</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.window-2598"><a href="#Select.window-2598"><span class="linenos">2598</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.window-2599"><a href="#Select.window-2599"><span class="linenos">2599</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.window-2600"><a href="#Select.window-2600"><span class="linenos">2600</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.window-2713"><a href="#Select.window-2713"><span class="linenos">2713</span></a> <span class="k">def</span> <span class="nf">window</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.window-2714"><a href="#Select.window-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="n">_apply_list_builder</span><span class="p">(</span>
+</span><span id="Select.window-2715"><a href="#Select.window-2715"><span class="linenos">2715</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.window-2716"><a href="#Select.window-2716"><span class="linenos">2716</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.window-2717"><a href="#Select.window-2717"><span class="linenos">2717</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span>
+</span><span id="Select.window-2718"><a href="#Select.window-2718"><span class="linenos">2718</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.window-2719"><a href="#Select.window-2719"><span class="linenos">2719</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="Select.window-2720"><a href="#Select.window-2720"><span class="linenos">2720</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.window-2721"><a href="#Select.window-2721"><span class="linenos">2721</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.window-2722"><a href="#Select.window-2722"><span class="linenos">2722</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.window-2723"><a href="#Select.window-2723"><span class="linenos">2723</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23909,17 +24411,17 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Select.qualify"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.qualify-2602"><a href="#Select.qualify-2602"><span class="linenos">2602</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
-</span><span id="Select.qualify-2603"><a href="#Select.qualify-2603"><span class="linenos">2603</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
-</span><span id="Select.qualify-2604"><a href="#Select.qualify-2604"><span class="linenos">2604</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Select.qualify-2605"><a href="#Select.qualify-2605"><span class="linenos">2605</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
-</span><span id="Select.qualify-2606"><a href="#Select.qualify-2606"><span class="linenos">2606</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
-</span><span id="Select.qualify-2607"><a href="#Select.qualify-2607"><span class="linenos">2607</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
-</span><span id="Select.qualify-2608"><a href="#Select.qualify-2608"><span class="linenos">2608</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
-</span><span id="Select.qualify-2609"><a href="#Select.qualify-2609"><span class="linenos">2609</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.qualify-2610"><a href="#Select.qualify-2610"><span class="linenos">2610</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
-</span><span id="Select.qualify-2611"><a href="#Select.qualify-2611"><span class="linenos">2611</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.qualify-2612"><a href="#Select.qualify-2612"><span class="linenos">2612</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.qualify-2725"><a href="#Select.qualify-2725"><span class="linenos">2725</span></a> <span class="k">def</span> <span class="nf">qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Select</span><span class="p">:</span>
+</span><span id="Select.qualify-2726"><a href="#Select.qualify-2726"><span class="linenos">2726</span></a> <span class="k">return</span> <span class="n">_apply_conjunction_builder</span><span class="p">(</span>
+</span><span id="Select.qualify-2727"><a href="#Select.qualify-2727"><span class="linenos">2727</span></a> <span class="o">*</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Select.qualify-2728"><a href="#Select.qualify-2728"><span class="linenos">2728</span></a> <span class="n">instance</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+</span><span id="Select.qualify-2729"><a href="#Select.qualify-2729"><span class="linenos">2729</span></a> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span>
+</span><span id="Select.qualify-2730"><a href="#Select.qualify-2730"><span class="linenos">2730</span></a> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span>
+</span><span id="Select.qualify-2731"><a href="#Select.qualify-2731"><span class="linenos">2731</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Qualify</span><span class="p">,</span>
+</span><span id="Select.qualify-2732"><a href="#Select.qualify-2732"><span class="linenos">2732</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.qualify-2733"><a href="#Select.qualify-2733"><span class="linenos">2733</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="Select.qualify-2734"><a href="#Select.qualify-2734"><span class="linenos">2734</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.qualify-2735"><a href="#Select.qualify-2735"><span class="linenos">2735</span></a> <span class="p">)</span>
</span></pre></div>
@@ -23931,30 +24433,32 @@ Otherwise, this resets the expression.</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">distinct</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">distinct</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">) -> <span class="n"><a href="#Select">sqlglot.expressions.Select</a></span>:</span></span>
+ <span class="name">distinct</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">ons</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span>,</span><span class="param"> <span class="n">distinct</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="n">copy</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"><a href="#Select">sqlglot.expressions.Select</a></span>:</span></span>
<label class="view-source-button" for="Select.distinct-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Select.distinct"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.distinct-2614"><a href="#Select.distinct-2614"><span class="linenos">2614</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="Select.distinct-2615"><a href="#Select.distinct-2615"><span class="linenos">2615</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.distinct-2616"><a href="#Select.distinct-2616"><span class="linenos">2616</span></a><span class="sd"> Set the OFFSET expression.</span>
-</span><span id="Select.distinct-2617"><a href="#Select.distinct-2617"><span class="linenos">2617</span></a>
-</span><span id="Select.distinct-2618"><a href="#Select.distinct-2618"><span class="linenos">2618</span></a><span class="sd"> Example:</span>
-</span><span id="Select.distinct-2619"><a href="#Select.distinct-2619"><span class="linenos">2619</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
-</span><span id="Select.distinct-2620"><a href="#Select.distinct-2620"><span class="linenos">2620</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
-</span><span id="Select.distinct-2621"><a href="#Select.distinct-2621"><span class="linenos">2621</span></a>
-</span><span id="Select.distinct-2622"><a href="#Select.distinct-2622"><span class="linenos">2622</span></a><span class="sd"> Args:</span>
-</span><span id="Select.distinct-2623"><a href="#Select.distinct-2623"><span class="linenos">2623</span></a><span class="sd"> distinct (bool): whether the Select should be distinct</span>
-</span><span id="Select.distinct-2624"><a href="#Select.distinct-2624"><span class="linenos">2624</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.distinct-2625"><a href="#Select.distinct-2625"><span class="linenos">2625</span></a>
-</span><span id="Select.distinct-2626"><a href="#Select.distinct-2626"><span class="linenos">2626</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.distinct-2627"><a href="#Select.distinct-2627"><span class="linenos">2627</span></a><span class="sd"> Select: the modified expression.</span>
-</span><span id="Select.distinct-2628"><a href="#Select.distinct-2628"><span class="linenos">2628</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.distinct-2629"><a href="#Select.distinct-2629"><span class="linenos">2629</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Select.distinct-2630"><a href="#Select.distinct-2630"><span class="linenos">2630</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">,</span> <span class="n">Distinct</span><span class="p">()</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Select.distinct-2631"><a href="#Select.distinct-2631"><span class="linenos">2631</span></a> <span class="k">return</span> <span class="n">instance</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.distinct-2737"><a href="#Select.distinct-2737"><span class="linenos">2737</span></a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">ons</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">distinct</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="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="n">Select</span><span class="p">:</span>
+</span><span id="Select.distinct-2738"><a href="#Select.distinct-2738"><span class="linenos">2738</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.distinct-2739"><a href="#Select.distinct-2739"><span class="linenos">2739</span></a><span class="sd"> Set the OFFSET expression.</span>
+</span><span id="Select.distinct-2740"><a href="#Select.distinct-2740"><span class="linenos">2740</span></a>
+</span><span id="Select.distinct-2741"><a href="#Select.distinct-2741"><span class="linenos">2741</span></a><span class="sd"> Example:</span>
+</span><span id="Select.distinct-2742"><a href="#Select.distinct-2742"><span class="linenos">2742</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;x&quot;).distinct().sql()</span>
+</span><span id="Select.distinct-2743"><a href="#Select.distinct-2743"><span class="linenos">2743</span></a><span class="sd"> &#39;SELECT DISTINCT x FROM tbl&#39;</span>
+</span><span id="Select.distinct-2744"><a href="#Select.distinct-2744"><span class="linenos">2744</span></a>
+</span><span id="Select.distinct-2745"><a href="#Select.distinct-2745"><span class="linenos">2745</span></a><span class="sd"> Args:</span>
+</span><span id="Select.distinct-2746"><a href="#Select.distinct-2746"><span class="linenos">2746</span></a><span class="sd"> ons: the expressions to distinct on</span>
+</span><span id="Select.distinct-2747"><a href="#Select.distinct-2747"><span class="linenos">2747</span></a><span class="sd"> distinct: whether the Select should be distinct</span>
+</span><span id="Select.distinct-2748"><a href="#Select.distinct-2748"><span class="linenos">2748</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.distinct-2749"><a href="#Select.distinct-2749"><span class="linenos">2749</span></a>
+</span><span id="Select.distinct-2750"><a href="#Select.distinct-2750"><span class="linenos">2750</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.distinct-2751"><a href="#Select.distinct-2751"><span class="linenos">2751</span></a><span class="sd"> Select: the modified expression.</span>
+</span><span id="Select.distinct-2752"><a href="#Select.distinct-2752"><span class="linenos">2752</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.distinct-2753"><a href="#Select.distinct-2753"><span class="linenos">2753</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Select.distinct-2754"><a href="#Select.distinct-2754"><span class="linenos">2754</span></a> <span class="n">on</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">maybe_parse</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">on</span> <span class="ow">in</span> <span class="n">ons</span><span class="p">])</span> <span class="k">if</span> <span class="n">ons</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Select.distinct-2755"><a href="#Select.distinct-2755"><span class="linenos">2755</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;distinct&quot;</span><span class="p">,</span> <span class="n">Distinct</span><span class="p">(</span><span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">)</span> <span class="k">if</span> <span class="n">distinct</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Select.distinct-2756"><a href="#Select.distinct-2756"><span class="linenos">2756</span></a> <span class="k">return</span> <span class="n">instance</span>
</span></pre></div>
@@ -23973,8 +24477,9 @@ Otherwise, this resets the expression.</li>
<h6 id="arguments">Arguments:</h6>
<ul>
-<li><strong>distinct (bool):</strong> whether the Select should be distinct</li>
-<li><strong>copy (bool):</strong> if <code>False</code>, modify this expression instance in-place.</li>
+<li><strong>ons:</strong> the expressions to distinct on</li>
+<li><strong>distinct:</strong> whether the Select should be distinct</li>
+<li><strong>copy:</strong> if <code>False</code>, modify this expression instance in-place.</li>
</ul>
<h6 id="returns">Returns:</h6>
@@ -23997,42 +24502,42 @@ Otherwise, this resets the expression.</li>
</div>
<a class="headerlink" href="#Select.ctas"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.ctas-2633"><a href="#Select.ctas-2633"><span class="linenos">2633</span></a> <span class="k">def</span> <span class="nf">ctas</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">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Create</span><span class="p">:</span>
-</span><span id="Select.ctas-2634"><a href="#Select.ctas-2634"><span class="linenos">2634</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.ctas-2635"><a href="#Select.ctas-2635"><span class="linenos">2635</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
-</span><span id="Select.ctas-2636"><a href="#Select.ctas-2636"><span class="linenos">2636</span></a>
-</span><span id="Select.ctas-2637"><a href="#Select.ctas-2637"><span class="linenos">2637</span></a><span class="sd"> Example:</span>
-</span><span id="Select.ctas-2638"><a href="#Select.ctas-2638"><span class="linenos">2638</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).ctas(&quot;x&quot;).sql()</span>
-</span><span id="Select.ctas-2639"><a href="#Select.ctas-2639"><span class="linenos">2639</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
-</span><span id="Select.ctas-2640"><a href="#Select.ctas-2640"><span class="linenos">2640</span></a>
-</span><span id="Select.ctas-2641"><a href="#Select.ctas-2641"><span class="linenos">2641</span></a><span class="sd"> Args:</span>
-</span><span id="Select.ctas-2642"><a href="#Select.ctas-2642"><span class="linenos">2642</span></a><span class="sd"> table (str | Expression): the SQL code string to parse as the table name.</span>
-</span><span id="Select.ctas-2643"><a href="#Select.ctas-2643"><span class="linenos">2643</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="Select.ctas-2644"><a href="#Select.ctas-2644"><span class="linenos">2644</span></a><span class="sd"> properties (dict): an optional mapping of table properties</span>
-</span><span id="Select.ctas-2645"><a href="#Select.ctas-2645"><span class="linenos">2645</span></a><span class="sd"> dialect (str): the dialect used to parse the input table.</span>
-</span><span id="Select.ctas-2646"><a href="#Select.ctas-2646"><span class="linenos">2646</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.ctas-2647"><a href="#Select.ctas-2647"><span class="linenos">2647</span></a><span class="sd"> opts (kwargs): other options to use to parse the input table.</span>
-</span><span id="Select.ctas-2648"><a href="#Select.ctas-2648"><span class="linenos">2648</span></a>
-</span><span id="Select.ctas-2649"><a href="#Select.ctas-2649"><span class="linenos">2649</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.ctas-2650"><a href="#Select.ctas-2650"><span class="linenos">2650</span></a><span class="sd"> Create: the CREATE TABLE AS expression</span>
-</span><span id="Select.ctas-2651"><a href="#Select.ctas-2651"><span class="linenos">2651</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.ctas-2652"><a href="#Select.ctas-2652"><span class="linenos">2652</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Select.ctas-2653"><a href="#Select.ctas-2653"><span class="linenos">2653</span></a> <span class="n">table_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
-</span><span id="Select.ctas-2654"><a href="#Select.ctas-2654"><span class="linenos">2654</span></a> <span class="n">table</span><span class="p">,</span>
-</span><span id="Select.ctas-2655"><a href="#Select.ctas-2655"><span class="linenos">2655</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
-</span><span id="Select.ctas-2656"><a href="#Select.ctas-2656"><span class="linenos">2656</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="Select.ctas-2657"><a href="#Select.ctas-2657"><span class="linenos">2657</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="Select.ctas-2658"><a href="#Select.ctas-2658"><span class="linenos">2658</span></a> <span class="p">)</span>
-</span><span id="Select.ctas-2659"><a href="#Select.ctas-2659"><span class="linenos">2659</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Select.ctas-2660"><a href="#Select.ctas-2660"><span class="linenos">2660</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="Select.ctas-2661"><a href="#Select.ctas-2661"><span class="linenos">2661</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
-</span><span id="Select.ctas-2662"><a href="#Select.ctas-2662"><span class="linenos">2662</span></a>
-</span><span id="Select.ctas-2663"><a href="#Select.ctas-2663"><span class="linenos">2663</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
-</span><span id="Select.ctas-2664"><a href="#Select.ctas-2664"><span class="linenos">2664</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table_expression</span><span class="p">,</span>
-</span><span id="Select.ctas-2665"><a href="#Select.ctas-2665"><span class="linenos">2665</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;table&quot;</span><span class="p">,</span>
-</span><span id="Select.ctas-2666"><a href="#Select.ctas-2666"><span class="linenos">2666</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
-</span><span id="Select.ctas-2667"><a href="#Select.ctas-2667"><span class="linenos">2667</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties_expression</span><span class="p">,</span>
-</span><span id="Select.ctas-2668"><a href="#Select.ctas-2668"><span class="linenos">2668</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.ctas-2758"><a href="#Select.ctas-2758"><span class="linenos">2758</span></a> <span class="k">def</span> <span class="nf">ctas</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">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Create</span><span class="p">:</span>
+</span><span id="Select.ctas-2759"><a href="#Select.ctas-2759"><span class="linenos">2759</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.ctas-2760"><a href="#Select.ctas-2760"><span class="linenos">2760</span></a><span class="sd"> Convert this expression to a CREATE TABLE AS statement.</span>
+</span><span id="Select.ctas-2761"><a href="#Select.ctas-2761"><span class="linenos">2761</span></a>
+</span><span id="Select.ctas-2762"><a href="#Select.ctas-2762"><span class="linenos">2762</span></a><span class="sd"> Example:</span>
+</span><span id="Select.ctas-2763"><a href="#Select.ctas-2763"><span class="linenos">2763</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;*&quot;).from_(&quot;tbl&quot;).ctas(&quot;x&quot;).sql()</span>
+</span><span id="Select.ctas-2764"><a href="#Select.ctas-2764"><span class="linenos">2764</span></a><span class="sd"> &#39;CREATE TABLE x AS SELECT * FROM tbl&#39;</span>
+</span><span id="Select.ctas-2765"><a href="#Select.ctas-2765"><span class="linenos">2765</span></a>
+</span><span id="Select.ctas-2766"><a href="#Select.ctas-2766"><span class="linenos">2766</span></a><span class="sd"> Args:</span>
+</span><span id="Select.ctas-2767"><a href="#Select.ctas-2767"><span class="linenos">2767</span></a><span class="sd"> table (str | Expression): the SQL code string to parse as the table name.</span>
+</span><span id="Select.ctas-2768"><a href="#Select.ctas-2768"><span class="linenos">2768</span></a><span class="sd"> If another `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="Select.ctas-2769"><a href="#Select.ctas-2769"><span class="linenos">2769</span></a><span class="sd"> properties (dict): an optional mapping of table properties</span>
+</span><span id="Select.ctas-2770"><a href="#Select.ctas-2770"><span class="linenos">2770</span></a><span class="sd"> dialect (str): the dialect used to parse the input table.</span>
+</span><span id="Select.ctas-2771"><a href="#Select.ctas-2771"><span class="linenos">2771</span></a><span class="sd"> copy (bool): if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.ctas-2772"><a href="#Select.ctas-2772"><span class="linenos">2772</span></a><span class="sd"> opts (kwargs): other options to use to parse the input table.</span>
+</span><span id="Select.ctas-2773"><a href="#Select.ctas-2773"><span class="linenos">2773</span></a>
+</span><span id="Select.ctas-2774"><a href="#Select.ctas-2774"><span class="linenos">2774</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.ctas-2775"><a href="#Select.ctas-2775"><span class="linenos">2775</span></a><span class="sd"> Create: the CREATE TABLE AS expression</span>
+</span><span id="Select.ctas-2776"><a href="#Select.ctas-2776"><span class="linenos">2776</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.ctas-2777"><a href="#Select.ctas-2777"><span class="linenos">2777</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Select.ctas-2778"><a href="#Select.ctas-2778"><span class="linenos">2778</span></a> <span class="n">table_expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span>
+</span><span id="Select.ctas-2779"><a href="#Select.ctas-2779"><span class="linenos">2779</span></a> <span class="n">table</span><span class="p">,</span>
+</span><span id="Select.ctas-2780"><a href="#Select.ctas-2780"><span class="linenos">2780</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Table</span><span class="p">,</span>
+</span><span id="Select.ctas-2781"><a href="#Select.ctas-2781"><span class="linenos">2781</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="Select.ctas-2782"><a href="#Select.ctas-2782"><span class="linenos">2782</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="Select.ctas-2783"><a href="#Select.ctas-2783"><span class="linenos">2783</span></a> <span class="p">)</span>
+</span><span id="Select.ctas-2784"><a href="#Select.ctas-2784"><span class="linenos">2784</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Select.ctas-2785"><a href="#Select.ctas-2785"><span class="linenos">2785</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="Select.ctas-2786"><a href="#Select.ctas-2786"><span class="linenos">2786</span></a> <span class="n">properties_expression</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">properties</span><span class="p">)</span>
+</span><span id="Select.ctas-2787"><a href="#Select.ctas-2787"><span class="linenos">2787</span></a>
+</span><span id="Select.ctas-2788"><a href="#Select.ctas-2788"><span class="linenos">2788</span></a> <span class="k">return</span> <span class="n">Create</span><span class="p">(</span>
+</span><span id="Select.ctas-2789"><a href="#Select.ctas-2789"><span class="linenos">2789</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table_expression</span><span class="p">,</span>
+</span><span id="Select.ctas-2790"><a href="#Select.ctas-2790"><span class="linenos">2790</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;table&quot;</span><span class="p">,</span>
+</span><span id="Select.ctas-2791"><a href="#Select.ctas-2791"><span class="linenos">2791</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">instance</span><span class="p">,</span>
+</span><span id="Select.ctas-2792"><a href="#Select.ctas-2792"><span class="linenos">2792</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties_expression</span><span class="p">,</span>
+</span><span id="Select.ctas-2793"><a href="#Select.ctas-2793"><span class="linenos">2793</span></a> <span class="p">)</span>
</span></pre></div>
@@ -24079,29 +24584,29 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Select.lock"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Select.lock-2670"><a href="#Select.lock-2670"><span class="linenos">2670</span></a> <span class="k">def</span> <span class="nf">lock</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">update</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="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="n">Select</span><span class="p">:</span>
-</span><span id="Select.lock-2671"><a href="#Select.lock-2671"><span class="linenos">2671</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Select.lock-2672"><a href="#Select.lock-2672"><span class="linenos">2672</span></a><span class="sd"> Set the locking read mode for this expression.</span>
-</span><span id="Select.lock-2673"><a href="#Select.lock-2673"><span class="linenos">2673</span></a>
-</span><span id="Select.lock-2674"><a href="#Select.lock-2674"><span class="linenos">2674</span></a><span class="sd"> Examples:</span>
-</span><span id="Select.lock-2675"><a href="#Select.lock-2675"><span class="linenos">2675</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock().sql(&quot;mysql&quot;)</span>
-</span><span id="Select.lock-2676"><a href="#Select.lock-2676"><span class="linenos">2676</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
-</span><span id="Select.lock-2677"><a href="#Select.lock-2677"><span class="linenos">2677</span></a>
-</span><span id="Select.lock-2678"><a href="#Select.lock-2678"><span class="linenos">2678</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock(update=False).sql(&quot;mysql&quot;)</span>
-</span><span id="Select.lock-2679"><a href="#Select.lock-2679"><span class="linenos">2679</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
-</span><span id="Select.lock-2680"><a href="#Select.lock-2680"><span class="linenos">2680</span></a>
-</span><span id="Select.lock-2681"><a href="#Select.lock-2681"><span class="linenos">2681</span></a><span class="sd"> Args:</span>
-</span><span id="Select.lock-2682"><a href="#Select.lock-2682"><span class="linenos">2682</span></a><span class="sd"> update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`.</span>
-</span><span id="Select.lock-2683"><a href="#Select.lock-2683"><span class="linenos">2683</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
-</span><span id="Select.lock-2684"><a href="#Select.lock-2684"><span class="linenos">2684</span></a>
-</span><span id="Select.lock-2685"><a href="#Select.lock-2685"><span class="linenos">2685</span></a><span class="sd"> Returns:</span>
-</span><span id="Select.lock-2686"><a href="#Select.lock-2686"><span class="linenos">2686</span></a><span class="sd"> The modified expression.</span>
-</span><span id="Select.lock-2687"><a href="#Select.lock-2687"><span class="linenos">2687</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Select.lock-2688"><a href="#Select.lock-2688"><span class="linenos">2688</span></a>
-</span><span id="Select.lock-2689"><a href="#Select.lock-2689"><span class="linenos">2689</span></a> <span class="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
-</span><span id="Select.lock-2690"><a href="#Select.lock-2690"><span class="linenos">2690</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;lock&quot;</span><span class="p">,</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><span id="Select.lock-2691"><a href="#Select.lock-2691"><span class="linenos">2691</span></a>
-</span><span id="Select.lock-2692"><a href="#Select.lock-2692"><span class="linenos">2692</span></a> <span class="k">return</span> <span class="n">inst</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Select.lock-2795"><a href="#Select.lock-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">lock</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">update</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="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="n">Select</span><span class="p">:</span>
+</span><span id="Select.lock-2796"><a href="#Select.lock-2796"><span class="linenos">2796</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Select.lock-2797"><a href="#Select.lock-2797"><span class="linenos">2797</span></a><span class="sd"> Set the locking read mode for this expression.</span>
+</span><span id="Select.lock-2798"><a href="#Select.lock-2798"><span class="linenos">2798</span></a>
+</span><span id="Select.lock-2799"><a href="#Select.lock-2799"><span class="linenos">2799</span></a><span class="sd"> Examples:</span>
+</span><span id="Select.lock-2800"><a href="#Select.lock-2800"><span class="linenos">2800</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock().sql(&quot;mysql&quot;)</span>
+</span><span id="Select.lock-2801"><a href="#Select.lock-2801"><span class="linenos">2801</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR UPDATE&quot;</span>
+</span><span id="Select.lock-2802"><a href="#Select.lock-2802"><span class="linenos">2802</span></a>
+</span><span id="Select.lock-2803"><a href="#Select.lock-2803"><span class="linenos">2803</span></a><span class="sd"> &gt;&gt;&gt; Select().select(&quot;x&quot;).from_(&quot;tbl&quot;).where(&quot;x = &#39;a&#39;&quot;).lock(update=False).sql(&quot;mysql&quot;)</span>
+</span><span id="Select.lock-2804"><a href="#Select.lock-2804"><span class="linenos">2804</span></a><span class="sd"> &quot;SELECT x FROM tbl WHERE x = &#39;a&#39; FOR SHARE&quot;</span>
+</span><span id="Select.lock-2805"><a href="#Select.lock-2805"><span class="linenos">2805</span></a>
+</span><span id="Select.lock-2806"><a href="#Select.lock-2806"><span class="linenos">2806</span></a><span class="sd"> Args:</span>
+</span><span id="Select.lock-2807"><a href="#Select.lock-2807"><span class="linenos">2807</span></a><span class="sd"> update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`.</span>
+</span><span id="Select.lock-2808"><a href="#Select.lock-2808"><span class="linenos">2808</span></a><span class="sd"> copy: if `False`, modify this expression instance in-place.</span>
+</span><span id="Select.lock-2809"><a href="#Select.lock-2809"><span class="linenos">2809</span></a>
+</span><span id="Select.lock-2810"><a href="#Select.lock-2810"><span class="linenos">2810</span></a><span class="sd"> Returns:</span>
+</span><span id="Select.lock-2811"><a href="#Select.lock-2811"><span class="linenos">2811</span></a><span class="sd"> The modified expression.</span>
+</span><span id="Select.lock-2812"><a href="#Select.lock-2812"><span class="linenos">2812</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Select.lock-2813"><a href="#Select.lock-2813"><span class="linenos">2813</span></a>
+</span><span id="Select.lock-2814"><a href="#Select.lock-2814"><span class="linenos">2814</span></a> <span class="n">inst</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Select.lock-2815"><a href="#Select.lock-2815"><span class="linenos">2815</span></a> <span class="n">inst</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;lock&quot;</span><span class="p">,</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><span id="Select.lock-2816"><a href="#Select.lock-2816"><span class="linenos">2816</span></a>
+</span><span id="Select.lock-2817"><a href="#Select.lock-2817"><span class="linenos">2817</span></a> <span class="k">return</span> <span class="n">inst</span>
</span></pre></div>
@@ -24219,30 +24724,30 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Subquery"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery-2707"><a href="#Subquery-2707"><span class="linenos">2707</span></a><span class="k">class</span> <span class="nc">Subquery</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
-</span><span id="Subquery-2708"><a href="#Subquery-2708"><span class="linenos">2708</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Subquery-2709"><a href="#Subquery-2709"><span class="linenos">2709</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Subquery-2710"><a href="#Subquery-2710"><span class="linenos">2710</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Subquery-2711"><a href="#Subquery-2711"><span class="linenos">2711</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Subquery-2712"><a href="#Subquery-2712"><span class="linenos">2712</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
-</span><span id="Subquery-2713"><a href="#Subquery-2713"><span class="linenos">2713</span></a> <span class="p">}</span>
-</span><span id="Subquery-2714"><a href="#Subquery-2714"><span class="linenos">2714</span></a>
-</span><span id="Subquery-2715"><a href="#Subquery-2715"><span class="linenos">2715</span></a> <span class="k">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Subquery-2716"><a href="#Subquery-2716"><span class="linenos">2716</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subquery-2717"><a href="#Subquery-2717"><span class="linenos">2717</span></a><span class="sd"> Returns the first non subquery.</span>
-</span><span id="Subquery-2718"><a href="#Subquery-2718"><span class="linenos">2718</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subquery-2719"><a href="#Subquery-2719"><span class="linenos">2719</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
-</span><span id="Subquery-2720"><a href="#Subquery-2720"><span class="linenos">2720</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Subquery</span><span class="p">):</span>
-</span><span id="Subquery-2721"><a href="#Subquery-2721"><span class="linenos">2721</span></a> <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="Subquery-2722"><a href="#Subquery-2722"><span class="linenos">2722</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Subquery-2723"><a href="#Subquery-2723"><span class="linenos">2723</span></a>
-</span><span id="Subquery-2724"><a href="#Subquery-2724"><span class="linenos">2724</span></a> <span class="nd">@property</span>
-</span><span id="Subquery-2725"><a href="#Subquery-2725"><span class="linenos">2725</span></a> <span class="k">def</span> <span class="nf">is_star</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="Subquery-2726"><a href="#Subquery-2726"><span class="linenos">2726</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span>
-</span><span id="Subquery-2727"><a href="#Subquery-2727"><span class="linenos">2727</span></a>
-</span><span id="Subquery-2728"><a href="#Subquery-2728"><span class="linenos">2728</span></a> <span class="nd">@property</span>
-</span><span id="Subquery-2729"><a href="#Subquery-2729"><span class="linenos">2729</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><span id="Subquery-2730"><a href="#Subquery-2730"><span class="linenos">2730</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery-2832"><a href="#Subquery-2832"><span class="linenos">2832</span></a><span class="k">class</span> <span class="nc">Subquery</span><span class="p">(</span><span class="n">DerivedTable</span><span class="p">,</span> <span class="n">Unionable</span><span class="p">):</span>
+</span><span id="Subquery-2833"><a href="#Subquery-2833"><span class="linenos">2833</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Subquery-2834"><a href="#Subquery-2834"><span class="linenos">2834</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Subquery-2835"><a href="#Subquery-2835"><span class="linenos">2835</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Subquery-2836"><a href="#Subquery-2836"><span class="linenos">2836</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Subquery-2837"><a href="#Subquery-2837"><span class="linenos">2837</span></a> <span class="o">**</span><span class="n">QUERY_MODIFIERS</span><span class="p">,</span>
+</span><span id="Subquery-2838"><a href="#Subquery-2838"><span class="linenos">2838</span></a> <span class="p">}</span>
+</span><span id="Subquery-2839"><a href="#Subquery-2839"><span class="linenos">2839</span></a>
+</span><span id="Subquery-2840"><a href="#Subquery-2840"><span class="linenos">2840</span></a> <span class="k">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Subquery-2841"><a href="#Subquery-2841"><span class="linenos">2841</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subquery-2842"><a href="#Subquery-2842"><span class="linenos">2842</span></a><span class="sd"> Returns the first non subquery.</span>
+</span><span id="Subquery-2843"><a href="#Subquery-2843"><span class="linenos">2843</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subquery-2844"><a href="#Subquery-2844"><span class="linenos">2844</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="Subquery-2845"><a href="#Subquery-2845"><span class="linenos">2845</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Subquery</span><span class="p">):</span>
+</span><span id="Subquery-2846"><a href="#Subquery-2846"><span class="linenos">2846</span></a> <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="Subquery-2847"><a href="#Subquery-2847"><span class="linenos">2847</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Subquery-2848"><a href="#Subquery-2848"><span class="linenos">2848</span></a>
+</span><span id="Subquery-2849"><a href="#Subquery-2849"><span class="linenos">2849</span></a> <span class="nd">@property</span>
+</span><span id="Subquery-2850"><a href="#Subquery-2850"><span class="linenos">2850</span></a> <span class="k">def</span> <span class="nf">is_star</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="Subquery-2851"><a href="#Subquery-2851"><span class="linenos">2851</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_star</span>
+</span><span id="Subquery-2852"><a href="#Subquery-2852"><span class="linenos">2852</span></a>
+</span><span id="Subquery-2853"><a href="#Subquery-2853"><span class="linenos">2853</span></a> <span class="nd">@property</span>
+</span><span id="Subquery-2854"><a href="#Subquery-2854"><span class="linenos">2854</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><span id="Subquery-2855"><a href="#Subquery-2855"><span class="linenos">2855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
</span></pre></div>
@@ -24259,14 +24764,14 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Subquery.unnest"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery.unnest-2715"><a href="#Subquery.unnest-2715"><span class="linenos">2715</span></a> <span class="k">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Subquery.unnest-2716"><a href="#Subquery.unnest-2716"><span class="linenos">2716</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Subquery.unnest-2717"><a href="#Subquery.unnest-2717"><span class="linenos">2717</span></a><span class="sd"> Returns the first non subquery.</span>
-</span><span id="Subquery.unnest-2718"><a href="#Subquery.unnest-2718"><span class="linenos">2718</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Subquery.unnest-2719"><a href="#Subquery.unnest-2719"><span class="linenos">2719</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
-</span><span id="Subquery.unnest-2720"><a href="#Subquery.unnest-2720"><span class="linenos">2720</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Subquery</span><span class="p">):</span>
-</span><span id="Subquery.unnest-2721"><a href="#Subquery.unnest-2721"><span class="linenos">2721</span></a> <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="Subquery.unnest-2722"><a href="#Subquery.unnest-2722"><span class="linenos">2722</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Subquery.unnest-2840"><a href="#Subquery.unnest-2840"><span class="linenos">2840</span></a> <span class="k">def</span> <span class="nf">unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Subquery.unnest-2841"><a href="#Subquery.unnest-2841"><span class="linenos">2841</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Subquery.unnest-2842"><a href="#Subquery.unnest-2842"><span class="linenos">2842</span></a><span class="sd"> Returns the first non subquery.</span>
+</span><span id="Subquery.unnest-2843"><a href="#Subquery.unnest-2843"><span class="linenos">2843</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Subquery.unnest-2844"><a href="#Subquery.unnest-2844"><span class="linenos">2844</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span>
+</span><span id="Subquery.unnest-2845"><a href="#Subquery.unnest-2845"><span class="linenos">2845</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">Subquery</span><span class="p">):</span>
+</span><span id="Subquery.unnest-2846"><a href="#Subquery.unnest-2846"><span class="linenos">2846</span></a> <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="Subquery.unnest-2847"><a href="#Subquery.unnest-2847"><span class="linenos">2847</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -24378,19 +24883,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#TableSample"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TableSample-2733"><a href="#TableSample-2733"><span class="linenos">2733</span></a><span class="k">class</span> <span class="nc">TableSample</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="TableSample-2734"><a href="#TableSample-2734"><span class="linenos">2734</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="TableSample-2735"><a href="#TableSample-2735"><span class="linenos">2735</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2736"><a href="#TableSample-2736"><span class="linenos">2736</span></a> <span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2737"><a href="#TableSample-2737"><span class="linenos">2737</span></a> <span class="s2">&quot;bucket_numerator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2738"><a href="#TableSample-2738"><span class="linenos">2738</span></a> <span class="s2">&quot;bucket_denominator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2739"><a href="#TableSample-2739"><span class="linenos">2739</span></a> <span class="s2">&quot;bucket_field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2740"><a href="#TableSample-2740"><span class="linenos">2740</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2741"><a href="#TableSample-2741"><span class="linenos">2741</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2742"><a href="#TableSample-2742"><span class="linenos">2742</span></a> <span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2743"><a href="#TableSample-2743"><span class="linenos">2743</span></a> <span class="s2">&quot;seed&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2744"><a href="#TableSample-2744"><span class="linenos">2744</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="TableSample-2745"><a href="#TableSample-2745"><span class="linenos">2745</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TableSample-2858"><a href="#TableSample-2858"><span class="linenos">2858</span></a><span class="k">class</span> <span class="nc">TableSample</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="TableSample-2859"><a href="#TableSample-2859"><span class="linenos">2859</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="TableSample-2860"><a href="#TableSample-2860"><span class="linenos">2860</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2861"><a href="#TableSample-2861"><span class="linenos">2861</span></a> <span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2862"><a href="#TableSample-2862"><span class="linenos">2862</span></a> <span class="s2">&quot;bucket_numerator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2863"><a href="#TableSample-2863"><span class="linenos">2863</span></a> <span class="s2">&quot;bucket_denominator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2864"><a href="#TableSample-2864"><span class="linenos">2864</span></a> <span class="s2">&quot;bucket_field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2865"><a href="#TableSample-2865"><span class="linenos">2865</span></a> <span class="s2">&quot;percent&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2866"><a href="#TableSample-2866"><span class="linenos">2866</span></a> <span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2867"><a href="#TableSample-2867"><span class="linenos">2867</span></a> <span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2868"><a href="#TableSample-2868"><span class="linenos">2868</span></a> <span class="s2">&quot;seed&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2869"><a href="#TableSample-2869"><span class="linenos">2869</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="TableSample-2870"><a href="#TableSample-2870"><span class="linenos">2870</span></a> <span class="p">}</span>
</span></pre></div>
@@ -24453,14 +24958,14 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Tag"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tag-2748"><a href="#Tag-2748"><span class="linenos">2748</span></a><span class="k">class</span> <span class="nc">Tag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Tag-2749"><a href="#Tag-2749"><span class="linenos">2749</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Tags are used for generating arbitrary sql like SELECT &lt;span&gt;x&lt;/span&gt;.&quot;&quot;&quot;</span>
-</span><span id="Tag-2750"><a href="#Tag-2750"><span class="linenos">2750</span></a>
-</span><span id="Tag-2751"><a href="#Tag-2751"><span class="linenos">2751</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tag-2752"><a href="#Tag-2752"><span class="linenos">2752</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Tag-2753"><a href="#Tag-2753"><span class="linenos">2753</span></a> <span class="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Tag-2754"><a href="#Tag-2754"><span class="linenos">2754</span></a> <span class="s2">&quot;postfix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Tag-2755"><a href="#Tag-2755"><span class="linenos">2755</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tag-2873"><a href="#Tag-2873"><span class="linenos">2873</span></a><span class="k">class</span> <span class="nc">Tag</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Tag-2874"><a href="#Tag-2874"><span class="linenos">2874</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Tags are used for generating arbitrary sql like SELECT &lt;span&gt;x&lt;/span&gt;.&quot;&quot;&quot;</span>
+</span><span id="Tag-2875"><a href="#Tag-2875"><span class="linenos">2875</span></a>
+</span><span id="Tag-2876"><a href="#Tag-2876"><span class="linenos">2876</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tag-2877"><a href="#Tag-2877"><span class="linenos">2877</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Tag-2878"><a href="#Tag-2878"><span class="linenos">2878</span></a> <span class="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Tag-2879"><a href="#Tag-2879"><span class="linenos">2879</span></a> <span class="s2">&quot;postfix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Tag-2880"><a href="#Tag-2880"><span class="linenos">2880</span></a> <span class="p">}</span>
</span></pre></div>
@@ -24525,15 +25030,15 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Pivot"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Pivot-2758"><a href="#Pivot-2758"><span class="linenos">2758</span></a><span class="k">class</span> <span class="nc">Pivot</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Pivot-2759"><a href="#Pivot-2759"><span class="linenos">2759</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Pivot-2760"><a href="#Pivot-2760"><span class="linenos">2760</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Pivot-2761"><a href="#Pivot-2761"><span class="linenos">2761</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Pivot-2762"><a href="#Pivot-2762"><span class="linenos">2762</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Pivot-2763"><a href="#Pivot-2763"><span class="linenos">2763</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Pivot-2764"><a href="#Pivot-2764"><span class="linenos">2764</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Pivot-2765"><a href="#Pivot-2765"><span class="linenos">2765</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Pivot-2766"><a href="#Pivot-2766"><span class="linenos">2766</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Pivot-2883"><a href="#Pivot-2883"><span class="linenos">2883</span></a><span class="k">class</span> <span class="nc">Pivot</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Pivot-2884"><a href="#Pivot-2884"><span class="linenos">2884</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Pivot-2885"><a href="#Pivot-2885"><span class="linenos">2885</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Pivot-2886"><a href="#Pivot-2886"><span class="linenos">2886</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Pivot-2887"><a href="#Pivot-2887"><span class="linenos">2887</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Pivot-2888"><a href="#Pivot-2888"><span class="linenos">2888</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Pivot-2889"><a href="#Pivot-2889"><span class="linenos">2889</span></a> <span class="s2">&quot;unpivot&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Pivot-2890"><a href="#Pivot-2890"><span class="linenos">2890</span></a> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Pivot-2891"><a href="#Pivot-2891"><span class="linenos">2891</span></a> <span class="p">}</span>
</span></pre></div>
@@ -24596,14 +25101,16 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Window"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Window-2769"><a href="#Window-2769"><span class="linenos">2769</span></a><span class="k">class</span> <span class="nc">Window</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Window-2770"><a href="#Window-2770"><span class="linenos">2770</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Window-2771"><a href="#Window-2771"><span class="linenos">2771</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Window-2772"><a href="#Window-2772"><span class="linenos">2772</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Window-2773"><a href="#Window-2773"><span class="linenos">2773</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Window-2774"><a href="#Window-2774"><span class="linenos">2774</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Window-2775"><a href="#Window-2775"><span class="linenos">2775</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Window-2776"><a href="#Window-2776"><span class="linenos">2776</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Window-2894"><a href="#Window-2894"><span class="linenos">2894</span></a><span class="k">class</span> <span class="nc">Window</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Window-2895"><a href="#Window-2895"><span class="linenos">2895</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Window-2896"><a href="#Window-2896"><span class="linenos">2896</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Window-2897"><a href="#Window-2897"><span class="linenos">2897</span></a> <span class="s2">&quot;partition_by&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Window-2898"><a href="#Window-2898"><span class="linenos">2898</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Window-2899"><a href="#Window-2899"><span class="linenos">2899</span></a> <span class="s2">&quot;spec&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Window-2900"><a href="#Window-2900"><span class="linenos">2900</span></a> <span class="s2">&quot;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Window-2901"><a href="#Window-2901"><span class="linenos">2901</span></a> <span class="s2">&quot;over&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Window-2902"><a href="#Window-2902"><span class="linenos">2902</span></a> <span class="s2">&quot;first&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Window-2903"><a href="#Window-2903"><span class="linenos">2903</span></a> <span class="p">}</span>
</span></pre></div>
@@ -24666,14 +25173,14 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#WindowSpec"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec-2779"><a href="#WindowSpec-2779"><span class="linenos">2779</span></a><span class="k">class</span> <span class="nc">WindowSpec</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="WindowSpec-2780"><a href="#WindowSpec-2780"><span class="linenos">2780</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="WindowSpec-2781"><a href="#WindowSpec-2781"><span class="linenos">2781</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="WindowSpec-2782"><a href="#WindowSpec-2782"><span class="linenos">2782</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="WindowSpec-2783"><a href="#WindowSpec-2783"><span class="linenos">2783</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="WindowSpec-2784"><a href="#WindowSpec-2784"><span class="linenos">2784</span></a> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="WindowSpec-2785"><a href="#WindowSpec-2785"><span class="linenos">2785</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="WindowSpec-2786"><a href="#WindowSpec-2786"><span class="linenos">2786</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WindowSpec-2906"><a href="#WindowSpec-2906"><span class="linenos">2906</span></a><span class="k">class</span> <span class="nc">WindowSpec</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="WindowSpec-2907"><a href="#WindowSpec-2907"><span class="linenos">2907</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="WindowSpec-2908"><a href="#WindowSpec-2908"><span class="linenos">2908</span></a> <span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="WindowSpec-2909"><a href="#WindowSpec-2909"><span class="linenos">2909</span></a> <span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="WindowSpec-2910"><a href="#WindowSpec-2910"><span class="linenos">2910</span></a> <span class="s2">&quot;start_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="WindowSpec-2911"><a href="#WindowSpec-2911"><span class="linenos">2911</span></a> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="WindowSpec-2912"><a href="#WindowSpec-2912"><span class="linenos">2912</span></a> <span class="s2">&quot;end_side&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="WindowSpec-2913"><a href="#WindowSpec-2913"><span class="linenos">2913</span></a> <span class="p">}</span>
</span></pre></div>
@@ -24736,8 +25243,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Where"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Where-2789"><a href="#Where-2789"><span class="linenos">2789</span></a><span class="k">class</span> <span class="nc">Where</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Where-2790"><a href="#Where-2790"><span class="linenos">2790</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Where-2916"><a href="#Where-2916"><span class="linenos">2916</span></a><span class="k">class</span> <span class="nc">Where</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Where-2917"><a href="#Where-2917"><span class="linenos">2917</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -24800,16 +25307,16 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Star"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Star-2793"><a href="#Star-2793"><span class="linenos">2793</span></a><span class="k">class</span> <span class="nc">Star</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Star-2794"><a href="#Star-2794"><span class="linenos">2794</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Star-2795"><a href="#Star-2795"><span class="linenos">2795</span></a>
-</span><span id="Star-2796"><a href="#Star-2796"><span class="linenos">2796</span></a> <span class="nd">@property</span>
-</span><span id="Star-2797"><a href="#Star-2797"><span class="linenos">2797</span></a> <span class="k">def</span> <span class="nf">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="Star-2798"><a href="#Star-2798"><span class="linenos">2798</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
-</span><span id="Star-2799"><a href="#Star-2799"><span class="linenos">2799</span></a>
-</span><span id="Star-2800"><a href="#Star-2800"><span class="linenos">2800</span></a> <span class="nd">@property</span>
-</span><span id="Star-2801"><a href="#Star-2801"><span class="linenos">2801</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><span id="Star-2802"><a href="#Star-2802"><span class="linenos">2802</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Star-2920"><a href="#Star-2920"><span class="linenos">2920</span></a><span class="k">class</span> <span class="nc">Star</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Star-2921"><a href="#Star-2921"><span class="linenos">2921</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Star-2922"><a href="#Star-2922"><span class="linenos">2922</span></a>
+</span><span id="Star-2923"><a href="#Star-2923"><span class="linenos">2923</span></a> <span class="nd">@property</span>
+</span><span id="Star-2924"><a href="#Star-2924"><span class="linenos">2924</span></a> <span class="k">def</span> <span class="nf">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="Star-2925"><a href="#Star-2925"><span class="linenos">2925</span></a> <span class="k">return</span> <span class="s2">&quot;*&quot;</span>
+</span><span id="Star-2926"><a href="#Star-2926"><span class="linenos">2926</span></a>
+</span><span id="Star-2927"><a href="#Star-2927"><span class="linenos">2927</span></a> <span class="nd">@property</span>
+</span><span id="Star-2928"><a href="#Star-2928"><span class="linenos">2928</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><span id="Star-2929"><a href="#Star-2929"><span class="linenos">2929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
</span></pre></div>
@@ -24901,8 +25408,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Parameter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parameter-2805"><a href="#Parameter-2805"><span class="linenos">2805</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Parameter-2806"><a href="#Parameter-2806"><span class="linenos">2806</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;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parameter-2932"><a href="#Parameter-2932"><span class="linenos">2932</span></a><span class="k">class</span> <span class="nc">Parameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Parameter-2933"><a href="#Parameter-2933"><span class="linenos">2933</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;wrapped&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -24965,8 +25472,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#SessionParameter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SessionParameter-2809"><a href="#SessionParameter-2809"><span class="linenos">2809</span></a><span class="k">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="SessionParameter-2810"><a href="#SessionParameter-2810"><span class="linenos">2810</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SessionParameter-2936"><a href="#SessionParameter-2936"><span class="linenos">2936</span></a><span class="k">class</span> <span class="nc">SessionParameter</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="SessionParameter-2937"><a href="#SessionParameter-2937"><span class="linenos">2937</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -25029,8 +25536,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Placeholder"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Placeholder-2813"><a href="#Placeholder-2813"><span class="linenos">2813</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Placeholder-2814"><a href="#Placeholder-2814"><span class="linenos">2814</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Placeholder-2940"><a href="#Placeholder-2940"><span class="linenos">2940</span></a><span class="k">class</span> <span class="nc">Placeholder</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Placeholder-2941"><a href="#Placeholder-2941"><span class="linenos">2941</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></pre></div>
@@ -25093,12 +25600,12 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Null"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Null-2817"><a href="#Null-2817"><span class="linenos">2817</span></a><span class="k">class</span> <span class="nc">Null</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Null-2818"><a href="#Null-2818"><span class="linenos">2818</span></a> <span class="n">arg_types</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><span id="Null-2819"><a href="#Null-2819"><span class="linenos">2819</span></a>
-</span><span id="Null-2820"><a href="#Null-2820"><span class="linenos">2820</span></a> <span class="nd">@property</span>
-</span><span id="Null-2821"><a href="#Null-2821"><span class="linenos">2821</span></a> <span class="k">def</span> <span class="nf">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="Null-2822"><a href="#Null-2822"><span class="linenos">2822</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Null-2944"><a href="#Null-2944"><span class="linenos">2944</span></a><span class="k">class</span> <span class="nc">Null</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Null-2945"><a href="#Null-2945"><span class="linenos">2945</span></a> <span class="n">arg_types</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><span id="Null-2946"><a href="#Null-2946"><span class="linenos">2946</span></a>
+</span><span id="Null-2947"><a href="#Null-2947"><span class="linenos">2947</span></a> <span class="nd">@property</span>
+</span><span id="Null-2948"><a href="#Null-2948"><span class="linenos">2948</span></a> <span class="k">def</span> <span class="nf">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="Null-2949"><a href="#Null-2949"><span class="linenos">2949</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
</span></pre></div>
@@ -25151,6 +25658,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Null.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Null.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Null.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Null.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Null.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Null.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Null.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Null.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Null.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Null.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -25167,8 +25681,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Boolean"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Boolean-2825"><a href="#Boolean-2825"><span class="linenos">2825</span></a><span class="k">class</span> <span class="nc">Boolean</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Boolean-2826"><a href="#Boolean-2826"><span class="linenos">2826</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Boolean-2952"><a href="#Boolean-2952"><span class="linenos">2952</span></a><span class="k">class</span> <span class="nc">Boolean</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Boolean-2953"><a href="#Boolean-2953"><span class="linenos">2953</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -25221,6 +25735,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Boolean.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Boolean.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Boolean.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Boolean.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Boolean.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Boolean.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Boolean.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Boolean.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Boolean.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Boolean.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -25237,128 +25758,128 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#DataType"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType-2829"><a href="#DataType-2829"><span class="linenos">2829</span></a><span class="k">class</span> <span class="nc">DataType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="DataType-2830"><a href="#DataType-2830"><span class="linenos">2830</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-2831"><a href="#DataType-2831"><span class="linenos">2831</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="DataType-2832"><a href="#DataType-2832"><span class="linenos">2832</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="DataType-2833"><a href="#DataType-2833"><span class="linenos">2833</span></a> <span class="s2">&quot;nested&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="DataType-2834"><a href="#DataType-2834"><span class="linenos">2834</span></a> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="DataType-2835"><a href="#DataType-2835"><span class="linenos">2835</span></a> <span class="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="DataType-2836"><a href="#DataType-2836"><span class="linenos">2836</span></a> <span class="p">}</span>
-</span><span id="DataType-2837"><a href="#DataType-2837"><span class="linenos">2837</span></a>
-</span><span id="DataType-2838"><a href="#DataType-2838"><span class="linenos">2838</span></a> <span class="k">class</span> <span class="nc">Type</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
-</span><span id="DataType-2839"><a href="#DataType-2839"><span class="linenos">2839</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2840"><a href="#DataType-2840"><span class="linenos">2840</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2841"><a href="#DataType-2841"><span class="linenos">2841</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2842"><a href="#DataType-2842"><span class="linenos">2842</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2843"><a href="#DataType-2843"><span class="linenos">2843</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2844"><a href="#DataType-2844"><span class="linenos">2844</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2845"><a href="#DataType-2845"><span class="linenos">2845</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2846"><a href="#DataType-2846"><span class="linenos">2846</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2847"><a href="#DataType-2847"><span class="linenos">2847</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2848"><a href="#DataType-2848"><span class="linenos">2848</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2849"><a href="#DataType-2849"><span class="linenos">2849</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2850"><a href="#DataType-2850"><span class="linenos">2850</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2851"><a href="#DataType-2851"><span class="linenos">2851</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2852"><a href="#DataType-2852"><span class="linenos">2852</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2853"><a href="#DataType-2853"><span class="linenos">2853</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2854"><a href="#DataType-2854"><span class="linenos">2854</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2855"><a href="#DataType-2855"><span class="linenos">2855</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2856"><a href="#DataType-2856"><span class="linenos">2856</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2857"><a href="#DataType-2857"><span class="linenos">2857</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2858"><a href="#DataType-2858"><span class="linenos">2858</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2859"><a href="#DataType-2859"><span class="linenos">2859</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2860"><a href="#DataType-2860"><span class="linenos">2860</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2861"><a href="#DataType-2861"><span class="linenos">2861</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2862"><a href="#DataType-2862"><span class="linenos">2862</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2863"><a href="#DataType-2863"><span class="linenos">2863</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2864"><a href="#DataType-2864"><span class="linenos">2864</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2865"><a href="#DataType-2865"><span class="linenos">2865</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2866"><a href="#DataType-2866"><span class="linenos">2866</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2867"><a href="#DataType-2867"><span class="linenos">2867</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2868"><a href="#DataType-2868"><span class="linenos">2868</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2869"><a href="#DataType-2869"><span class="linenos">2869</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2870"><a href="#DataType-2870"><span class="linenos">2870</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2871"><a href="#DataType-2871"><span class="linenos">2871</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2872"><a href="#DataType-2872"><span class="linenos">2872</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2873"><a href="#DataType-2873"><span class="linenos">2873</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2874"><a href="#DataType-2874"><span class="linenos">2874</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2875"><a href="#DataType-2875"><span class="linenos">2875</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2876"><a href="#DataType-2876"><span class="linenos">2876</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2877"><a href="#DataType-2877"><span class="linenos">2877</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2878"><a href="#DataType-2878"><span class="linenos">2878</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2879"><a href="#DataType-2879"><span class="linenos">2879</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2880"><a href="#DataType-2880"><span class="linenos">2880</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2881"><a href="#DataType-2881"><span class="linenos">2881</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2882"><a href="#DataType-2882"><span class="linenos">2882</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2883"><a href="#DataType-2883"><span class="linenos">2883</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2884"><a href="#DataType-2884"><span class="linenos">2884</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2885"><a href="#DataType-2885"><span class="linenos">2885</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2886"><a href="#DataType-2886"><span class="linenos">2886</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2887"><a href="#DataType-2887"><span class="linenos">2887</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2888"><a href="#DataType-2888"><span class="linenos">2888</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2889"><a href="#DataType-2889"><span class="linenos">2889</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2890"><a href="#DataType-2890"><span class="linenos">2890</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2891"><a href="#DataType-2891"><span class="linenos">2891</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2892"><a href="#DataType-2892"><span class="linenos">2892</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2893"><a href="#DataType-2893"><span class="linenos">2893</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2894"><a href="#DataType-2894"><span class="linenos">2894</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2895"><a href="#DataType-2895"><span class="linenos">2895</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType-2896"><a href="#DataType-2896"><span class="linenos">2896</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Sentinel value, useful for type annotation</span>
-</span><span id="DataType-2897"><a href="#DataType-2897"><span class="linenos">2897</span></a>
-</span><span id="DataType-2898"><a href="#DataType-2898"><span class="linenos">2898</span></a> <span class="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-2899"><a href="#DataType-2899"><span class="linenos">2899</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
-</span><span id="DataType-2900"><a href="#DataType-2900"><span class="linenos">2900</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
-</span><span id="DataType-2901"><a href="#DataType-2901"><span class="linenos">2901</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
-</span><span id="DataType-2902"><a href="#DataType-2902"><span class="linenos">2902</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
-</span><span id="DataType-2903"><a href="#DataType-2903"><span class="linenos">2903</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
-</span><span id="DataType-2904"><a href="#DataType-2904"><span class="linenos">2904</span></a> <span class="p">}</span>
-</span><span id="DataType-2905"><a href="#DataType-2905"><span class="linenos">2905</span></a>
-</span><span id="DataType-2906"><a href="#DataType-2906"><span class="linenos">2906</span></a> <span class="n">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-2907"><a href="#DataType-2907"><span class="linenos">2907</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
-</span><span id="DataType-2908"><a href="#DataType-2908"><span class="linenos">2908</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
-</span><span id="DataType-2909"><a href="#DataType-2909"><span class="linenos">2909</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
-</span><span id="DataType-2910"><a href="#DataType-2910"><span class="linenos">2910</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
-</span><span id="DataType-2911"><a href="#DataType-2911"><span class="linenos">2911</span></a> <span class="p">}</span>
-</span><span id="DataType-2912"><a href="#DataType-2912"><span class="linenos">2912</span></a>
-</span><span id="DataType-2913"><a href="#DataType-2913"><span class="linenos">2913</span></a> <span class="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-2914"><a href="#DataType-2914"><span class="linenos">2914</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
-</span><span id="DataType-2915"><a href="#DataType-2915"><span class="linenos">2915</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
-</span><span id="DataType-2916"><a href="#DataType-2916"><span class="linenos">2916</span></a> <span class="p">}</span>
-</span><span id="DataType-2917"><a href="#DataType-2917"><span class="linenos">2917</span></a>
-</span><span id="DataType-2918"><a href="#DataType-2918"><span class="linenos">2918</span></a> <span class="n">NUMERIC_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">INTEGER_TYPES</span><span class="p">,</span> <span class="o">*</span><span class="n">FLOAT_TYPES</span><span class="p">}</span>
-</span><span id="DataType-2919"><a href="#DataType-2919"><span class="linenos">2919</span></a>
-</span><span id="DataType-2920"><a href="#DataType-2920"><span class="linenos">2920</span></a> <span class="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="DataType-2921"><a href="#DataType-2921"><span class="linenos">2921</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="DataType-2922"><a href="#DataType-2922"><span class="linenos">2922</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="DataType-2923"><a href="#DataType-2923"><span class="linenos">2923</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="DataType-2924"><a href="#DataType-2924"><span class="linenos">2924</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="DataType-2925"><a href="#DataType-2925"><span class="linenos">2925</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="DataType-2926"><a href="#DataType-2926"><span class="linenos">2926</span></a> <span class="p">}</span>
-</span><span id="DataType-2927"><a href="#DataType-2927"><span class="linenos">2927</span></a>
-</span><span id="DataType-2928"><a href="#DataType-2928"><span class="linenos">2928</span></a> <span class="nd">@classmethod</span>
-</span><span id="DataType-2929"><a href="#DataType-2929"><span class="linenos">2929</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
-</span><span id="DataType-2930"><a href="#DataType-2930"><span class="linenos">2930</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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">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">**</span><span class="n">kwargs</span>
-</span><span id="DataType-2931"><a href="#DataType-2931"><span class="linenos">2931</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
-</span><span id="DataType-2932"><a href="#DataType-2932"><span class="linenos">2932</span></a> <span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">parse_one</span>
-</span><span id="DataType-2933"><a href="#DataType-2933"><span class="linenos">2933</span></a>
-</span><span id="DataType-2934"><a href="#DataType-2934"><span class="linenos">2934</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="DataType-2935"><a href="#DataType-2935"><span class="linenos">2935</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">__members__</span><span class="p">:</span>
-</span><span id="DataType-2936"><a href="#DataType-2936"><span class="linenos">2936</span></a> <span class="n">data_type_exp</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
-</span><span id="DataType-2937"><a href="#DataType-2937"><span class="linenos">2937</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType-2938"><a href="#DataType-2938"><span class="linenos">2938</span></a> <span class="n">data_type_exp</span> <span class="o">=</span> <span class="n">parse_one</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">DataType</span><span class="p">)</span>
-</span><span id="DataType-2939"><a href="#DataType-2939"><span class="linenos">2939</span></a> <span class="k">if</span> <span class="n">data_type_exp</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataType-2940"><a href="#DataType-2940"><span class="linenos">2940</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;Unparsable data type value: </span><span class="si">{</span><span class="n">dtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="DataType-2941"><a href="#DataType-2941"><span class="linenos">2941</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
-</span><span id="DataType-2942"><a href="#DataType-2942"><span class="linenos">2942</span></a> <span class="n">data_type_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">dtype</span><span class="p">)</span>
-</span><span id="DataType-2943"><a href="#DataType-2943"><span class="linenos">2943</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
-</span><span id="DataType-2944"><a href="#DataType-2944"><span class="linenos">2944</span></a> <span class="k">return</span> <span class="n">dtype</span>
-</span><span id="DataType-2945"><a href="#DataType-2945"><span class="linenos">2945</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType-2946"><a href="#DataType-2946"><span class="linenos">2946</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 data type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="si">}</span><span class="s2">. Expected str or DataType.Type&quot;</span><span class="p">)</span>
-</span><span id="DataType-2947"><a href="#DataType-2947"><span class="linenos">2947</span></a> <span class="k">return</span> <span class="n">DataType</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">data_type_exp</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="DataType-2948"><a href="#DataType-2948"><span class="linenos">2948</span></a>
-</span><span id="DataType-2949"><a href="#DataType-2949"><span class="linenos">2949</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
-</span><span id="DataType-2950"><a href="#DataType-2950"><span class="linenos">2950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">dtype</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType-2956"><a href="#DataType-2956"><span class="linenos">2956</span></a><span class="k">class</span> <span class="nc">DataType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="DataType-2957"><a href="#DataType-2957"><span class="linenos">2957</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-2958"><a href="#DataType-2958"><span class="linenos">2958</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="DataType-2959"><a href="#DataType-2959"><span class="linenos">2959</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="DataType-2960"><a href="#DataType-2960"><span class="linenos">2960</span></a> <span class="s2">&quot;nested&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="DataType-2961"><a href="#DataType-2961"><span class="linenos">2961</span></a> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="DataType-2962"><a href="#DataType-2962"><span class="linenos">2962</span></a> <span class="s2">&quot;prefix&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="DataType-2963"><a href="#DataType-2963"><span class="linenos">2963</span></a> <span class="p">}</span>
+</span><span id="DataType-2964"><a href="#DataType-2964"><span class="linenos">2964</span></a>
+</span><span id="DataType-2965"><a href="#DataType-2965"><span class="linenos">2965</span></a> <span class="k">class</span> <span class="nc">Type</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
+</span><span id="DataType-2966"><a href="#DataType-2966"><span class="linenos">2966</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2967"><a href="#DataType-2967"><span class="linenos">2967</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2968"><a href="#DataType-2968"><span class="linenos">2968</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2969"><a href="#DataType-2969"><span class="linenos">2969</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2970"><a href="#DataType-2970"><span class="linenos">2970</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2971"><a href="#DataType-2971"><span class="linenos">2971</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2972"><a href="#DataType-2972"><span class="linenos">2972</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2973"><a href="#DataType-2973"><span class="linenos">2973</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2974"><a href="#DataType-2974"><span class="linenos">2974</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2975"><a href="#DataType-2975"><span class="linenos">2975</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2976"><a href="#DataType-2976"><span class="linenos">2976</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2977"><a href="#DataType-2977"><span class="linenos">2977</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2978"><a href="#DataType-2978"><span class="linenos">2978</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2979"><a href="#DataType-2979"><span class="linenos">2979</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2980"><a href="#DataType-2980"><span class="linenos">2980</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2981"><a href="#DataType-2981"><span class="linenos">2981</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2982"><a href="#DataType-2982"><span class="linenos">2982</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2983"><a href="#DataType-2983"><span class="linenos">2983</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2984"><a href="#DataType-2984"><span class="linenos">2984</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2985"><a href="#DataType-2985"><span class="linenos">2985</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2986"><a href="#DataType-2986"><span class="linenos">2986</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2987"><a href="#DataType-2987"><span class="linenos">2987</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2988"><a href="#DataType-2988"><span class="linenos">2988</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2989"><a href="#DataType-2989"><span class="linenos">2989</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2990"><a href="#DataType-2990"><span class="linenos">2990</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2991"><a href="#DataType-2991"><span class="linenos">2991</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2992"><a href="#DataType-2992"><span class="linenos">2992</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2993"><a href="#DataType-2993"><span class="linenos">2993</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2994"><a href="#DataType-2994"><span class="linenos">2994</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2995"><a href="#DataType-2995"><span class="linenos">2995</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2996"><a href="#DataType-2996"><span class="linenos">2996</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2997"><a href="#DataType-2997"><span class="linenos">2997</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2998"><a href="#DataType-2998"><span class="linenos">2998</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-2999"><a href="#DataType-2999"><span class="linenos">2999</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3000"><a href="#DataType-3000"><span class="linenos">3000</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3001"><a href="#DataType-3001"><span class="linenos">3001</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3002"><a href="#DataType-3002"><span class="linenos">3002</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3003"><a href="#DataType-3003"><span class="linenos">3003</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3004"><a href="#DataType-3004"><span class="linenos">3004</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3005"><a href="#DataType-3005"><span class="linenos">3005</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3006"><a href="#DataType-3006"><span class="linenos">3006</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3007"><a href="#DataType-3007"><span class="linenos">3007</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3008"><a href="#DataType-3008"><span class="linenos">3008</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3009"><a href="#DataType-3009"><span class="linenos">3009</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3010"><a href="#DataType-3010"><span class="linenos">3010</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3011"><a href="#DataType-3011"><span class="linenos">3011</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3012"><a href="#DataType-3012"><span class="linenos">3012</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3013"><a href="#DataType-3013"><span class="linenos">3013</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3014"><a href="#DataType-3014"><span class="linenos">3014</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3015"><a href="#DataType-3015"><span class="linenos">3015</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3016"><a href="#DataType-3016"><span class="linenos">3016</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3017"><a href="#DataType-3017"><span class="linenos">3017</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3018"><a href="#DataType-3018"><span class="linenos">3018</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3019"><a href="#DataType-3019"><span class="linenos">3019</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3020"><a href="#DataType-3020"><span class="linenos">3020</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3021"><a href="#DataType-3021"><span class="linenos">3021</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3022"><a href="#DataType-3022"><span class="linenos">3022</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType-3023"><a href="#DataType-3023"><span class="linenos">3023</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Sentinel value, useful for type annotation</span>
+</span><span id="DataType-3024"><a href="#DataType-3024"><span class="linenos">3024</span></a>
+</span><span id="DataType-3025"><a href="#DataType-3025"><span class="linenos">3025</span></a> <span class="n">TEXT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3026"><a href="#DataType-3026"><span class="linenos">3026</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
+</span><span id="DataType-3027"><a href="#DataType-3027"><span class="linenos">3027</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
+</span><span id="DataType-3028"><a href="#DataType-3028"><span class="linenos">3028</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
+</span><span id="DataType-3029"><a href="#DataType-3029"><span class="linenos">3029</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
+</span><span id="DataType-3030"><a href="#DataType-3030"><span class="linenos">3030</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
+</span><span id="DataType-3031"><a href="#DataType-3031"><span class="linenos">3031</span></a> <span class="p">}</span>
+</span><span id="DataType-3032"><a href="#DataType-3032"><span class="linenos">3032</span></a>
+</span><span id="DataType-3033"><a href="#DataType-3033"><span class="linenos">3033</span></a> <span class="n">INTEGER_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3034"><a href="#DataType-3034"><span class="linenos">3034</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
+</span><span id="DataType-3035"><a href="#DataType-3035"><span class="linenos">3035</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
+</span><span id="DataType-3036"><a href="#DataType-3036"><span class="linenos">3036</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
+</span><span id="DataType-3037"><a href="#DataType-3037"><span class="linenos">3037</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
+</span><span id="DataType-3038"><a href="#DataType-3038"><span class="linenos">3038</span></a> <span class="p">}</span>
+</span><span id="DataType-3039"><a href="#DataType-3039"><span class="linenos">3039</span></a>
+</span><span id="DataType-3040"><a href="#DataType-3040"><span class="linenos">3040</span></a> <span class="n">FLOAT_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3041"><a href="#DataType-3041"><span class="linenos">3041</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
+</span><span id="DataType-3042"><a href="#DataType-3042"><span class="linenos">3042</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
+</span><span id="DataType-3043"><a href="#DataType-3043"><span class="linenos">3043</span></a> <span class="p">}</span>
+</span><span id="DataType-3044"><a href="#DataType-3044"><span class="linenos">3044</span></a>
+</span><span id="DataType-3045"><a href="#DataType-3045"><span class="linenos">3045</span></a> <span class="n">NUMERIC_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">INTEGER_TYPES</span><span class="p">,</span> <span class="o">*</span><span class="n">FLOAT_TYPES</span><span class="p">}</span>
+</span><span id="DataType-3046"><a href="#DataType-3046"><span class="linenos">3046</span></a>
+</span><span id="DataType-3047"><a href="#DataType-3047"><span class="linenos">3047</span></a> <span class="n">TEMPORAL_TYPES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="DataType-3048"><a href="#DataType-3048"><span class="linenos">3048</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="DataType-3049"><a href="#DataType-3049"><span class="linenos">3049</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="DataType-3050"><a href="#DataType-3050"><span class="linenos">3050</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="DataType-3051"><a href="#DataType-3051"><span class="linenos">3051</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="DataType-3052"><a href="#DataType-3052"><span class="linenos">3052</span></a> <span class="n">Type</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="DataType-3053"><a href="#DataType-3053"><span class="linenos">3053</span></a> <span class="p">}</span>
+</span><span id="DataType-3054"><a href="#DataType-3054"><span class="linenos">3054</span></a>
+</span><span id="DataType-3055"><a href="#DataType-3055"><span class="linenos">3055</span></a> <span class="nd">@classmethod</span>
+</span><span id="DataType-3056"><a href="#DataType-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
+</span><span id="DataType-3057"><a href="#DataType-3057"><span class="linenos">3057</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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">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">**</span><span class="n">kwargs</span>
+</span><span id="DataType-3058"><a href="#DataType-3058"><span class="linenos">3058</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
+</span><span id="DataType-3059"><a href="#DataType-3059"><span class="linenos">3059</span></a> <span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">parse_one</span>
+</span><span id="DataType-3060"><a href="#DataType-3060"><span class="linenos">3060</span></a>
+</span><span id="DataType-3061"><a href="#DataType-3061"><span class="linenos">3061</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="DataType-3062"><a href="#DataType-3062"><span class="linenos">3062</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">__members__</span><span class="p">:</span>
+</span><span id="DataType-3063"><a href="#DataType-3063"><span class="linenos">3063</span></a> <span class="n">data_type_exp</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
+</span><span id="DataType-3064"><a href="#DataType-3064"><span class="linenos">3064</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType-3065"><a href="#DataType-3065"><span class="linenos">3065</span></a> <span class="n">data_type_exp</span> <span class="o">=</span> <span class="n">parse_one</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="DataType-3066"><a href="#DataType-3066"><span class="linenos">3066</span></a> <span class="k">if</span> <span class="n">data_type_exp</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataType-3067"><a href="#DataType-3067"><span class="linenos">3067</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;Unparsable data type value: </span><span class="si">{</span><span class="n">dtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="DataType-3068"><a href="#DataType-3068"><span class="linenos">3068</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
+</span><span id="DataType-3069"><a href="#DataType-3069"><span class="linenos">3069</span></a> <span class="n">data_type_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">dtype</span><span class="p">)</span>
+</span><span id="DataType-3070"><a href="#DataType-3070"><span class="linenos">3070</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
+</span><span id="DataType-3071"><a href="#DataType-3071"><span class="linenos">3071</span></a> <span class="k">return</span> <span class="n">dtype</span>
+</span><span id="DataType-3072"><a href="#DataType-3072"><span class="linenos">3072</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType-3073"><a href="#DataType-3073"><span class="linenos">3073</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 data type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="si">}</span><span class="s2">. Expected str or DataType.Type&quot;</span><span class="p">)</span>
+</span><span id="DataType-3074"><a href="#DataType-3074"><span class="linenos">3074</span></a> <span class="k">return</span> <span class="n">DataType</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">data_type_exp</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="DataType-3075"><a href="#DataType-3075"><span class="linenos">3075</span></a>
+</span><span id="DataType-3076"><a href="#DataType-3076"><span class="linenos">3076</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
+</span><span id="DataType-3077"><a href="#DataType-3077"><span class="linenos">3077</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">dtype</span>
</span></pre></div>
@@ -25376,26 +25897,26 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#DataType.build"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.build-2928"><a href="#DataType.build-2928"><span class="linenos">2928</span></a> <span class="nd">@classmethod</span>
-</span><span id="DataType.build-2929"><a href="#DataType.build-2929"><span class="linenos">2929</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
-</span><span id="DataType.build-2930"><a href="#DataType.build-2930"><span class="linenos">2930</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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">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">**</span><span class="n">kwargs</span>
-</span><span id="DataType.build-2931"><a href="#DataType.build-2931"><span class="linenos">2931</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
-</span><span id="DataType.build-2932"><a href="#DataType.build-2932"><span class="linenos">2932</span></a> <span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">parse_one</span>
-</span><span id="DataType.build-2933"><a href="#DataType.build-2933"><span class="linenos">2933</span></a>
-</span><span id="DataType.build-2934"><a href="#DataType.build-2934"><span class="linenos">2934</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="DataType.build-2935"><a href="#DataType.build-2935"><span class="linenos">2935</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">__members__</span><span class="p">:</span>
-</span><span id="DataType.build-2936"><a href="#DataType.build-2936"><span class="linenos">2936</span></a> <span class="n">data_type_exp</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
-</span><span id="DataType.build-2937"><a href="#DataType.build-2937"><span class="linenos">2937</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType.build-2938"><a href="#DataType.build-2938"><span class="linenos">2938</span></a> <span class="n">data_type_exp</span> <span class="o">=</span> <span class="n">parse_one</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">DataType</span><span class="p">)</span>
-</span><span id="DataType.build-2939"><a href="#DataType.build-2939"><span class="linenos">2939</span></a> <span class="k">if</span> <span class="n">data_type_exp</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="DataType.build-2940"><a href="#DataType.build-2940"><span class="linenos">2940</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;Unparsable data type value: </span><span class="si">{</span><span class="n">dtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="DataType.build-2941"><a href="#DataType.build-2941"><span class="linenos">2941</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
-</span><span id="DataType.build-2942"><a href="#DataType.build-2942"><span class="linenos">2942</span></a> <span class="n">data_type_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">dtype</span><span class="p">)</span>
-</span><span id="DataType.build-2943"><a href="#DataType.build-2943"><span class="linenos">2943</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
-</span><span id="DataType.build-2944"><a href="#DataType.build-2944"><span class="linenos">2944</span></a> <span class="k">return</span> <span class="n">dtype</span>
-</span><span id="DataType.build-2945"><a href="#DataType.build-2945"><span class="linenos">2945</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="DataType.build-2946"><a href="#DataType.build-2946"><span class="linenos">2946</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 data type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="si">}</span><span class="s2">. Expected str or DataType.Type&quot;</span><span class="p">)</span>
-</span><span id="DataType.build-2947"><a href="#DataType.build-2947"><span class="linenos">2947</span></a> <span class="k">return</span> <span class="n">DataType</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">data_type_exp</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.build-3055"><a href="#DataType.build-3055"><span class="linenos">3055</span></a> <span class="nd">@classmethod</span>
+</span><span id="DataType.build-3056"><a href="#DataType.build-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span>
+</span><span id="DataType.build-3057"><a href="#DataType.build-3057"><span class="linenos">3057</span></a> <span class="bp">cls</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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">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">**</span><span class="n">kwargs</span>
+</span><span id="DataType.build-3058"><a href="#DataType.build-3058"><span class="linenos">3058</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DataType</span><span class="p">:</span>
+</span><span id="DataType.build-3059"><a href="#DataType.build-3059"><span class="linenos">3059</span></a> <span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">parse_one</span>
+</span><span id="DataType.build-3060"><a href="#DataType.build-3060"><span class="linenos">3060</span></a>
+</span><span id="DataType.build-3061"><a href="#DataType.build-3061"><span class="linenos">3061</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="DataType.build-3062"><a href="#DataType.build-3062"><span class="linenos">3062</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">__members__</span><span class="p">:</span>
+</span><span id="DataType.build-3063"><a href="#DataType.build-3063"><span class="linenos">3063</span></a> <span class="n">data_type_exp</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Expression</span><span class="p">]</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">dtype</span><span class="o">.</span><span class="n">upper</span><span class="p">()])</span>
+</span><span id="DataType.build-3064"><a href="#DataType.build-3064"><span class="linenos">3064</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType.build-3065"><a href="#DataType.build-3065"><span class="linenos">3065</span></a> <span class="n">data_type_exp</span> <span class="o">=</span> <span class="n">parse_one</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">DataType</span><span class="p">)</span>
+</span><span id="DataType.build-3066"><a href="#DataType.build-3066"><span class="linenos">3066</span></a> <span class="k">if</span> <span class="n">data_type_exp</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="DataType.build-3067"><a href="#DataType.build-3067"><span class="linenos">3067</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;Unparsable data type value: </span><span class="si">{</span><span class="n">dtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="DataType.build-3068"><a href="#DataType.build-3068"><span class="linenos">3068</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
+</span><span id="DataType.build-3069"><a href="#DataType.build-3069"><span class="linenos">3069</span></a> <span class="n">data_type_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">dtype</span><span class="p">)</span>
+</span><span id="DataType.build-3070"><a href="#DataType.build-3070"><span class="linenos">3070</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dtype</span><span class="p">,</span> <span class="n">DataType</span><span class="p">):</span>
+</span><span id="DataType.build-3071"><a href="#DataType.build-3071"><span class="linenos">3071</span></a> <span class="k">return</span> <span class="n">dtype</span>
+</span><span id="DataType.build-3072"><a href="#DataType.build-3072"><span class="linenos">3072</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="DataType.build-3073"><a href="#DataType.build-3073"><span class="linenos">3073</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 data type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span><span class="si">}</span><span class="s2">. Expected str or DataType.Type&quot;</span><span class="p">)</span>
+</span><span id="DataType.build-3074"><a href="#DataType.build-3074"><span class="linenos">3074</span></a> <span class="k">return</span> <span class="n">DataType</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="o">**</span><span class="n">data_type_exp</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></pre></div>
@@ -25413,8 +25934,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#DataType.is_type"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.is_type-2949"><a href="#DataType.is_type-2949"><span class="linenos">2949</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
-</span><span id="DataType.is_type-2950"><a href="#DataType.is_type-2950"><span class="linenos">2950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">dtype</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.is_type-3076"><a href="#DataType.is_type-3076"><span class="linenos">3076</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
+</span><span id="DataType.is_type-3077"><a href="#DataType.is_type-3077"><span class="linenos">3077</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">dtype</span>
</span></pre></div>
@@ -25478,65 +25999,65 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#DataType.Type"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.Type-2838"><a href="#DataType.Type-2838"><span class="linenos">2838</span></a> <span class="k">class</span> <span class="nc">Type</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
-</span><span id="DataType.Type-2839"><a href="#DataType.Type-2839"><span class="linenos">2839</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2840"><a href="#DataType.Type-2840"><span class="linenos">2840</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2841"><a href="#DataType.Type-2841"><span class="linenos">2841</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2842"><a href="#DataType.Type-2842"><span class="linenos">2842</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2843"><a href="#DataType.Type-2843"><span class="linenos">2843</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2844"><a href="#DataType.Type-2844"><span class="linenos">2844</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2845"><a href="#DataType.Type-2845"><span class="linenos">2845</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2846"><a href="#DataType.Type-2846"><span class="linenos">2846</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2847"><a href="#DataType.Type-2847"><span class="linenos">2847</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2848"><a href="#DataType.Type-2848"><span class="linenos">2848</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2849"><a href="#DataType.Type-2849"><span class="linenos">2849</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2850"><a href="#DataType.Type-2850"><span class="linenos">2850</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2851"><a href="#DataType.Type-2851"><span class="linenos">2851</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2852"><a href="#DataType.Type-2852"><span class="linenos">2852</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2853"><a href="#DataType.Type-2853"><span class="linenos">2853</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2854"><a href="#DataType.Type-2854"><span class="linenos">2854</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2855"><a href="#DataType.Type-2855"><span class="linenos">2855</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2856"><a href="#DataType.Type-2856"><span class="linenos">2856</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2857"><a href="#DataType.Type-2857"><span class="linenos">2857</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2858"><a href="#DataType.Type-2858"><span class="linenos">2858</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2859"><a href="#DataType.Type-2859"><span class="linenos">2859</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2860"><a href="#DataType.Type-2860"><span class="linenos">2860</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2861"><a href="#DataType.Type-2861"><span class="linenos">2861</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2862"><a href="#DataType.Type-2862"><span class="linenos">2862</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2863"><a href="#DataType.Type-2863"><span class="linenos">2863</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2864"><a href="#DataType.Type-2864"><span class="linenos">2864</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2865"><a href="#DataType.Type-2865"><span class="linenos">2865</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2866"><a href="#DataType.Type-2866"><span class="linenos">2866</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2867"><a href="#DataType.Type-2867"><span class="linenos">2867</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2868"><a href="#DataType.Type-2868"><span class="linenos">2868</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2869"><a href="#DataType.Type-2869"><span class="linenos">2869</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2870"><a href="#DataType.Type-2870"><span class="linenos">2870</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2871"><a href="#DataType.Type-2871"><span class="linenos">2871</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2872"><a href="#DataType.Type-2872"><span class="linenos">2872</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2873"><a href="#DataType.Type-2873"><span class="linenos">2873</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2874"><a href="#DataType.Type-2874"><span class="linenos">2874</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2875"><a href="#DataType.Type-2875"><span class="linenos">2875</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2876"><a href="#DataType.Type-2876"><span class="linenos">2876</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2877"><a href="#DataType.Type-2877"><span class="linenos">2877</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2878"><a href="#DataType.Type-2878"><span class="linenos">2878</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2879"><a href="#DataType.Type-2879"><span class="linenos">2879</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2880"><a href="#DataType.Type-2880"><span class="linenos">2880</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2881"><a href="#DataType.Type-2881"><span class="linenos">2881</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2882"><a href="#DataType.Type-2882"><span class="linenos">2882</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2883"><a href="#DataType.Type-2883"><span class="linenos">2883</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2884"><a href="#DataType.Type-2884"><span class="linenos">2884</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2885"><a href="#DataType.Type-2885"><span class="linenos">2885</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2886"><a href="#DataType.Type-2886"><span class="linenos">2886</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2887"><a href="#DataType.Type-2887"><span class="linenos">2887</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2888"><a href="#DataType.Type-2888"><span class="linenos">2888</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2889"><a href="#DataType.Type-2889"><span class="linenos">2889</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2890"><a href="#DataType.Type-2890"><span class="linenos">2890</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2891"><a href="#DataType.Type-2891"><span class="linenos">2891</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2892"><a href="#DataType.Type-2892"><span class="linenos">2892</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2893"><a href="#DataType.Type-2893"><span class="linenos">2893</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2894"><a href="#DataType.Type-2894"><span class="linenos">2894</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2895"><a href="#DataType.Type-2895"><span class="linenos">2895</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="DataType.Type-2896"><a href="#DataType.Type-2896"><span class="linenos">2896</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Sentinel value, useful for type annotation</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DataType.Type-2965"><a href="#DataType.Type-2965"><span class="linenos">2965</span></a> <span class="k">class</span> <span class="nc">Type</span><span class="p">(</span><span class="n">AutoName</span><span class="p">):</span>
+</span><span id="DataType.Type-2966"><a href="#DataType.Type-2966"><span class="linenos">2966</span></a> <span class="n">CHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2967"><a href="#DataType.Type-2967"><span class="linenos">2967</span></a> <span class="n">NCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2968"><a href="#DataType.Type-2968"><span class="linenos">2968</span></a> <span class="n">VARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2969"><a href="#DataType.Type-2969"><span class="linenos">2969</span></a> <span class="n">NVARCHAR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2970"><a href="#DataType.Type-2970"><span class="linenos">2970</span></a> <span class="n">TEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2971"><a href="#DataType.Type-2971"><span class="linenos">2971</span></a> <span class="n">MEDIUMTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2972"><a href="#DataType.Type-2972"><span class="linenos">2972</span></a> <span class="n">LONGTEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2973"><a href="#DataType.Type-2973"><span class="linenos">2973</span></a> <span class="n">MEDIUMBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2974"><a href="#DataType.Type-2974"><span class="linenos">2974</span></a> <span class="n">LONGBLOB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2975"><a href="#DataType.Type-2975"><span class="linenos">2975</span></a> <span class="n">BINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2976"><a href="#DataType.Type-2976"><span class="linenos">2976</span></a> <span class="n">VARBINARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2977"><a href="#DataType.Type-2977"><span class="linenos">2977</span></a> <span class="n">INT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2978"><a href="#DataType.Type-2978"><span class="linenos">2978</span></a> <span class="n">UINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2979"><a href="#DataType.Type-2979"><span class="linenos">2979</span></a> <span class="n">TINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2980"><a href="#DataType.Type-2980"><span class="linenos">2980</span></a> <span class="n">UTINYINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2981"><a href="#DataType.Type-2981"><span class="linenos">2981</span></a> <span class="n">SMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2982"><a href="#DataType.Type-2982"><span class="linenos">2982</span></a> <span class="n">USMALLINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2983"><a href="#DataType.Type-2983"><span class="linenos">2983</span></a> <span class="n">BIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2984"><a href="#DataType.Type-2984"><span class="linenos">2984</span></a> <span class="n">UBIGINT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2985"><a href="#DataType.Type-2985"><span class="linenos">2985</span></a> <span class="n">FLOAT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2986"><a href="#DataType.Type-2986"><span class="linenos">2986</span></a> <span class="n">DOUBLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2987"><a href="#DataType.Type-2987"><span class="linenos">2987</span></a> <span class="n">DECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2988"><a href="#DataType.Type-2988"><span class="linenos">2988</span></a> <span class="n">BIGDECIMAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2989"><a href="#DataType.Type-2989"><span class="linenos">2989</span></a> <span class="n">BIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2990"><a href="#DataType.Type-2990"><span class="linenos">2990</span></a> <span class="n">BOOLEAN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2991"><a href="#DataType.Type-2991"><span class="linenos">2991</span></a> <span class="n">JSON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2992"><a href="#DataType.Type-2992"><span class="linenos">2992</span></a> <span class="n">JSONB</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2993"><a href="#DataType.Type-2993"><span class="linenos">2993</span></a> <span class="n">INTERVAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2994"><a href="#DataType.Type-2994"><span class="linenos">2994</span></a> <span class="n">TIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2995"><a href="#DataType.Type-2995"><span class="linenos">2995</span></a> <span class="n">TIMESTAMP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2996"><a href="#DataType.Type-2996"><span class="linenos">2996</span></a> <span class="n">TIMESTAMPTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2997"><a href="#DataType.Type-2997"><span class="linenos">2997</span></a> <span class="n">TIMESTAMPLTZ</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2998"><a href="#DataType.Type-2998"><span class="linenos">2998</span></a> <span class="n">DATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-2999"><a href="#DataType.Type-2999"><span class="linenos">2999</span></a> <span class="n">DATETIME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3000"><a href="#DataType.Type-3000"><span class="linenos">3000</span></a> <span class="n">ARRAY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3001"><a href="#DataType.Type-3001"><span class="linenos">3001</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3002"><a href="#DataType.Type-3002"><span class="linenos">3002</span></a> <span class="n">UUID</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3003"><a href="#DataType.Type-3003"><span class="linenos">3003</span></a> <span class="n">GEOGRAPHY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3004"><a href="#DataType.Type-3004"><span class="linenos">3004</span></a> <span class="n">GEOMETRY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3005"><a href="#DataType.Type-3005"><span class="linenos">3005</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3006"><a href="#DataType.Type-3006"><span class="linenos">3006</span></a> <span class="n">NULLABLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3007"><a href="#DataType.Type-3007"><span class="linenos">3007</span></a> <span class="n">HLLSKETCH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3008"><a href="#DataType.Type-3008"><span class="linenos">3008</span></a> <span class="n">HSTORE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3009"><a href="#DataType.Type-3009"><span class="linenos">3009</span></a> <span class="n">SUPER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3010"><a href="#DataType.Type-3010"><span class="linenos">3010</span></a> <span class="n">SERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3011"><a href="#DataType.Type-3011"><span class="linenos">3011</span></a> <span class="n">SMALLSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3012"><a href="#DataType.Type-3012"><span class="linenos">3012</span></a> <span class="n">BIGSERIAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3013"><a href="#DataType.Type-3013"><span class="linenos">3013</span></a> <span class="n">XML</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3014"><a href="#DataType.Type-3014"><span class="linenos">3014</span></a> <span class="n">UNIQUEIDENTIFIER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3015"><a href="#DataType.Type-3015"><span class="linenos">3015</span></a> <span class="n">MONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3016"><a href="#DataType.Type-3016"><span class="linenos">3016</span></a> <span class="n">SMALLMONEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3017"><a href="#DataType.Type-3017"><span class="linenos">3017</span></a> <span class="n">ROWVERSION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3018"><a href="#DataType.Type-3018"><span class="linenos">3018</span></a> <span class="n">IMAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3019"><a href="#DataType.Type-3019"><span class="linenos">3019</span></a> <span class="n">VARIANT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3020"><a href="#DataType.Type-3020"><span class="linenos">3020</span></a> <span class="n">OBJECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3021"><a href="#DataType.Type-3021"><span class="linenos">3021</span></a> <span class="n">INET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3022"><a href="#DataType.Type-3022"><span class="linenos">3022</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="DataType.Type-3023"><a href="#DataType.Type-3023"><span class="linenos">3023</span></a> <span class="n">UNKNOWN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span> <span class="c1"># Sentinel value, useful for type annotation</span>
</span></pre></div>
@@ -26262,8 +26783,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#PseudoType"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PseudoType-2954"><a href="#PseudoType-2954"><span class="linenos">2954</span></a><span class="k">class</span> <span class="nc">PseudoType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="PseudoType-2955"><a href="#PseudoType-2955"><span class="linenos">2955</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PseudoType-3081"><a href="#PseudoType-3081"><span class="linenos">3081</span></a><span class="k">class</span> <span class="nc">PseudoType</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="PseudoType-3082"><a href="#PseudoType-3082"><span class="linenos">3082</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -26326,8 +26847,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#StructKwarg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StructKwarg-2958"><a href="#StructKwarg-2958"><span class="linenos">2958</span></a><span class="k">class</span> <span class="nc">StructKwarg</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="StructKwarg-2959"><a href="#StructKwarg-2959"><span class="linenos">2959</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StructKwarg-3085"><a href="#StructKwarg-3085"><span class="linenos">3085</span></a><span class="k">class</span> <span class="nc">StructKwarg</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="StructKwarg-3086"><a href="#StructKwarg-3086"><span class="linenos">3086</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></pre></div>
@@ -26390,8 +26911,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#SubqueryPredicate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SubqueryPredicate-2963"><a href="#SubqueryPredicate-2963"><span class="linenos">2963</span></a><span class="k">class</span> <span class="nc">SubqueryPredicate</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
-</span><span id="SubqueryPredicate-2964"><a href="#SubqueryPredicate-2964"><span class="linenos">2964</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SubqueryPredicate-3090"><a href="#SubqueryPredicate-3090"><span class="linenos">3090</span></a><span class="k">class</span> <span class="nc">SubqueryPredicate</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
+</span><span id="SubqueryPredicate-3091"><a href="#SubqueryPredicate-3091"><span class="linenos">3091</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -26444,6 +26965,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="SubqueryPredicate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="SubqueryPredicate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="SubqueryPredicate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="SubqueryPredicate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="SubqueryPredicate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="SubqueryPredicate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="SubqueryPredicate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="SubqueryPredicate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="SubqueryPredicate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="SubqueryPredicate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -26460,8 +26988,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#All"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="All-2967"><a href="#All-2967"><span class="linenos">2967</span></a><span class="k">class</span> <span class="nc">All</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
-</span><span id="All-2968"><a href="#All-2968"><span class="linenos">2968</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="All-3094"><a href="#All-3094"><span class="linenos">3094</span></a><span class="k">class</span> <span class="nc">All</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
+</span><span id="All-3095"><a href="#All-3095"><span class="linenos">3095</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -26514,6 +27042,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="All.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="All.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="All.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="All.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="All.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="All.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="All.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="All.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="All.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="All.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -26530,8 +27065,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Any"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Any-2971"><a href="#Any-2971"><span class="linenos">2971</span></a><span class="k">class</span> <span class="nc">Any</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
-</span><span id="Any-2972"><a href="#Any-2972"><span class="linenos">2972</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Any-3098"><a href="#Any-3098"><span class="linenos">3098</span></a><span class="k">class</span> <span class="nc">Any</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
+</span><span id="Any-3099"><a href="#Any-3099"><span class="linenos">3099</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -26584,6 +27119,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Any.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Any.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Any.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Any.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Any.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Any.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Any.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Any.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Any.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Any.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -26600,8 +27142,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Exists"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Exists-2975"><a href="#Exists-2975"><span class="linenos">2975</span></a><span class="k">class</span> <span class="nc">Exists</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
-</span><span id="Exists-2976"><a href="#Exists-2976"><span class="linenos">2976</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Exists-3102"><a href="#Exists-3102"><span class="linenos">3102</span></a><span class="k">class</span> <span class="nc">Exists</span><span class="p">(</span><span class="n">SubqueryPredicate</span><span class="p">):</span>
+</span><span id="Exists-3103"><a href="#Exists-3103"><span class="linenos">3103</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -26654,6 +27196,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Exists.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Exists.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Exists.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Exists.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Exists.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Exists.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Exists.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Exists.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Exists.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Exists.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -26670,8 +27219,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Command"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Command-2981"><a href="#Command-2981"><span class="linenos">2981</span></a><span class="k">class</span> <span class="nc">Command</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Command-2982"><a href="#Command-2982"><span class="linenos">2982</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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Command-3108"><a href="#Command-3108"><span class="linenos">3108</span></a><span class="k">class</span> <span class="nc">Command</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Command-3109"><a href="#Command-3109"><span class="linenos">3109</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -26734,8 +27283,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Transaction"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Transaction-2985"><a href="#Transaction-2985"><span class="linenos">2985</span></a><span class="k">class</span> <span class="nc">Transaction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Transaction-2986"><a href="#Transaction-2986"><span class="linenos">2986</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;modes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Transaction-3112"><a href="#Transaction-3112"><span class="linenos">3112</span></a><span class="k">class</span> <span class="nc">Transaction</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Transaction-3113"><a href="#Transaction-3113"><span class="linenos">3113</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;modes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -26798,8 +27347,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Commit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Commit-2989"><a href="#Commit-2989"><span class="linenos">2989</span></a><span class="k">class</span> <span class="nc">Commit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Commit-2990"><a href="#Commit-2990"><span class="linenos">2990</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;chain&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Commit-3116"><a href="#Commit-3116"><span class="linenos">3116</span></a><span class="k">class</span> <span class="nc">Commit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Commit-3117"><a href="#Commit-3117"><span class="linenos">3117</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;chain&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -26862,8 +27411,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Rollback"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Rollback-2993"><a href="#Rollback-2993"><span class="linenos">2993</span></a><span class="k">class</span> <span class="nc">Rollback</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Rollback-2994"><a href="#Rollback-2994"><span class="linenos">2994</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;savepoint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Rollback-3120"><a href="#Rollback-3120"><span class="linenos">3120</span></a><span class="k">class</span> <span class="nc">Rollback</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Rollback-3121"><a href="#Rollback-3121"><span class="linenos">3121</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;savepoint&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -26926,8 +27475,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#AlterTable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AlterTable-2997"><a href="#AlterTable-2997"><span class="linenos">2997</span></a><span class="k">class</span> <span class="nc">AlterTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="AlterTable-2998"><a href="#AlterTable-2998"><span class="linenos">2998</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;actions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AlterTable-3124"><a href="#AlterTable-3124"><span class="linenos">3124</span></a><span class="k">class</span> <span class="nc">AlterTable</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="AlterTable-3125"><a href="#AlterTable-3125"><span class="linenos">3125</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;actions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -26990,8 +27539,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#AddConstraint"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AddConstraint-3001"><a href="#AddConstraint-3001"><span class="linenos">3001</span></a><span class="k">class</span> <span class="nc">AddConstraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="AddConstraint-3002"><a href="#AddConstraint-3002"><span class="linenos">3002</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">False</span><span class="p">,</span> <span class="s2">&quot;enforced&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AddConstraint-3128"><a href="#AddConstraint-3128"><span class="linenos">3128</span></a><span class="k">class</span> <span class="nc">AddConstraint</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="AddConstraint-3129"><a href="#AddConstraint-3129"><span class="linenos">3129</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">False</span><span class="p">,</span> <span class="s2">&quot;enforced&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -27054,8 +27603,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#DropPartition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DropPartition-3005"><a href="#DropPartition-3005"><span class="linenos">3005</span></a><span class="k">class</span> <span class="nc">DropPartition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="DropPartition-3006"><a href="#DropPartition-3006"><span class="linenos">3006</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DropPartition-3132"><a href="#DropPartition-3132"><span class="linenos">3132</span></a><span class="k">class</span> <span class="nc">DropPartition</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="DropPartition-3133"><a href="#DropPartition-3133"><span class="linenos">3133</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;exists&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -27112,22 +27661,22 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<div class="attr class">
<span class="def">class</span>
- <span class="name">Binary</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+ <span class="name">Binary</span><wbr>(<span class="base"><a href="#Condition">Condition</a></span>):
<label class="view-source-button" for="Binary-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Binary"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Binary-3010"><a href="#Binary-3010"><span class="linenos">3010</span></a><span class="k">class</span> <span class="nc">Binary</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Binary-3011"><a href="#Binary-3011"><span class="linenos">3011</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><span id="Binary-3012"><a href="#Binary-3012"><span class="linenos">3012</span></a>
-</span><span id="Binary-3013"><a href="#Binary-3013"><span class="linenos">3013</span></a> <span class="nd">@property</span>
-</span><span id="Binary-3014"><a href="#Binary-3014"><span class="linenos">3014</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Binary-3015"><a href="#Binary-3015"><span class="linenos">3015</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Binary-3016"><a href="#Binary-3016"><span class="linenos">3016</span></a>
-</span><span id="Binary-3017"><a href="#Binary-3017"><span class="linenos">3017</span></a> <span class="nd">@property</span>
-</span><span id="Binary-3018"><a href="#Binary-3018"><span class="linenos">3018</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Binary-3019"><a href="#Binary-3019"><span class="linenos">3019</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Binary-3137"><a href="#Binary-3137"><span class="linenos">3137</span></a><span class="k">class</span> <span class="nc">Binary</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Binary-3138"><a href="#Binary-3138"><span class="linenos">3138</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><span id="Binary-3139"><a href="#Binary-3139"><span class="linenos">3139</span></a>
+</span><span id="Binary-3140"><a href="#Binary-3140"><span class="linenos">3140</span></a> <span class="nd">@property</span>
+</span><span id="Binary-3141"><a href="#Binary-3141"><span class="linenos">3141</span></a> <span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Binary-3142"><a href="#Binary-3142"><span class="linenos">3142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Binary-3143"><a href="#Binary-3143"><span class="linenos">3143</span></a>
+</span><span id="Binary-3144"><a href="#Binary-3144"><span class="linenos">3144</span></a> <span class="nd">@property</span>
+</span><span id="Binary-3145"><a href="#Binary-3145"><span class="linenos">3145</span></a> <span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Binary-3146"><a href="#Binary-3146"><span class="linenos">3146</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span>
</span></pre></div>
@@ -27176,6 +27725,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Binary.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Binary.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Binary.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Binary.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Binary.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Binary.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Binary.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Binary.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Binary.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Binary.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Binary.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27190,8 +27752,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Add"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Add-3022"><a href="#Add-3022"><span class="linenos">3022</span></a><span class="k">class</span> <span class="nc">Add</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Add-3023"><a href="#Add-3023"><span class="linenos">3023</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Add-3149"><a href="#Add-3149"><span class="linenos">3149</span></a><span class="k">class</span> <span class="nc">Add</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Add-3150"><a href="#Add-3150"><span class="linenos">3150</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27240,6 +27802,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Add.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Add.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Add.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Add.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Add.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Add.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Add.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Add.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Add.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Add.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Add.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27248,14 +27823,14 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<div class="attr class">
<span class="def">class</span>
- <span class="name">Connector</span><wbr>(<span class="base"><a href="#Binary">Binary</a></span>, <span class="base"><a href="#Condition">Condition</a></span>):
+ <span class="name">Connector</span><wbr>(<span class="base"><a href="#Binary">Binary</a></span>):
<label class="view-source-button" for="Connector-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Connector"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Connector-3026"><a href="#Connector-3026"><span class="linenos">3026</span></a><span class="k">class</span> <span class="nc">Connector</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="Connector-3027"><a href="#Connector-3027"><span class="linenos">3027</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Connector-3153"><a href="#Connector-3153"><span class="linenos">3153</span></a><span class="k">class</span> <span class="nc">Connector</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Connector-3154"><a href="#Connector-3154"><span class="linenos">3154</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27308,6 +27883,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Connector.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Connector.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Connector.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Connector.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Connector.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Connector.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Connector.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Connector.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Connector.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Connector.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -27324,8 +27906,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#And"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="And-3030"><a href="#And-3030"><span class="linenos">3030</span></a><span class="k">class</span> <span class="nc">And</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
-</span><span id="And-3031"><a href="#And-3031"><span class="linenos">3031</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="And-3157"><a href="#And-3157"><span class="linenos">3157</span></a><span class="k">class</span> <span class="nc">And</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
+</span><span id="And-3158"><a href="#And-3158"><span class="linenos">3158</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27378,6 +27960,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="And.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="And.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="And.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="And.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="And.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="And.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="And.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="And.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="And.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="And.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -27394,8 +27983,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Or"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Or-3034"><a href="#Or-3034"><span class="linenos">3034</span></a><span class="k">class</span> <span class="nc">Or</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
-</span><span id="Or-3035"><a href="#Or-3035"><span class="linenos">3035</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Or-3161"><a href="#Or-3161"><span class="linenos">3161</span></a><span class="k">class</span> <span class="nc">Or</span><span class="p">(</span><span class="n">Connector</span><span class="p">):</span>
+</span><span id="Or-3162"><a href="#Or-3162"><span class="linenos">3162</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27448,6 +28037,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Or.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Or.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Or.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Or.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Or.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Or.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Or.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Or.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Or.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Or.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -27464,8 +28060,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#BitwiseAnd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseAnd-3038"><a href="#BitwiseAnd-3038"><span class="linenos">3038</span></a><span class="k">class</span> <span class="nc">BitwiseAnd</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="BitwiseAnd-3039"><a href="#BitwiseAnd-3039"><span class="linenos">3039</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseAnd-3165"><a href="#BitwiseAnd-3165"><span class="linenos">3165</span></a><span class="k">class</span> <span class="nc">BitwiseAnd</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="BitwiseAnd-3166"><a href="#BitwiseAnd-3166"><span class="linenos">3166</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27514,6 +28110,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="BitwiseAnd.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="BitwiseAnd.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="BitwiseAnd.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="BitwiseAnd.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="BitwiseAnd.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="BitwiseAnd.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="BitwiseAnd.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="BitwiseAnd.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="BitwiseAnd.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="BitwiseAnd.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="BitwiseAnd.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27528,8 +28137,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#BitwiseLeftShift"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseLeftShift-3042"><a href="#BitwiseLeftShift-3042"><span class="linenos">3042</span></a><span class="k">class</span> <span class="nc">BitwiseLeftShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="BitwiseLeftShift-3043"><a href="#BitwiseLeftShift-3043"><span class="linenos">3043</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseLeftShift-3169"><a href="#BitwiseLeftShift-3169"><span class="linenos">3169</span></a><span class="k">class</span> <span class="nc">BitwiseLeftShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="BitwiseLeftShift-3170"><a href="#BitwiseLeftShift-3170"><span class="linenos">3170</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27578,6 +28187,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="BitwiseLeftShift.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="BitwiseLeftShift.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="BitwiseLeftShift.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="BitwiseLeftShift.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="BitwiseLeftShift.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="BitwiseLeftShift.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="BitwiseLeftShift.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="BitwiseLeftShift.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="BitwiseLeftShift.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="BitwiseLeftShift.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="BitwiseLeftShift.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27592,8 +28214,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#BitwiseOr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseOr-3046"><a href="#BitwiseOr-3046"><span class="linenos">3046</span></a><span class="k">class</span> <span class="nc">BitwiseOr</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="BitwiseOr-3047"><a href="#BitwiseOr-3047"><span class="linenos">3047</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseOr-3173"><a href="#BitwiseOr-3173"><span class="linenos">3173</span></a><span class="k">class</span> <span class="nc">BitwiseOr</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="BitwiseOr-3174"><a href="#BitwiseOr-3174"><span class="linenos">3174</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27642,6 +28264,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="BitwiseOr.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="BitwiseOr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="BitwiseOr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="BitwiseOr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="BitwiseOr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="BitwiseOr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="BitwiseOr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="BitwiseOr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="BitwiseOr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="BitwiseOr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="BitwiseOr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27656,8 +28291,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#BitwiseRightShift"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseRightShift-3050"><a href="#BitwiseRightShift-3050"><span class="linenos">3050</span></a><span class="k">class</span> <span class="nc">BitwiseRightShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="BitwiseRightShift-3051"><a href="#BitwiseRightShift-3051"><span class="linenos">3051</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseRightShift-3177"><a href="#BitwiseRightShift-3177"><span class="linenos">3177</span></a><span class="k">class</span> <span class="nc">BitwiseRightShift</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="BitwiseRightShift-3178"><a href="#BitwiseRightShift-3178"><span class="linenos">3178</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27706,6 +28341,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="BitwiseRightShift.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="BitwiseRightShift.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="BitwiseRightShift.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="BitwiseRightShift.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="BitwiseRightShift.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="BitwiseRightShift.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="BitwiseRightShift.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="BitwiseRightShift.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="BitwiseRightShift.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="BitwiseRightShift.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="BitwiseRightShift.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27720,8 +28368,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#BitwiseXor"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseXor-3054"><a href="#BitwiseXor-3054"><span class="linenos">3054</span></a><span class="k">class</span> <span class="nc">BitwiseXor</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="BitwiseXor-3055"><a href="#BitwiseXor-3055"><span class="linenos">3055</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseXor-3181"><a href="#BitwiseXor-3181"><span class="linenos">3181</span></a><span class="k">class</span> <span class="nc">BitwiseXor</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="BitwiseXor-3182"><a href="#BitwiseXor-3182"><span class="linenos">3182</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27770,6 +28418,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="BitwiseXor.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="BitwiseXor.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="BitwiseXor.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="BitwiseXor.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="BitwiseXor.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="BitwiseXor.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="BitwiseXor.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="BitwiseXor.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="BitwiseXor.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="BitwiseXor.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="BitwiseXor.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27784,8 +28445,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Div"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Div-3058"><a href="#Div-3058"><span class="linenos">3058</span></a><span class="k">class</span> <span class="nc">Div</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Div-3059"><a href="#Div-3059"><span class="linenos">3059</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Div-3185"><a href="#Div-3185"><span class="linenos">3185</span></a><span class="k">class</span> <span class="nc">Div</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Div-3186"><a href="#Div-3186"><span class="linenos">3186</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27834,6 +28495,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Div.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Div.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Div.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Div.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Div.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Div.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Div.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Div.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Div.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Div.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Div.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27848,8 +28522,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Overlaps"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Overlaps-3062"><a href="#Overlaps-3062"><span class="linenos">3062</span></a><span class="k">class</span> <span class="nc">Overlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Overlaps-3063"><a href="#Overlaps-3063"><span class="linenos">3063</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Overlaps-3189"><a href="#Overlaps-3189"><span class="linenos">3189</span></a><span class="k">class</span> <span class="nc">Overlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Overlaps-3190"><a href="#Overlaps-3190"><span class="linenos">3190</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -27898,6 +28572,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Overlaps.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Overlaps.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Overlaps.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Overlaps.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Overlaps.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Overlaps.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Overlaps.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Overlaps.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Overlaps.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Overlaps.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Overlaps.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -27912,24 +28599,24 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Dot"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dot-3066"><a href="#Dot-3066"><span class="linenos">3066</span></a><span class="k">class</span> <span class="nc">Dot</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Dot-3067"><a href="#Dot-3067"><span class="linenos">3067</span></a> <span class="nd">@property</span>
-</span><span id="Dot-3068"><a href="#Dot-3068"><span class="linenos">3068</span></a> <span class="k">def</span> <span class="nf">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="Dot-3069"><a href="#Dot-3069"><span class="linenos">3069</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">name</span>
-</span><span id="Dot-3070"><a href="#Dot-3070"><span class="linenos">3070</span></a>
-</span><span id="Dot-3071"><a href="#Dot-3071"><span class="linenos">3071</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dot-3072"><a href="#Dot-3072"><span class="linenos">3072</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</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">Sequence</span><span class="p">[</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
-</span><span id="Dot-3073"><a href="#Dot-3073"><span class="linenos">3073</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Dot object with a sequence of expressions.&quot;&quot;&quot;</span>
-</span><span id="Dot-3074"><a href="#Dot-3074"><span class="linenos">3074</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">&lt;</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Dot-3075"><a href="#Dot-3075"><span class="linenos">3075</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;Dot requires &gt;= 2 expressions.&quot;</span><span class="p">)</span>
-</span><span id="Dot-3076"><a href="#Dot-3076"><span class="linenos">3076</span></a>
-</span><span id="Dot-3077"><a href="#Dot-3077"><span class="linenos">3077</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">expressions</span>
-</span><span id="Dot-3078"><a href="#Dot-3078"><span class="linenos">3078</span></a> <span class="n">dot</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">)</span>
-</span><span id="Dot-3079"><a href="#Dot-3079"><span class="linenos">3079</span></a>
-</span><span id="Dot-3080"><a href="#Dot-3080"><span class="linenos">3080</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Dot-3081"><a href="#Dot-3081"><span class="linenos">3081</span></a> <span class="n">dot</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">dot</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="Dot-3082"><a href="#Dot-3082"><span class="linenos">3082</span></a>
-</span><span id="Dot-3083"><a href="#Dot-3083"><span class="linenos">3083</span></a> <span class="k">return</span> <span class="n">dot</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dot-3193"><a href="#Dot-3193"><span class="linenos">3193</span></a><span class="k">class</span> <span class="nc">Dot</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Dot-3194"><a href="#Dot-3194"><span class="linenos">3194</span></a> <span class="nd">@property</span>
+</span><span id="Dot-3195"><a href="#Dot-3195"><span class="linenos">3195</span></a> <span class="k">def</span> <span class="nf">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="Dot-3196"><a href="#Dot-3196"><span class="linenos">3196</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">name</span>
+</span><span id="Dot-3197"><a href="#Dot-3197"><span class="linenos">3197</span></a>
+</span><span id="Dot-3198"><a href="#Dot-3198"><span class="linenos">3198</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dot-3199"><a href="#Dot-3199"><span class="linenos">3199</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</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">Sequence</span><span class="p">[</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
+</span><span id="Dot-3200"><a href="#Dot-3200"><span class="linenos">3200</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Dot object with a sequence of expressions.&quot;&quot;&quot;</span>
+</span><span id="Dot-3201"><a href="#Dot-3201"><span class="linenos">3201</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">&lt;</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Dot-3202"><a href="#Dot-3202"><span class="linenos">3202</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;Dot requires &gt;= 2 expressions.&quot;</span><span class="p">)</span>
+</span><span id="Dot-3203"><a href="#Dot-3203"><span class="linenos">3203</span></a>
+</span><span id="Dot-3204"><a href="#Dot-3204"><span class="linenos">3204</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">expressions</span>
+</span><span id="Dot-3205"><a href="#Dot-3205"><span class="linenos">3205</span></a> <span class="n">dot</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">)</span>
+</span><span id="Dot-3206"><a href="#Dot-3206"><span class="linenos">3206</span></a>
+</span><span id="Dot-3207"><a href="#Dot-3207"><span class="linenos">3207</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Dot-3208"><a href="#Dot-3208"><span class="linenos">3208</span></a> <span class="n">dot</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">dot</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="Dot-3209"><a href="#Dot-3209"><span class="linenos">3209</span></a>
+</span><span id="Dot-3210"><a href="#Dot-3210"><span class="linenos">3210</span></a> <span class="k">return</span> <span class="n">dot</span>
</span></pre></div>
@@ -27947,19 +28634,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Dot.build"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Dot.build-3071"><a href="#Dot.build-3071"><span class="linenos">3071</span></a> <span class="nd">@classmethod</span>
-</span><span id="Dot.build-3072"><a href="#Dot.build-3072"><span class="linenos">3072</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</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">Sequence</span><span class="p">[</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
-</span><span id="Dot.build-3073"><a href="#Dot.build-3073"><span class="linenos">3073</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Dot object with a sequence of expressions.&quot;&quot;&quot;</span>
-</span><span id="Dot.build-3074"><a href="#Dot.build-3074"><span class="linenos">3074</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">&lt;</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Dot.build-3075"><a href="#Dot.build-3075"><span class="linenos">3075</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;Dot requires &gt;= 2 expressions.&quot;</span><span class="p">)</span>
-</span><span id="Dot.build-3076"><a href="#Dot.build-3076"><span class="linenos">3076</span></a>
-</span><span id="Dot.build-3077"><a href="#Dot.build-3077"><span class="linenos">3077</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">expressions</span>
-</span><span id="Dot.build-3078"><a href="#Dot.build-3078"><span class="linenos">3078</span></a> <span class="n">dot</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">)</span>
-</span><span id="Dot.build-3079"><a href="#Dot.build-3079"><span class="linenos">3079</span></a>
-</span><span id="Dot.build-3080"><a href="#Dot.build-3080"><span class="linenos">3080</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Dot.build-3081"><a href="#Dot.build-3081"><span class="linenos">3081</span></a> <span class="n">dot</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">dot</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="Dot.build-3082"><a href="#Dot.build-3082"><span class="linenos">3082</span></a>
-</span><span id="Dot.build-3083"><a href="#Dot.build-3083"><span class="linenos">3083</span></a> <span class="k">return</span> <span class="n">dot</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Dot.build-3198"><a href="#Dot.build-3198"><span class="linenos">3198</span></a> <span class="nd">@classmethod</span>
+</span><span id="Dot.build-3199"><a href="#Dot.build-3199"><span class="linenos">3199</span></a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</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">Sequence</span><span class="p">[</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Dot</span><span class="p">:</span>
+</span><span id="Dot.build-3200"><a href="#Dot.build-3200"><span class="linenos">3200</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Dot object with a sequence of expressions.&quot;&quot;&quot;</span>
+</span><span id="Dot.build-3201"><a href="#Dot.build-3201"><span class="linenos">3201</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">&lt;</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Dot.build-3202"><a href="#Dot.build-3202"><span class="linenos">3202</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;Dot requires &gt;= 2 expressions.&quot;</span><span class="p">)</span>
+</span><span id="Dot.build-3203"><a href="#Dot.build-3203"><span class="linenos">3203</span></a>
+</span><span id="Dot.build-3204"><a href="#Dot.build-3204"><span class="linenos">3204</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">expressions</span>
+</span><span id="Dot.build-3205"><a href="#Dot.build-3205"><span class="linenos">3205</span></a> <span class="n">dot</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">)</span>
+</span><span id="Dot.build-3206"><a href="#Dot.build-3206"><span class="linenos">3206</span></a>
+</span><span id="Dot.build-3207"><a href="#Dot.build-3207"><span class="linenos">3207</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Dot.build-3208"><a href="#Dot.build-3208"><span class="linenos">3208</span></a> <span class="n">dot</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">dot</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="Dot.build-3209"><a href="#Dot.build-3209"><span class="linenos">3209</span></a>
+</span><span id="Dot.build-3210"><a href="#Dot.build-3210"><span class="linenos">3210</span></a> <span class="k">return</span> <span class="n">dot</span>
</span></pre></div>
@@ -28011,6 +28698,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Dot.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Dot.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Dot.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Dot.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Dot.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Dot.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Dot.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Dot.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Dot.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Dot.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Dot.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -28025,8 +28725,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#DPipe"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DPipe-3086"><a href="#DPipe-3086"><span class="linenos">3086</span></a><span class="k">class</span> <span class="nc">DPipe</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="DPipe-3087"><a href="#DPipe-3087"><span class="linenos">3087</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DPipe-3213"><a href="#DPipe-3213"><span class="linenos">3213</span></a><span class="k">class</span> <span class="nc">DPipe</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="DPipe-3214"><a href="#DPipe-3214"><span class="linenos">3214</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28075,6 +28775,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="DPipe.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="DPipe.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="DPipe.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="DPipe.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DPipe.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DPipe.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DPipe.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DPipe.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DPipe.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DPipe.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DPipe.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -28089,8 +28802,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#EQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="EQ-3090"><a href="#EQ-3090"><span class="linenos">3090</span></a><span class="k">class</span> <span class="nc">EQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="EQ-3091"><a href="#EQ-3091"><span class="linenos">3091</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="EQ-3217"><a href="#EQ-3217"><span class="linenos">3217</span></a><span class="k">class</span> <span class="nc">EQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="EQ-3218"><a href="#EQ-3218"><span class="linenos">3218</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28143,6 +28856,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="EQ.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="EQ.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="EQ.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="EQ.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="EQ.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="EQ.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="EQ.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="EQ.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="EQ.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="EQ.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28159,8 +28879,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#NullSafeEQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeEQ-3094"><a href="#NullSafeEQ-3094"><span class="linenos">3094</span></a><span class="k">class</span> <span class="nc">NullSafeEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="NullSafeEQ-3095"><a href="#NullSafeEQ-3095"><span class="linenos">3095</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeEQ-3221"><a href="#NullSafeEQ-3221"><span class="linenos">3221</span></a><span class="k">class</span> <span class="nc">NullSafeEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="NullSafeEQ-3222"><a href="#NullSafeEQ-3222"><span class="linenos">3222</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28213,6 +28933,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="NullSafeEQ.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="NullSafeEQ.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="NullSafeEQ.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="NullSafeEQ.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="NullSafeEQ.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="NullSafeEQ.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="NullSafeEQ.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="NullSafeEQ.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="NullSafeEQ.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="NullSafeEQ.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28229,8 +28956,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#NullSafeNEQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeNEQ-3098"><a href="#NullSafeNEQ-3098"><span class="linenos">3098</span></a><span class="k">class</span> <span class="nc">NullSafeNEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="NullSafeNEQ-3099"><a href="#NullSafeNEQ-3099"><span class="linenos">3099</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NullSafeNEQ-3225"><a href="#NullSafeNEQ-3225"><span class="linenos">3225</span></a><span class="k">class</span> <span class="nc">NullSafeNEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="NullSafeNEQ-3226"><a href="#NullSafeNEQ-3226"><span class="linenos">3226</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28283,6 +29010,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="NullSafeNEQ.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="NullSafeNEQ.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="NullSafeNEQ.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="NullSafeNEQ.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="NullSafeNEQ.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="NullSafeNEQ.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="NullSafeNEQ.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="NullSafeNEQ.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="NullSafeNEQ.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="NullSafeNEQ.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28299,8 +29033,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Distance"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Distance-3102"><a href="#Distance-3102"><span class="linenos">3102</span></a><span class="k">class</span> <span class="nc">Distance</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Distance-3103"><a href="#Distance-3103"><span class="linenos">3103</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Distance-3229"><a href="#Distance-3229"><span class="linenos">3229</span></a><span class="k">class</span> <span class="nc">Distance</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Distance-3230"><a href="#Distance-3230"><span class="linenos">3230</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28349,6 +29083,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Distance.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Distance.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Distance.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Distance.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Distance.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Distance.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Distance.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Distance.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Distance.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Distance.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Distance.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -28363,8 +29110,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Escape"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Escape-3106"><a href="#Escape-3106"><span class="linenos">3106</span></a><span class="k">class</span> <span class="nc">Escape</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Escape-3107"><a href="#Escape-3107"><span class="linenos">3107</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Escape-3233"><a href="#Escape-3233"><span class="linenos">3233</span></a><span class="k">class</span> <span class="nc">Escape</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Escape-3234"><a href="#Escape-3234"><span class="linenos">3234</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28413,6 +29160,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Escape.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Escape.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Escape.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Escape.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Escape.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Escape.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Escape.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Escape.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Escape.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Escape.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Escape.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -28427,8 +29187,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Glob"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Glob-3110"><a href="#Glob-3110"><span class="linenos">3110</span></a><span class="k">class</span> <span class="nc">Glob</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="Glob-3111"><a href="#Glob-3111"><span class="linenos">3111</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Glob-3237"><a href="#Glob-3237"><span class="linenos">3237</span></a><span class="k">class</span> <span class="nc">Glob</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="Glob-3238"><a href="#Glob-3238"><span class="linenos">3238</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28481,6 +29241,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Glob.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Glob.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Glob.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Glob.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Glob.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Glob.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Glob.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Glob.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Glob.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Glob.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28497,8 +29264,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#GT"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GT-3114"><a href="#GT-3114"><span class="linenos">3114</span></a><span class="k">class</span> <span class="nc">GT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="GT-3115"><a href="#GT-3115"><span class="linenos">3115</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GT-3241"><a href="#GT-3241"><span class="linenos">3241</span></a><span class="k">class</span> <span class="nc">GT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="GT-3242"><a href="#GT-3242"><span class="linenos">3242</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28551,6 +29318,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="GT.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="GT.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="GT.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="GT.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="GT.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="GT.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="GT.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="GT.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="GT.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="GT.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28567,8 +29341,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#GTE"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GTE-3118"><a href="#GTE-3118"><span class="linenos">3118</span></a><span class="k">class</span> <span class="nc">GTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="GTE-3119"><a href="#GTE-3119"><span class="linenos">3119</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GTE-3245"><a href="#GTE-3245"><span class="linenos">3245</span></a><span class="k">class</span> <span class="nc">GTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="GTE-3246"><a href="#GTE-3246"><span class="linenos">3246</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28621,6 +29395,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="GTE.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="GTE.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="GTE.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="GTE.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="GTE.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="GTE.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="GTE.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="GTE.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="GTE.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="GTE.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28637,8 +29418,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#ILike"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ILike-3122"><a href="#ILike-3122"><span class="linenos">3122</span></a><span class="k">class</span> <span class="nc">ILike</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="ILike-3123"><a href="#ILike-3123"><span class="linenos">3123</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ILike-3249"><a href="#ILike-3249"><span class="linenos">3249</span></a><span class="k">class</span> <span class="nc">ILike</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="ILike-3250"><a href="#ILike-3250"><span class="linenos">3250</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28691,6 +29472,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="ILike.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ILike.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ILike.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ILike.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ILike.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ILike.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ILike.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ILike.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ILike.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ILike.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28707,8 +29495,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#ILikeAny"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ILikeAny-3126"><a href="#ILikeAny-3126"><span class="linenos">3126</span></a><span class="k">class</span> <span class="nc">ILikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="ILikeAny-3127"><a href="#ILikeAny-3127"><span class="linenos">3127</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ILikeAny-3253"><a href="#ILikeAny-3253"><span class="linenos">3253</span></a><span class="k">class</span> <span class="nc">ILikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="ILikeAny-3254"><a href="#ILikeAny-3254"><span class="linenos">3254</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28761,6 +29549,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="ILikeAny.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ILikeAny.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ILikeAny.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ILikeAny.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ILikeAny.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ILikeAny.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ILikeAny.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ILikeAny.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ILikeAny.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ILikeAny.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28777,8 +29572,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#IntDiv"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IntDiv-3130"><a href="#IntDiv-3130"><span class="linenos">3130</span></a><span class="k">class</span> <span class="nc">IntDiv</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="IntDiv-3131"><a href="#IntDiv-3131"><span class="linenos">3131</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IntDiv-3257"><a href="#IntDiv-3257"><span class="linenos">3257</span></a><span class="k">class</span> <span class="nc">IntDiv</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="IntDiv-3258"><a href="#IntDiv-3258"><span class="linenos">3258</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28827,6 +29622,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="IntDiv.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="IntDiv.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="IntDiv.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="IntDiv.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="IntDiv.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="IntDiv.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="IntDiv.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="IntDiv.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="IntDiv.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="IntDiv.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="IntDiv.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -28841,8 +29649,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Is"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Is-3134"><a href="#Is-3134"><span class="linenos">3134</span></a><span class="k">class</span> <span class="nc">Is</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="Is-3135"><a href="#Is-3135"><span class="linenos">3135</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Is-3261"><a href="#Is-3261"><span class="linenos">3261</span></a><span class="k">class</span> <span class="nc">Is</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="Is-3262"><a href="#Is-3262"><span class="linenos">3262</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -28895,6 +29703,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Is.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Is.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Is.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Is.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Is.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Is.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Is.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Is.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Is.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Is.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -28911,8 +29726,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Kwarg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Kwarg-3138"><a href="#Kwarg-3138"><span class="linenos">3138</span></a><span class="k">class</span> <span class="nc">Kwarg</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Kwarg-3139"><a href="#Kwarg-3139"><span class="linenos">3139</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Kwarg in special functions like func(kwarg =&gt; y).&quot;&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Kwarg-3265"><a href="#Kwarg-3265"><span class="linenos">3265</span></a><span class="k">class</span> <span class="nc">Kwarg</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Kwarg-3266"><a href="#Kwarg-3266"><span class="linenos">3266</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Kwarg in special functions like func(kwarg =&gt; y).&quot;&quot;&quot;</span>
</span></pre></div>
@@ -28963,6 +29778,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Kwarg.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Kwarg.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Kwarg.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Kwarg.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Kwarg.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Kwarg.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Kwarg.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Kwarg.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Kwarg.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Kwarg.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Kwarg.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -28977,8 +29805,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Like"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Like-3142"><a href="#Like-3142"><span class="linenos">3142</span></a><span class="k">class</span> <span class="nc">Like</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="Like-3143"><a href="#Like-3143"><span class="linenos">3143</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Like-3269"><a href="#Like-3269"><span class="linenos">3269</span></a><span class="k">class</span> <span class="nc">Like</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="Like-3270"><a href="#Like-3270"><span class="linenos">3270</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29031,6 +29859,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Like.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Like.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Like.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Like.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Like.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Like.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Like.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Like.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Like.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Like.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29047,8 +29882,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#LikeAny"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LikeAny-3146"><a href="#LikeAny-3146"><span class="linenos">3146</span></a><span class="k">class</span> <span class="nc">LikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="LikeAny-3147"><a href="#LikeAny-3147"><span class="linenos">3147</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LikeAny-3273"><a href="#LikeAny-3273"><span class="linenos">3273</span></a><span class="k">class</span> <span class="nc">LikeAny</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="LikeAny-3274"><a href="#LikeAny-3274"><span class="linenos">3274</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29101,6 +29936,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="LikeAny.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="LikeAny.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="LikeAny.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="LikeAny.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="LikeAny.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="LikeAny.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="LikeAny.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="LikeAny.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="LikeAny.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="LikeAny.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29117,8 +29959,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#LT"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LT-3150"><a href="#LT-3150"><span class="linenos">3150</span></a><span class="k">class</span> <span class="nc">LT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="LT-3151"><a href="#LT-3151"><span class="linenos">3151</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LT-3277"><a href="#LT-3277"><span class="linenos">3277</span></a><span class="k">class</span> <span class="nc">LT</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="LT-3278"><a href="#LT-3278"><span class="linenos">3278</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29171,6 +30013,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="LT.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="LT.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="LT.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="LT.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="LT.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="LT.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="LT.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="LT.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="LT.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="LT.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29187,8 +30036,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#LTE"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LTE-3154"><a href="#LTE-3154"><span class="linenos">3154</span></a><span class="k">class</span> <span class="nc">LTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="LTE-3155"><a href="#LTE-3155"><span class="linenos">3155</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LTE-3281"><a href="#LTE-3281"><span class="linenos">3281</span></a><span class="k">class</span> <span class="nc">LTE</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="LTE-3282"><a href="#LTE-3282"><span class="linenos">3282</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29241,6 +30090,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="LTE.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="LTE.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="LTE.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="LTE.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="LTE.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="LTE.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="LTE.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="LTE.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="LTE.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="LTE.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29257,8 +30113,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Mod"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Mod-3158"><a href="#Mod-3158"><span class="linenos">3158</span></a><span class="k">class</span> <span class="nc">Mod</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Mod-3159"><a href="#Mod-3159"><span class="linenos">3159</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Mod-3285"><a href="#Mod-3285"><span class="linenos">3285</span></a><span class="k">class</span> <span class="nc">Mod</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Mod-3286"><a href="#Mod-3286"><span class="linenos">3286</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29307,6 +30163,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Mod.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Mod.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Mod.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Mod.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Mod.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Mod.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Mod.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Mod.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Mod.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Mod.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Mod.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -29321,8 +30190,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Mul"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Mul-3162"><a href="#Mul-3162"><span class="linenos">3162</span></a><span class="k">class</span> <span class="nc">Mul</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Mul-3163"><a href="#Mul-3163"><span class="linenos">3163</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Mul-3289"><a href="#Mul-3289"><span class="linenos">3289</span></a><span class="k">class</span> <span class="nc">Mul</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Mul-3290"><a href="#Mul-3290"><span class="linenos">3290</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29371,6 +30240,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Mul.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Mul.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Mul.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Mul.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Mul.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Mul.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Mul.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Mul.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Mul.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Mul.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Mul.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -29385,8 +30267,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#NEQ"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NEQ-3166"><a href="#NEQ-3166"><span class="linenos">3166</span></a><span class="k">class</span> <span class="nc">NEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="NEQ-3167"><a href="#NEQ-3167"><span class="linenos">3167</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NEQ-3293"><a href="#NEQ-3293"><span class="linenos">3293</span></a><span class="k">class</span> <span class="nc">NEQ</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="NEQ-3294"><a href="#NEQ-3294"><span class="linenos">3294</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29439,6 +30321,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="NEQ.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="NEQ.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="NEQ.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="NEQ.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="NEQ.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="NEQ.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="NEQ.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="NEQ.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="NEQ.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="NEQ.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29455,8 +30344,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#SimilarTo"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SimilarTo-3170"><a href="#SimilarTo-3170"><span class="linenos">3170</span></a><span class="k">class</span> <span class="nc">SimilarTo</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
-</span><span id="SimilarTo-3171"><a href="#SimilarTo-3171"><span class="linenos">3171</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SimilarTo-3297"><a href="#SimilarTo-3297"><span class="linenos">3297</span></a><span class="k">class</span> <span class="nc">SimilarTo</span><span class="p">(</span><span class="n">Binary</span><span class="p">,</span> <span class="n">Predicate</span><span class="p">):</span>
+</span><span id="SimilarTo-3298"><a href="#SimilarTo-3298"><span class="linenos">3298</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29509,6 +30398,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="SimilarTo.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="SimilarTo.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="SimilarTo.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="SimilarTo.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="SimilarTo.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="SimilarTo.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="SimilarTo.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="SimilarTo.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="SimilarTo.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="SimilarTo.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29525,8 +30421,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Slice"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Slice-3174"><a href="#Slice-3174"><span class="linenos">3174</span></a><span class="k">class</span> <span class="nc">Slice</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Slice-3175"><a href="#Slice-3175"><span class="linenos">3175</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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Slice-3301"><a href="#Slice-3301"><span class="linenos">3301</span></a><span class="k">class</span> <span class="nc">Slice</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Slice-3302"><a href="#Slice-3302"><span class="linenos">3302</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -29575,6 +30471,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Slice.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Slice.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Slice.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Slice.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Slice.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Slice.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Slice.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Slice.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Slice.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Slice.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Slice.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -29589,8 +30498,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Sub"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Sub-3178"><a href="#Sub-3178"><span class="linenos">3178</span></a><span class="k">class</span> <span class="nc">Sub</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Sub-3179"><a href="#Sub-3179"><span class="linenos">3179</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sub-3305"><a href="#Sub-3305"><span class="linenos">3305</span></a><span class="k">class</span> <span class="nc">Sub</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Sub-3306"><a href="#Sub-3306"><span class="linenos">3306</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29639,6 +30548,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Sub.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Sub.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Sub.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Sub.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Sub.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Sub.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Sub.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Sub.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Sub.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Sub.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Sub.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -29653,8 +30575,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#ArrayOverlaps"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayOverlaps-3182"><a href="#ArrayOverlaps-3182"><span class="linenos">3182</span></a><span class="k">class</span> <span class="nc">ArrayOverlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="ArrayOverlaps-3183"><a href="#ArrayOverlaps-3183"><span class="linenos">3183</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayOverlaps-3309"><a href="#ArrayOverlaps-3309"><span class="linenos">3309</span></a><span class="k">class</span> <span class="nc">ArrayOverlaps</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="ArrayOverlaps-3310"><a href="#ArrayOverlaps-3310"><span class="linenos">3310</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29703,6 +30625,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="ArrayOverlaps.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="ArrayOverlaps.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="ArrayOverlaps.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="ArrayOverlaps.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayOverlaps.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayOverlaps.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayOverlaps.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayOverlaps.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayOverlaps.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayOverlaps.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayOverlaps.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -29711,14 +30646,14 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<div class="attr class">
<span class="def">class</span>
- <span class="name">Unary</span><wbr>(<span class="base"><a href="#Expression">Expression</a></span>):
+ <span class="name">Unary</span><wbr>(<span class="base"><a href="#Condition">Condition</a></span>):
<label class="view-source-button" for="Unary-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Unary"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unary-3188"><a href="#Unary-3188"><span class="linenos">3188</span></a><span class="k">class</span> <span class="nc">Unary</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Unary-3189"><a href="#Unary-3189"><span class="linenos">3189</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unary-3315"><a href="#Unary-3315"><span class="linenos">3315</span></a><span class="k">class</span> <span class="nc">Unary</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Unary-3316"><a href="#Unary-3316"><span class="linenos">3316</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29767,6 +30702,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Unary.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Unary.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Unary.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Unary.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Unary.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Unary.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Unary.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Unary.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Unary.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Unary.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Unary.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -29781,8 +30729,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#BitwiseNot"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseNot-3192"><a href="#BitwiseNot-3192"><span class="linenos">3192</span></a><span class="k">class</span> <span class="nc">BitwiseNot</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
-</span><span id="BitwiseNot-3193"><a href="#BitwiseNot-3193"><span class="linenos">3193</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="BitwiseNot-3319"><a href="#BitwiseNot-3319"><span class="linenos">3319</span></a><span class="k">class</span> <span class="nc">BitwiseNot</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="BitwiseNot-3320"><a href="#BitwiseNot-3320"><span class="linenos">3320</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29831,6 +30779,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="BitwiseNot.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="BitwiseNot.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="BitwiseNot.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="BitwiseNot.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="BitwiseNot.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="BitwiseNot.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="BitwiseNot.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="BitwiseNot.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="BitwiseNot.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="BitwiseNot.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="BitwiseNot.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -29839,14 +30800,14 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<div class="attr class">
<span class="def">class</span>
- <span class="name">Not</span><wbr>(<span class="base"><a href="#Unary">Unary</a></span>, <span class="base"><a href="#Condition">Condition</a></span>):
+ <span class="name">Not</span><wbr>(<span class="base"><a href="#Unary">Unary</a></span>):
<label class="view-source-button" for="Not-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Not"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Not-3196"><a href="#Not-3196"><span class="linenos">3196</span></a><span class="k">class</span> <span class="nc">Not</span><span class="p">(</span><span class="n">Unary</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="Not-3197"><a href="#Not-3197"><span class="linenos">3197</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Not-3323"><a href="#Not-3323"><span class="linenos">3323</span></a><span class="k">class</span> <span class="nc">Not</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="Not-3324"><a href="#Not-3324"><span class="linenos">3324</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -29899,6 +30860,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Not.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Not.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Not.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Not.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Not.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Not.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Not.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Not.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Not.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Not.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29909,14 +30877,14 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<div class="attr class">
<span class="def">class</span>
- <span class="name">Paren</span><wbr>(<span class="base"><a href="#Unary">Unary</a></span>, <span class="base"><a href="#Condition">Condition</a></span>):
+ <span class="name">Paren</span><wbr>(<span class="base"><a href="#Unary">Unary</a></span>):
<label class="view-source-button" for="Paren-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Paren"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Paren-3200"><a href="#Paren-3200"><span class="linenos">3200</span></a><span class="k">class</span> <span class="nc">Paren</span><span class="p">(</span><span class="n">Unary</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="Paren-3201"><a href="#Paren-3201"><span class="linenos">3201</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;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Paren-3327"><a href="#Paren-3327"><span class="linenos">3327</span></a><span class="k">class</span> <span class="nc">Paren</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="Paren-3328"><a href="#Paren-3328"><span class="linenos">3328</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;with&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -29969,6 +30937,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Paren.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Paren.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Paren.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Paren.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Paren.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Paren.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Paren.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Paren.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Paren.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Paren.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -29985,8 +30960,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Neg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Neg-3204"><a href="#Neg-3204"><span class="linenos">3204</span></a><span class="k">class</span> <span class="nc">Neg</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
-</span><span id="Neg-3205"><a href="#Neg-3205"><span class="linenos">3205</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Neg-3331"><a href="#Neg-3331"><span class="linenos">3331</span></a><span class="k">class</span> <span class="nc">Neg</span><span class="p">(</span><span class="n">Unary</span><span class="p">):</span>
+</span><span id="Neg-3332"><a href="#Neg-3332"><span class="linenos">3332</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -30035,6 +31010,19 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Neg.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Neg.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Neg.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Neg.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Neg.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Neg.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Neg.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Neg.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Neg.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Neg.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Neg.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -30049,12 +31037,12 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Alias"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Alias-3208"><a href="#Alias-3208"><span class="linenos">3208</span></a><span class="k">class</span> <span class="nc">Alias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Alias-3209"><a href="#Alias-3209"><span class="linenos">3209</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;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Alias-3210"><a href="#Alias-3210"><span class="linenos">3210</span></a>
-</span><span id="Alias-3211"><a href="#Alias-3211"><span class="linenos">3211</span></a> <span class="nd">@property</span>
-</span><span id="Alias-3212"><a href="#Alias-3212"><span class="linenos">3212</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><span id="Alias-3213"><a href="#Alias-3213"><span class="linenos">3213</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Alias-3335"><a href="#Alias-3335"><span class="linenos">3335</span></a><span class="k">class</span> <span class="nc">Alias</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Alias-3336"><a href="#Alias-3336"><span class="linenos">3336</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;alias&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Alias-3337"><a href="#Alias-3337"><span class="linenos">3337</span></a>
+</span><span id="Alias-3338"><a href="#Alias-3338"><span class="linenos">3338</span></a> <span class="nd">@property</span>
+</span><span id="Alias-3339"><a href="#Alias-3339"><span class="linenos">3339</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><span id="Alias-3340"><a href="#Alias-3340"><span class="linenos">3340</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span>
</span></pre></div>
@@ -30146,12 +31134,12 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Aliases"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Aliases-3216"><a href="#Aliases-3216"><span class="linenos">3216</span></a><span class="k">class</span> <span class="nc">Aliases</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Aliases-3217"><a href="#Aliases-3217"><span class="linenos">3217</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="Aliases-3218"><a href="#Aliases-3218"><span class="linenos">3218</span></a>
-</span><span id="Aliases-3219"><a href="#Aliases-3219"><span class="linenos">3219</span></a> <span class="nd">@property</span>
-</span><span id="Aliases-3220"><a href="#Aliases-3220"><span class="linenos">3220</span></a> <span class="k">def</span> <span class="nf">aliases</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Aliases-3221"><a href="#Aliases-3221"><span class="linenos">3221</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Aliases-3343"><a href="#Aliases-3343"><span class="linenos">3343</span></a><span class="k">class</span> <span class="nc">Aliases</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Aliases-3344"><a href="#Aliases-3344"><span class="linenos">3344</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="Aliases-3345"><a href="#Aliases-3345"><span class="linenos">3345</span></a>
+</span><span id="Aliases-3346"><a href="#Aliases-3346"><span class="linenos">3346</span></a> <span class="nd">@property</span>
+</span><span id="Aliases-3347"><a href="#Aliases-3347"><span class="linenos">3347</span></a> <span class="k">def</span> <span class="nf">aliases</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Aliases-3348"><a href="#Aliases-3348"><span class="linenos">3348</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span>
</span></pre></div>
@@ -30214,8 +31202,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#AtTimeZone"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AtTimeZone-3224"><a href="#AtTimeZone-3224"><span class="linenos">3224</span></a><span class="k">class</span> <span class="nc">AtTimeZone</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="AtTimeZone-3225"><a href="#AtTimeZone-3225"><span class="linenos">3225</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;zone&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AtTimeZone-3351"><a href="#AtTimeZone-3351"><span class="linenos">3351</span></a><span class="k">class</span> <span class="nc">AtTimeZone</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="AtTimeZone-3352"><a href="#AtTimeZone-3352"><span class="linenos">3352</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;zone&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -30278,8 +31266,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Between"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Between-3228"><a href="#Between-3228"><span class="linenos">3228</span></a><span class="k">class</span> <span class="nc">Between</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
-</span><span id="Between-3229"><a href="#Between-3229"><span class="linenos">3229</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;low&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;high&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Between-3355"><a href="#Between-3355"><span class="linenos">3355</span></a><span class="k">class</span> <span class="nc">Between</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
+</span><span id="Between-3356"><a href="#Between-3356"><span class="linenos">3356</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;low&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;high&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -30332,6 +31320,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Between.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Between.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Between.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Between.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Between.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Between.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Between.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Between.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Between.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Between.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -30348,8 +31343,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Bracket"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Bracket-3232"><a href="#Bracket-3232"><span class="linenos">3232</span></a><span class="k">class</span> <span class="nc">Bracket</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Bracket-3233"><a href="#Bracket-3233"><span class="linenos">3233</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Bracket-3359"><a href="#Bracket-3359"><span class="linenos">3359</span></a><span class="k">class</span> <span class="nc">Bracket</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Bracket-3360"><a href="#Bracket-3360"><span class="linenos">3360</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -30402,6 +31397,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="Bracket.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Bracket.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Bracket.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Bracket.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Bracket.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Bracket.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Bracket.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Bracket.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Bracket.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Bracket.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -30418,8 +31420,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Distinct"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Distinct-3236"><a href="#Distinct-3236"><span class="linenos">3236</span></a><span class="k">class</span> <span class="nc">Distinct</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Distinct-3237"><a href="#Distinct-3237"><span class="linenos">3237</span></a> <span class="n">arg_types</span> <span class="o">=</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 class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Distinct-3363"><a href="#Distinct-3363"><span class="linenos">3363</span></a><span class="k">class</span> <span class="nc">Distinct</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Distinct-3364"><a href="#Distinct-3364"><span class="linenos">3364</span></a> <span class="n">arg_types</span> <span class="o">=</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 class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -30482,15 +31484,15 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#In"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="In-3240"><a href="#In-3240"><span class="linenos">3240</span></a><span class="k">class</span> <span class="nc">In</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
-</span><span id="In-3241"><a href="#In-3241"><span class="linenos">3241</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="In-3242"><a href="#In-3242"><span class="linenos">3242</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="In-3243"><a href="#In-3243"><span class="linenos">3243</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="In-3244"><a href="#In-3244"><span class="linenos">3244</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="In-3245"><a href="#In-3245"><span class="linenos">3245</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="In-3246"><a href="#In-3246"><span class="linenos">3246</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="In-3247"><a href="#In-3247"><span class="linenos">3247</span></a> <span class="s2">&quot;is_global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="In-3248"><a href="#In-3248"><span class="linenos">3248</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="In-3367"><a href="#In-3367"><span class="linenos">3367</span></a><span class="k">class</span> <span class="nc">In</span><span class="p">(</span><span class="n">Predicate</span><span class="p">):</span>
+</span><span id="In-3368"><a href="#In-3368"><span class="linenos">3368</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="In-3369"><a href="#In-3369"><span class="linenos">3369</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="In-3370"><a href="#In-3370"><span class="linenos">3370</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="In-3371"><a href="#In-3371"><span class="linenos">3371</span></a> <span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="In-3372"><a href="#In-3372"><span class="linenos">3372</span></a> <span class="s2">&quot;unnest&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="In-3373"><a href="#In-3373"><span class="linenos">3373</span></a> <span class="s2">&quot;field&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="In-3374"><a href="#In-3374"><span class="linenos">3374</span></a> <span class="s2">&quot;is_global&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="In-3375"><a href="#In-3375"><span class="linenos">3375</span></a> <span class="p">}</span>
</span></pre></div>
@@ -30543,6 +31545,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
<dd id="In.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="In.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="In.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="In.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="In.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="In.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="In.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="In.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="In.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="In.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -30559,18 +31568,18 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#TimeUnit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeUnit-3251"><a href="#TimeUnit-3251"><span class="linenos">3251</span></a><span class="k">class</span> <span class="nc">TimeUnit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="TimeUnit-3252"><a href="#TimeUnit-3252"><span class="linenos">3252</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Automatically converts unit arg into a var.&quot;&quot;&quot;</span>
-</span><span id="TimeUnit-3253"><a href="#TimeUnit-3253"><span class="linenos">3253</span></a>
-</span><span id="TimeUnit-3254"><a href="#TimeUnit-3254"><span class="linenos">3254</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="TimeUnit-3255"><a href="#TimeUnit-3255"><span class="linenos">3255</span></a>
-</span><span id="TimeUnit-3256"><a href="#TimeUnit-3256"><span class="linenos">3256</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">args</span><span class="p">):</span>
-</span><span id="TimeUnit-3257"><a href="#TimeUnit-3257"><span class="linenos">3257</span></a> <span class="n">unit</span> <span class="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="TimeUnit-3258"><a href="#TimeUnit-3258"><span class="linenos">3258</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="n">Column</span><span class="p">,</span> <span class="n">Literal</span><span class="p">)):</span>
-</span><span id="TimeUnit-3259"><a href="#TimeUnit-3259"><span class="linenos">3259</span></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;unit&quot;</span><span class="p">]</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">unit</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="TimeUnit-3260"><a href="#TimeUnit-3260"><span class="linenos">3260</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">Week</span><span class="p">):</span>
-</span><span id="TimeUnit-3261"><a href="#TimeUnit-3261"><span class="linenos">3261</span></a> <span class="n">unit</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</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="TimeUnit-3262"><a href="#TimeUnit-3262"><span class="linenos">3262</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="o">**</span><span class="n">args</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeUnit-3378"><a href="#TimeUnit-3378"><span class="linenos">3378</span></a><span class="k">class</span> <span class="nc">TimeUnit</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="TimeUnit-3379"><a href="#TimeUnit-3379"><span class="linenos">3379</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Automatically converts unit arg into a var.&quot;&quot;&quot;</span>
+</span><span id="TimeUnit-3380"><a href="#TimeUnit-3380"><span class="linenos">3380</span></a>
+</span><span id="TimeUnit-3381"><a href="#TimeUnit-3381"><span class="linenos">3381</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="TimeUnit-3382"><a href="#TimeUnit-3382"><span class="linenos">3382</span></a>
+</span><span id="TimeUnit-3383"><a href="#TimeUnit-3383"><span class="linenos">3383</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">args</span><span class="p">):</span>
+</span><span id="TimeUnit-3384"><a href="#TimeUnit-3384"><span class="linenos">3384</span></a> <span class="n">unit</span> <span class="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="TimeUnit-3385"><a href="#TimeUnit-3385"><span class="linenos">3385</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="n">Column</span><span class="p">,</span> <span class="n">Literal</span><span class="p">)):</span>
+</span><span id="TimeUnit-3386"><a href="#TimeUnit-3386"><span class="linenos">3386</span></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;unit&quot;</span><span class="p">]</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">unit</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="TimeUnit-3387"><a href="#TimeUnit-3387"><span class="linenos">3387</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">Week</span><span class="p">):</span>
+</span><span id="TimeUnit-3388"><a href="#TimeUnit-3388"><span class="linenos">3388</span></a> <span class="n">unit</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</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="TimeUnit-3389"><a href="#TimeUnit-3389"><span class="linenos">3389</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="o">**</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -30588,13 +31597,13 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#TimeUnit.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeUnit.__init__-3256"><a href="#TimeUnit.__init__-3256"><span class="linenos">3256</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">args</span><span class="p">):</span>
-</span><span id="TimeUnit.__init__-3257"><a href="#TimeUnit.__init__-3257"><span class="linenos">3257</span></a> <span class="n">unit</span> <span class="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="TimeUnit.__init__-3258"><a href="#TimeUnit.__init__-3258"><span class="linenos">3258</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="n">Column</span><span class="p">,</span> <span class="n">Literal</span><span class="p">)):</span>
-</span><span id="TimeUnit.__init__-3259"><a href="#TimeUnit.__init__-3259"><span class="linenos">3259</span></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;unit&quot;</span><span class="p">]</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">unit</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="TimeUnit.__init__-3260"><a href="#TimeUnit.__init__-3260"><span class="linenos">3260</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">Week</span><span class="p">):</span>
-</span><span id="TimeUnit.__init__-3261"><a href="#TimeUnit.__init__-3261"><span class="linenos">3261</span></a> <span class="n">unit</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</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="TimeUnit.__init__-3262"><a href="#TimeUnit.__init__-3262"><span class="linenos">3262</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="o">**</span><span class="n">args</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeUnit.__init__-3383"><a href="#TimeUnit.__init__-3383"><span class="linenos">3383</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">args</span><span class="p">):</span>
+</span><span id="TimeUnit.__init__-3384"><a href="#TimeUnit.__init__-3384"><span class="linenos">3384</span></a> <span class="n">unit</span> <span class="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="TimeUnit.__init__-3385"><a href="#TimeUnit.__init__-3385"><span class="linenos">3385</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="p">(</span><span class="n">Column</span><span class="p">,</span> <span class="n">Literal</span><span class="p">)):</span>
+</span><span id="TimeUnit.__init__-3386"><a href="#TimeUnit.__init__-3386"><span class="linenos">3386</span></a> <span class="n">args</span><span class="p">[</span><span class="s2">&quot;unit&quot;</span><span class="p">]</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">unit</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="TimeUnit.__init__-3387"><a href="#TimeUnit.__init__-3387"><span class="linenos">3387</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unit</span><span class="p">,</span> <span class="n">Week</span><span class="p">):</span>
+</span><span id="TimeUnit.__init__-3388"><a href="#TimeUnit.__init__-3388"><span class="linenos">3388</span></a> <span class="n">unit</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</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="TimeUnit.__init__-3389"><a href="#TimeUnit.__init__-3389"><span class="linenos">3389</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="o">**</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -30657,8 +31666,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Interval"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Interval-3265"><a href="#Interval-3265"><span class="linenos">3265</span></a><span class="k">class</span> <span class="nc">Interval</span><span class="p">(</span><span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="Interval-3266"><a href="#Interval-3266"><span class="linenos">3266</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Interval-3392"><a href="#Interval-3392"><span class="linenos">3392</span></a><span class="k">class</span> <span class="nc">Interval</span><span class="p">(</span><span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="Interval-3393"><a href="#Interval-3393"><span class="linenos">3393</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -30724,8 +31733,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#IgnoreNulls"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IgnoreNulls-3269"><a href="#IgnoreNulls-3269"><span class="linenos">3269</span></a><span class="k">class</span> <span class="nc">IgnoreNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="IgnoreNulls-3270"><a href="#IgnoreNulls-3270"><span class="linenos">3270</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IgnoreNulls-3396"><a href="#IgnoreNulls-3396"><span class="linenos">3396</span></a><span class="k">class</span> <span class="nc">IgnoreNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="IgnoreNulls-3397"><a href="#IgnoreNulls-3397"><span class="linenos">3397</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -30788,8 +31797,8 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#RespectNulls"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RespectNulls-3273"><a href="#RespectNulls-3273"><span class="linenos">3273</span></a><span class="k">class</span> <span class="nc">RespectNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="RespectNulls-3274"><a href="#RespectNulls-3274"><span class="linenos">3274</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RespectNulls-3400"><a href="#RespectNulls-3400"><span class="linenos">3400</span></a><span class="k">class</span> <span class="nc">RespectNulls</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="RespectNulls-3401"><a href="#RespectNulls-3401"><span class="linenos">3401</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -30852,53 +31861,53 @@ If another <code><a href="#Expression">Expression</a></code> instance is passed,
</div>
<a class="headerlink" href="#Func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Func-3278"><a href="#Func-3278"><span class="linenos">3278</span></a><span class="k">class</span> <span class="nc">Func</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
-</span><span id="Func-3279"><a href="#Func-3279"><span class="linenos">3279</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Func-3280"><a href="#Func-3280"><span class="linenos">3280</span></a><span class="sd"> The base class for all function expressions.</span>
-</span><span id="Func-3281"><a href="#Func-3281"><span class="linenos">3281</span></a>
-</span><span id="Func-3282"><a href="#Func-3282"><span class="linenos">3282</span></a><span class="sd"> Attributes:</span>
-</span><span id="Func-3283"><a href="#Func-3283"><span class="linenos">3283</span></a><span class="sd"> is_var_len_args (bool): if set to True the last argument defined in arg_types will be</span>
-</span><span id="Func-3284"><a href="#Func-3284"><span class="linenos">3284</span></a><span class="sd"> treated as a variable length argument and the argument&#39;s value will be stored as a list.</span>
-</span><span id="Func-3285"><a href="#Func-3285"><span class="linenos">3285</span></a><span class="sd"> _sql_names (list): determines the SQL name (1st item in the list) and aliases (subsequent items)</span>
-</span><span id="Func-3286"><a href="#Func-3286"><span class="linenos">3286</span></a><span class="sd"> for this function expression. These values are used to map this node to a name during parsing</span>
-</span><span id="Func-3287"><a href="#Func-3287"><span class="linenos">3287</span></a><span class="sd"> as well as to provide the function&#39;s name during SQL string generation. By default the SQL</span>
-</span><span id="Func-3288"><a href="#Func-3288"><span class="linenos">3288</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
-</span><span id="Func-3289"><a href="#Func-3289"><span class="linenos">3289</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Func-3290"><a href="#Func-3290"><span class="linenos">3290</span></a>
-</span><span id="Func-3291"><a href="#Func-3291"><span class="linenos">3291</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Func-3292"><a href="#Func-3292"><span class="linenos">3292</span></a>
-</span><span id="Func-3293"><a href="#Func-3293"><span class="linenos">3293</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3294"><a href="#Func-3294"><span class="linenos">3294</span></a> <span class="k">def</span> <span class="nf">from_arg_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
-</span><span id="Func-3295"><a href="#Func-3295"><span class="linenos">3295</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span><span class="p">:</span>
-</span><span id="Func-3296"><a href="#Func-3296"><span class="linenos">3296</span></a> <span class="n">all_arg_keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)</span>
-</span><span id="Func-3297"><a href="#Func-3297"><span class="linenos">3297</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
-</span><span id="Func-3298"><a href="#Func-3298"><span class="linenos">3298</span></a> <span class="n">non_var_len_arg_keys</span> <span class="o">=</span> <span class="n">all_arg_keys</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="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span> <span class="k">else</span> <span class="n">all_arg_keys</span>
-</span><span id="Func-3299"><a href="#Func-3299"><span class="linenos">3299</span></a> <span class="n">num_non_var</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">non_var_len_arg_keys</span><span class="p">)</span>
-</span><span id="Func-3300"><a href="#Func-3300"><span class="linenos">3300</span></a>
-</span><span id="Func-3301"><a href="#Func-3301"><span class="linenos">3301</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">non_var_len_arg_keys</span><span class="p">)}</span>
-</span><span id="Func-3302"><a href="#Func-3302"><span class="linenos">3302</span></a> <span class="n">args_dict</span><span class="p">[</span><span class="n">all_arg_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">args</span><span class="p">[</span><span class="n">num_non_var</span><span class="p">:]</span>
-</span><span id="Func-3303"><a href="#Func-3303"><span class="linenos">3303</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Func-3304"><a href="#Func-3304"><span class="linenos">3304</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)}</span>
-</span><span id="Func-3305"><a href="#Func-3305"><span class="linenos">3305</span></a>
-</span><span id="Func-3306"><a href="#Func-3306"><span class="linenos">3306</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">args_dict</span><span class="p">)</span>
-</span><span id="Func-3307"><a href="#Func-3307"><span class="linenos">3307</span></a>
-</span><span id="Func-3308"><a href="#Func-3308"><span class="linenos">3308</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3309"><a href="#Func-3309"><span class="linenos">3309</span></a> <span class="k">def</span> <span class="nf">sql_names</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="Func-3310"><a href="#Func-3310"><span class="linenos">3310</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">Func</span><span class="p">:</span>
-</span><span id="Func-3311"><a href="#Func-3311"><span class="linenos">3311</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
-</span><span id="Func-3312"><a href="#Func-3312"><span class="linenos">3312</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
-</span><span id="Func-3313"><a href="#Func-3313"><span class="linenos">3313</span></a> <span class="p">)</span>
-</span><span id="Func-3314"><a href="#Func-3314"><span class="linenos">3314</span></a> <span class="k">if</span> <span class="s2">&quot;_sql_names&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">:</span>
-</span><span id="Func-3315"><a href="#Func-3315"><span class="linenos">3315</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">camel_to_snake_case</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)]</span>
-</span><span id="Func-3316"><a href="#Func-3316"><span class="linenos">3316</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span>
-</span><span id="Func-3317"><a href="#Func-3317"><span class="linenos">3317</span></a>
-</span><span id="Func-3318"><a href="#Func-3318"><span class="linenos">3318</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3319"><a href="#Func-3319"><span class="linenos">3319</span></a> <span class="k">def</span> <span class="nf">sql_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="Func-3320"><a href="#Func-3320"><span class="linenos">3320</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="Func-3321"><a href="#Func-3321"><span class="linenos">3321</span></a>
-</span><span id="Func-3322"><a href="#Func-3322"><span class="linenos">3322</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func-3323"><a href="#Func-3323"><span class="linenos">3323</span></a> <span class="k">def</span> <span class="nf">default_parser_mappings</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="Func-3324"><a href="#Func-3324"><span class="linenos">3324</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Func-3405"><a href="#Func-3405"><span class="linenos">3405</span></a><span class="k">class</span> <span class="nc">Func</span><span class="p">(</span><span class="n">Condition</span><span class="p">):</span>
+</span><span id="Func-3406"><a href="#Func-3406"><span class="linenos">3406</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Func-3407"><a href="#Func-3407"><span class="linenos">3407</span></a><span class="sd"> The base class for all function expressions.</span>
+</span><span id="Func-3408"><a href="#Func-3408"><span class="linenos">3408</span></a>
+</span><span id="Func-3409"><a href="#Func-3409"><span class="linenos">3409</span></a><span class="sd"> Attributes:</span>
+</span><span id="Func-3410"><a href="#Func-3410"><span class="linenos">3410</span></a><span class="sd"> is_var_len_args (bool): if set to True the last argument defined in arg_types will be</span>
+</span><span id="Func-3411"><a href="#Func-3411"><span class="linenos">3411</span></a><span class="sd"> treated as a variable length argument and the argument&#39;s value will be stored as a list.</span>
+</span><span id="Func-3412"><a href="#Func-3412"><span class="linenos">3412</span></a><span class="sd"> _sql_names (list): determines the SQL name (1st item in the list) and aliases (subsequent items)</span>
+</span><span id="Func-3413"><a href="#Func-3413"><span class="linenos">3413</span></a><span class="sd"> for this function expression. These values are used to map this node to a name during parsing</span>
+</span><span id="Func-3414"><a href="#Func-3414"><span class="linenos">3414</span></a><span class="sd"> as well as to provide the function&#39;s name during SQL string generation. By default the SQL</span>
+</span><span id="Func-3415"><a href="#Func-3415"><span class="linenos">3415</span></a><span class="sd"> name is set to the expression&#39;s class name transformed to snake case.</span>
+</span><span id="Func-3416"><a href="#Func-3416"><span class="linenos">3416</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Func-3417"><a href="#Func-3417"><span class="linenos">3417</span></a>
+</span><span id="Func-3418"><a href="#Func-3418"><span class="linenos">3418</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Func-3419"><a href="#Func-3419"><span class="linenos">3419</span></a>
+</span><span id="Func-3420"><a href="#Func-3420"><span class="linenos">3420</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-3421"><a href="#Func-3421"><span class="linenos">3421</span></a> <span class="k">def</span> <span class="nf">from_arg_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+</span><span id="Func-3422"><a href="#Func-3422"><span class="linenos">3422</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span><span class="p">:</span>
+</span><span id="Func-3423"><a href="#Func-3423"><span class="linenos">3423</span></a> <span class="n">all_arg_keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)</span>
+</span><span id="Func-3424"><a href="#Func-3424"><span class="linenos">3424</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
+</span><span id="Func-3425"><a href="#Func-3425"><span class="linenos">3425</span></a> <span class="n">non_var_len_arg_keys</span> <span class="o">=</span> <span class="n">all_arg_keys</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="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span> <span class="k">else</span> <span class="n">all_arg_keys</span>
+</span><span id="Func-3426"><a href="#Func-3426"><span class="linenos">3426</span></a> <span class="n">num_non_var</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">non_var_len_arg_keys</span><span class="p">)</span>
+</span><span id="Func-3427"><a href="#Func-3427"><span class="linenos">3427</span></a>
+</span><span id="Func-3428"><a href="#Func-3428"><span class="linenos">3428</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">non_var_len_arg_keys</span><span class="p">)}</span>
+</span><span id="Func-3429"><a href="#Func-3429"><span class="linenos">3429</span></a> <span class="n">args_dict</span><span class="p">[</span><span class="n">all_arg_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">args</span><span class="p">[</span><span class="n">num_non_var</span><span class="p">:]</span>
+</span><span id="Func-3430"><a href="#Func-3430"><span class="linenos">3430</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Func-3431"><a href="#Func-3431"><span class="linenos">3431</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)}</span>
+</span><span id="Func-3432"><a href="#Func-3432"><span class="linenos">3432</span></a>
+</span><span id="Func-3433"><a href="#Func-3433"><span class="linenos">3433</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">args_dict</span><span class="p">)</span>
+</span><span id="Func-3434"><a href="#Func-3434"><span class="linenos">3434</span></a>
+</span><span id="Func-3435"><a href="#Func-3435"><span class="linenos">3435</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-3436"><a href="#Func-3436"><span class="linenos">3436</span></a> <span class="k">def</span> <span class="nf">sql_names</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="Func-3437"><a href="#Func-3437"><span class="linenos">3437</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">Func</span><span class="p">:</span>
+</span><span id="Func-3438"><a href="#Func-3438"><span class="linenos">3438</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
+</span><span id="Func-3439"><a href="#Func-3439"><span class="linenos">3439</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
+</span><span id="Func-3440"><a href="#Func-3440"><span class="linenos">3440</span></a> <span class="p">)</span>
+</span><span id="Func-3441"><a href="#Func-3441"><span class="linenos">3441</span></a> <span class="k">if</span> <span class="s2">&quot;_sql_names&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">:</span>
+</span><span id="Func-3442"><a href="#Func-3442"><span class="linenos">3442</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">camel_to_snake_case</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)]</span>
+</span><span id="Func-3443"><a href="#Func-3443"><span class="linenos">3443</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span>
+</span><span id="Func-3444"><a href="#Func-3444"><span class="linenos">3444</span></a>
+</span><span id="Func-3445"><a href="#Func-3445"><span class="linenos">3445</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-3446"><a href="#Func-3446"><span class="linenos">3446</span></a> <span class="k">def</span> <span class="nf">sql_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="Func-3447"><a href="#Func-3447"><span class="linenos">3447</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Func-3448"><a href="#Func-3448"><span class="linenos">3448</span></a>
+</span><span id="Func-3449"><a href="#Func-3449"><span class="linenos">3449</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func-3450"><a href="#Func-3450"><span class="linenos">3450</span></a> <span class="k">def</span> <span class="nf">default_parser_mappings</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="Func-3451"><a href="#Func-3451"><span class="linenos">3451</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()}</span>
</span></pre></div>
@@ -30929,20 +31938,20 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Func.from_arg_list"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Func.from_arg_list-3293"><a href="#Func.from_arg_list-3293"><span class="linenos">3293</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.from_arg_list-3294"><a href="#Func.from_arg_list-3294"><span class="linenos">3294</span></a> <span class="k">def</span> <span class="nf">from_arg_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
-</span><span id="Func.from_arg_list-3295"><a href="#Func.from_arg_list-3295"><span class="linenos">3295</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span><span class="p">:</span>
-</span><span id="Func.from_arg_list-3296"><a href="#Func.from_arg_list-3296"><span class="linenos">3296</span></a> <span class="n">all_arg_keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)</span>
-</span><span id="Func.from_arg_list-3297"><a href="#Func.from_arg_list-3297"><span class="linenos">3297</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
-</span><span id="Func.from_arg_list-3298"><a href="#Func.from_arg_list-3298"><span class="linenos">3298</span></a> <span class="n">non_var_len_arg_keys</span> <span class="o">=</span> <span class="n">all_arg_keys</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="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span> <span class="k">else</span> <span class="n">all_arg_keys</span>
-</span><span id="Func.from_arg_list-3299"><a href="#Func.from_arg_list-3299"><span class="linenos">3299</span></a> <span class="n">num_non_var</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">non_var_len_arg_keys</span><span class="p">)</span>
-</span><span id="Func.from_arg_list-3300"><a href="#Func.from_arg_list-3300"><span class="linenos">3300</span></a>
-</span><span id="Func.from_arg_list-3301"><a href="#Func.from_arg_list-3301"><span class="linenos">3301</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">non_var_len_arg_keys</span><span class="p">)}</span>
-</span><span id="Func.from_arg_list-3302"><a href="#Func.from_arg_list-3302"><span class="linenos">3302</span></a> <span class="n">args_dict</span><span class="p">[</span><span class="n">all_arg_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">args</span><span class="p">[</span><span class="n">num_non_var</span><span class="p">:]</span>
-</span><span id="Func.from_arg_list-3303"><a href="#Func.from_arg_list-3303"><span class="linenos">3303</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Func.from_arg_list-3304"><a href="#Func.from_arg_list-3304"><span class="linenos">3304</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)}</span>
-</span><span id="Func.from_arg_list-3305"><a href="#Func.from_arg_list-3305"><span class="linenos">3305</span></a>
-</span><span id="Func.from_arg_list-3306"><a href="#Func.from_arg_list-3306"><span class="linenos">3306</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">args_dict</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Func.from_arg_list-3420"><a href="#Func.from_arg_list-3420"><span class="linenos">3420</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.from_arg_list-3421"><a href="#Func.from_arg_list-3421"><span class="linenos">3421</span></a> <span class="k">def</span> <span class="nf">from_arg_list</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
+</span><span id="Func.from_arg_list-3422"><a href="#Func.from_arg_list-3422"><span class="linenos">3422</span></a> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span><span class="p">:</span>
+</span><span id="Func.from_arg_list-3423"><a href="#Func.from_arg_list-3423"><span class="linenos">3423</span></a> <span class="n">all_arg_keys</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)</span>
+</span><span id="Func.from_arg_list-3424"><a href="#Func.from_arg_list-3424"><span class="linenos">3424</span></a> <span class="c1"># If this function supports variable length argument treat the last argument as such.</span>
+</span><span id="Func.from_arg_list-3425"><a href="#Func.from_arg_list-3425"><span class="linenos">3425</span></a> <span class="n">non_var_len_arg_keys</span> <span class="o">=</span> <span class="n">all_arg_keys</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="bp">cls</span><span class="o">.</span><span class="n">is_var_len_args</span> <span class="k">else</span> <span class="n">all_arg_keys</span>
+</span><span id="Func.from_arg_list-3426"><a href="#Func.from_arg_list-3426"><span class="linenos">3426</span></a> <span class="n">num_non_var</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">non_var_len_arg_keys</span><span class="p">)</span>
+</span><span id="Func.from_arg_list-3427"><a href="#Func.from_arg_list-3427"><span class="linenos">3427</span></a>
+</span><span id="Func.from_arg_list-3428"><a href="#Func.from_arg_list-3428"><span class="linenos">3428</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">non_var_len_arg_keys</span><span class="p">)}</span>
+</span><span id="Func.from_arg_list-3429"><a href="#Func.from_arg_list-3429"><span class="linenos">3429</span></a> <span class="n">args_dict</span><span class="p">[</span><span class="n">all_arg_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">args</span><span class="p">[</span><span class="n">num_non_var</span><span class="p">:]</span>
+</span><span id="Func.from_arg_list-3430"><a href="#Func.from_arg_list-3430"><span class="linenos">3430</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Func.from_arg_list-3431"><a href="#Func.from_arg_list-3431"><span class="linenos">3431</span></a> <span class="n">args_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">arg_key</span><span class="p">:</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span><span class="p">,</span> <span class="n">arg_key</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="n">arg_types</span><span class="p">)}</span>
+</span><span id="Func.from_arg_list-3432"><a href="#Func.from_arg_list-3432"><span class="linenos">3432</span></a>
+</span><span id="Func.from_arg_list-3433"><a href="#Func.from_arg_list-3433"><span class="linenos">3433</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">args_dict</span><span class="p">)</span>
</span></pre></div>
@@ -30961,15 +31970,15 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Func.sql_names"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Func.sql_names-3308"><a href="#Func.sql_names-3308"><span class="linenos">3308</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.sql_names-3309"><a href="#Func.sql_names-3309"><span class="linenos">3309</span></a> <span class="k">def</span> <span class="nf">sql_names</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="Func.sql_names-3310"><a href="#Func.sql_names-3310"><span class="linenos">3310</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">Func</span><span class="p">:</span>
-</span><span id="Func.sql_names-3311"><a href="#Func.sql_names-3311"><span class="linenos">3311</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
-</span><span id="Func.sql_names-3312"><a href="#Func.sql_names-3312"><span class="linenos">3312</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
-</span><span id="Func.sql_names-3313"><a href="#Func.sql_names-3313"><span class="linenos">3313</span></a> <span class="p">)</span>
-</span><span id="Func.sql_names-3314"><a href="#Func.sql_names-3314"><span class="linenos">3314</span></a> <span class="k">if</span> <span class="s2">&quot;_sql_names&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">:</span>
-</span><span id="Func.sql_names-3315"><a href="#Func.sql_names-3315"><span class="linenos">3315</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">camel_to_snake_case</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)]</span>
-</span><span id="Func.sql_names-3316"><a href="#Func.sql_names-3316"><span class="linenos">3316</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Func.sql_names-3435"><a href="#Func.sql_names-3435"><span class="linenos">3435</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.sql_names-3436"><a href="#Func.sql_names-3436"><span class="linenos">3436</span></a> <span class="k">def</span> <span class="nf">sql_names</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="Func.sql_names-3437"><a href="#Func.sql_names-3437"><span class="linenos">3437</span></a> <span class="k">if</span> <span class="bp">cls</span> <span class="ow">is</span> <span class="n">Func</span><span class="p">:</span>
+</span><span id="Func.sql_names-3438"><a href="#Func.sql_names-3438"><span class="linenos">3438</span></a> <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
+</span><span id="Func.sql_names-3439"><a href="#Func.sql_names-3439"><span class="linenos">3439</span></a> <span class="s2">&quot;SQL name is only supported by concrete function implementations&quot;</span>
+</span><span id="Func.sql_names-3440"><a href="#Func.sql_names-3440"><span class="linenos">3440</span></a> <span class="p">)</span>
+</span><span id="Func.sql_names-3441"><a href="#Func.sql_names-3441"><span class="linenos">3441</span></a> <span class="k">if</span> <span class="s2">&quot;_sql_names&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">:</span>
+</span><span id="Func.sql_names-3442"><a href="#Func.sql_names-3442"><span class="linenos">3442</span></a> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">camel_to_snake_case</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)]</span>
+</span><span id="Func.sql_names-3443"><a href="#Func.sql_names-3443"><span class="linenos">3443</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sql_names</span>
</span></pre></div>
@@ -30988,9 +31997,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Func.sql_name"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Func.sql_name-3318"><a href="#Func.sql_name-3318"><span class="linenos">3318</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.sql_name-3319"><a href="#Func.sql_name-3319"><span class="linenos">3319</span></a> <span class="k">def</span> <span class="nf">sql_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="Func.sql_name-3320"><a href="#Func.sql_name-3320"><span class="linenos">3320</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Func.sql_name-3445"><a href="#Func.sql_name-3445"><span class="linenos">3445</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.sql_name-3446"><a href="#Func.sql_name-3446"><span class="linenos">3446</span></a> <span class="k">def</span> <span class="nf">sql_name</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="Func.sql_name-3447"><a href="#Func.sql_name-3447"><span class="linenos">3447</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
</span></pre></div>
@@ -31009,9 +32018,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Func.default_parser_mappings"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Func.default_parser_mappings-3322"><a href="#Func.default_parser_mappings-3322"><span class="linenos">3322</span></a> <span class="nd">@classmethod</span>
-</span><span id="Func.default_parser_mappings-3323"><a href="#Func.default_parser_mappings-3323"><span class="linenos">3323</span></a> <span class="k">def</span> <span class="nf">default_parser_mappings</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
-</span><span id="Func.default_parser_mappings-3324"><a href="#Func.default_parser_mappings-3324"><span class="linenos">3324</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Func.default_parser_mappings-3449"><a href="#Func.default_parser_mappings-3449"><span class="linenos">3449</span></a> <span class="nd">@classmethod</span>
+</span><span id="Func.default_parser_mappings-3450"><a href="#Func.default_parser_mappings-3450"><span class="linenos">3450</span></a> <span class="k">def</span> <span class="nf">default_parser_mappings</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+</span><span id="Func.default_parser_mappings-3451"><a href="#Func.default_parser_mappings-3451"><span class="linenos">3451</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">sql_names</span><span class="p">()}</span>
</span></pre></div>
@@ -31065,6 +32074,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Func.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Func.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Func.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Func.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Func.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Func.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Func.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Func.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Func.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Func.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31081,8 +32097,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#AggFunc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AggFunc-3327"><a href="#AggFunc-3327"><span class="linenos">3327</span></a><span class="k">class</span> <span class="nc">AggFunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="AggFunc-3328"><a href="#AggFunc-3328"><span class="linenos">3328</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AggFunc-3454"><a href="#AggFunc-3454"><span class="linenos">3454</span></a><span class="k">class</span> <span class="nc">AggFunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="AggFunc-3455"><a href="#AggFunc-3455"><span class="linenos">3455</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -31142,6 +32158,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="AggFunc.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="AggFunc.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="AggFunc.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="AggFunc.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="AggFunc.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="AggFunc.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="AggFunc.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="AggFunc.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="AggFunc.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="AggFunc.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31158,8 +32181,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Abs"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Abs-3331"><a href="#Abs-3331"><span class="linenos">3331</span></a><span class="k">class</span> <span class="nc">Abs</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Abs-3332"><a href="#Abs-3332"><span class="linenos">3332</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Abs-3458"><a href="#Abs-3458"><span class="linenos">3458</span></a><span class="k">class</span> <span class="nc">Abs</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Abs-3459"><a href="#Abs-3459"><span class="linenos">3459</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -31219,6 +32242,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Abs.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Abs.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Abs.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Abs.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Abs.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Abs.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Abs.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Abs.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Abs.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Abs.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31235,9 +32265,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Anonymous"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Anonymous-3335"><a href="#Anonymous-3335"><span class="linenos">3335</span></a><span class="k">class</span> <span class="nc">Anonymous</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Anonymous-3336"><a href="#Anonymous-3336"><span class="linenos">3336</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Anonymous-3337"><a href="#Anonymous-3337"><span class="linenos">3337</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Anonymous-3462"><a href="#Anonymous-3462"><span class="linenos">3462</span></a><span class="k">class</span> <span class="nc">Anonymous</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Anonymous-3463"><a href="#Anonymous-3463"><span class="linenos">3463</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Anonymous-3464"><a href="#Anonymous-3464"><span class="linenos">3464</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -31297,6 +32327,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Anonymous.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Anonymous.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Anonymous.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Anonymous.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Anonymous.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Anonymous.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Anonymous.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Anonymous.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Anonymous.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Anonymous.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31313,9 +32350,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Hll"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hll-3342"><a href="#Hll-3342"><span class="linenos">3342</span></a><span class="k">class</span> <span class="nc">Hll</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Hll-3343"><a href="#Hll-3343"><span class="linenos">3343</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Hll-3344"><a href="#Hll-3344"><span class="linenos">3344</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hll-3469"><a href="#Hll-3469"><span class="linenos">3469</span></a><span class="k">class</span> <span class="nc">Hll</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Hll-3470"><a href="#Hll-3470"><span class="linenos">3470</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Hll-3471"><a href="#Hll-3471"><span class="linenos">3471</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -31375,6 +32412,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Hll.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Hll.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Hll.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Hll.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Hll.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Hll.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Hll.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Hll.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Hll.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Hll.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31391,8 +32435,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ApproxDistinct"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ApproxDistinct-3347"><a href="#ApproxDistinct-3347"><span class="linenos">3347</span></a><span class="k">class</span> <span class="nc">ApproxDistinct</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="ApproxDistinct-3348"><a href="#ApproxDistinct-3348"><span class="linenos">3348</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;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ApproxDistinct-3474"><a href="#ApproxDistinct-3474"><span class="linenos">3474</span></a><span class="k">class</span> <span class="nc">ApproxDistinct</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="ApproxDistinct-3475"><a href="#ApproxDistinct-3475"><span class="linenos">3475</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;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -31452,6 +32496,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ApproxDistinct.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ApproxDistinct.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ApproxDistinct.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ApproxDistinct.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ApproxDistinct.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ApproxDistinct.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ApproxDistinct.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ApproxDistinct.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ApproxDistinct.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ApproxDistinct.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31468,9 +32519,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Array"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Array-3351"><a href="#Array-3351"><span class="linenos">3351</span></a><span class="k">class</span> <span class="nc">Array</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Array-3352"><a href="#Array-3352"><span class="linenos">3352</span></a> <span class="n">arg_types</span> <span class="o">=</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="Array-3353"><a href="#Array-3353"><span class="linenos">3353</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Array-3478"><a href="#Array-3478"><span class="linenos">3478</span></a><span class="k">class</span> <span class="nc">Array</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Array-3479"><a href="#Array-3479"><span class="linenos">3479</span></a> <span class="n">arg_types</span> <span class="o">=</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="Array-3480"><a href="#Array-3480"><span class="linenos">3480</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -31530,6 +32581,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Array.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Array.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Array.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Array.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Array.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Array.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Array.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Array.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Array.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Array.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31546,8 +32604,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ToChar"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ToChar-3357"><a href="#ToChar-3357"><span class="linenos">3357</span></a><span class="k">class</span> <span class="nc">ToChar</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ToChar-3358"><a href="#ToChar-3358"><span class="linenos">3358</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ToChar-3484"><a href="#ToChar-3484"><span class="linenos">3484</span></a><span class="k">class</span> <span class="nc">ToChar</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ToChar-3485"><a href="#ToChar-3485"><span class="linenos">3485</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -31607,6 +32665,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ToChar.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ToChar.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ToChar.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ToChar.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ToChar.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ToChar.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ToChar.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ToChar.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ToChar.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ToChar.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31623,8 +32688,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#GenerateSeries"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GenerateSeries-3361"><a href="#GenerateSeries-3361"><span class="linenos">3361</span></a><span class="k">class</span> <span class="nc">GenerateSeries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="GenerateSeries-3362"><a href="#GenerateSeries-3362"><span class="linenos">3362</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GenerateSeries-3488"><a href="#GenerateSeries-3488"><span class="linenos">3488</span></a><span class="k">class</span> <span class="nc">GenerateSeries</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="GenerateSeries-3489"><a href="#GenerateSeries-3489"><span class="linenos">3489</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -31684,6 +32749,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="GenerateSeries.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="GenerateSeries.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="GenerateSeries.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="GenerateSeries.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="GenerateSeries.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="GenerateSeries.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="GenerateSeries.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="GenerateSeries.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="GenerateSeries.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="GenerateSeries.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31700,8 +32772,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayAgg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayAgg-3365"><a href="#ArrayAgg-3365"><span class="linenos">3365</span></a><span class="k">class</span> <span class="nc">ArrayAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="ArrayAgg-3366"><a href="#ArrayAgg-3366"><span class="linenos">3366</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayAgg-3492"><a href="#ArrayAgg-3492"><span class="linenos">3492</span></a><span class="k">class</span> <span class="nc">ArrayAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="ArrayAgg-3493"><a href="#ArrayAgg-3493"><span class="linenos">3493</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -31761,6 +32833,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayAgg.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayAgg.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayAgg.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayAgg.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayAgg.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayAgg.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayAgg.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayAgg.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayAgg.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayAgg.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31777,8 +32856,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayAll"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayAll-3369"><a href="#ArrayAll-3369"><span class="linenos">3369</span></a><span class="k">class</span> <span class="nc">ArrayAll</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArrayAll-3370"><a href="#ArrayAll-3370"><span class="linenos">3370</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayAll-3496"><a href="#ArrayAll-3496"><span class="linenos">3496</span></a><span class="k">class</span> <span class="nc">ArrayAll</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArrayAll-3497"><a href="#ArrayAll-3497"><span class="linenos">3497</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></pre></div>
@@ -31838,6 +32917,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayAll.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayAll.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayAll.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayAll.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayAll.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayAll.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayAll.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayAll.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayAll.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayAll.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31854,8 +32940,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayAny"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayAny-3373"><a href="#ArrayAny-3373"><span class="linenos">3373</span></a><span class="k">class</span> <span class="nc">ArrayAny</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArrayAny-3374"><a href="#ArrayAny-3374"><span class="linenos">3374</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayAny-3500"><a href="#ArrayAny-3500"><span class="linenos">3500</span></a><span class="k">class</span> <span class="nc">ArrayAny</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArrayAny-3501"><a href="#ArrayAny-3501"><span class="linenos">3501</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></pre></div>
@@ -31915,6 +33001,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayAny.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayAny.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayAny.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayAny.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayAny.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayAny.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayAny.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayAny.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayAny.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayAny.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -31931,9 +33024,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayConcat"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayConcat-3377"><a href="#ArrayConcat-3377"><span class="linenos">3377</span></a><span class="k">class</span> <span class="nc">ArrayConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArrayConcat-3378"><a href="#ArrayConcat-3378"><span class="linenos">3378</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="ArrayConcat-3379"><a href="#ArrayConcat-3379"><span class="linenos">3379</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayConcat-3504"><a href="#ArrayConcat-3504"><span class="linenos">3504</span></a><span class="k">class</span> <span class="nc">ArrayConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArrayConcat-3505"><a href="#ArrayConcat-3505"><span class="linenos">3505</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="ArrayConcat-3506"><a href="#ArrayConcat-3506"><span class="linenos">3506</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -31993,6 +33086,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayConcat.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayConcat.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayConcat.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayConcat.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayConcat.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayConcat.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayConcat.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayConcat.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayConcat.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayConcat.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32009,8 +33109,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayContains"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayContains-3382"><a href="#ArrayContains-3382"><span class="linenos">3382</span></a><span class="k">class</span> <span class="nc">ArrayContains</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="ArrayContains-3383"><a href="#ArrayContains-3383"><span class="linenos">3383</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayContains-3509"><a href="#ArrayContains-3509"><span class="linenos">3509</span></a><span class="k">class</span> <span class="nc">ArrayContains</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="ArrayContains-3510"><a href="#ArrayContains-3510"><span class="linenos">3510</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -32070,6 +33170,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayContains.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayContains.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayContains.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayContains.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayContains.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayContains.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayContains.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayContains.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayContains.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayContains.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32086,8 +33193,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayContained"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayContained-3386"><a href="#ArrayContained-3386"><span class="linenos">3386</span></a><span class="k">class</span> <span class="nc">ArrayContained</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="ArrayContained-3387"><a href="#ArrayContained-3387"><span class="linenos">3387</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayContained-3513"><a href="#ArrayContained-3513"><span class="linenos">3513</span></a><span class="k">class</span> <span class="nc">ArrayContained</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="ArrayContained-3514"><a href="#ArrayContained-3514"><span class="linenos">3514</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -32136,6 +33243,19 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayContained.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="ArrayContained.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="ArrayContained.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="ArrayContained.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayContained.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayContained.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayContained.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayContained.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayContained.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayContained.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayContained.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -32150,9 +33270,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayFilter"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayFilter-3390"><a href="#ArrayFilter-3390"><span class="linenos">3390</span></a><span class="k">class</span> <span class="nc">ArrayFilter</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArrayFilter-3391"><a href="#ArrayFilter-3391"><span class="linenos">3391</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><span id="ArrayFilter-3392"><a href="#ArrayFilter-3392"><span class="linenos">3392</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;FILTER&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY_FILTER&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayFilter-3517"><a href="#ArrayFilter-3517"><span class="linenos">3517</span></a><span class="k">class</span> <span class="nc">ArrayFilter</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArrayFilter-3518"><a href="#ArrayFilter-3518"><span class="linenos">3518</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><span id="ArrayFilter-3519"><a href="#ArrayFilter-3519"><span class="linenos">3519</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;FILTER&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY_FILTER&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -32212,6 +33332,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayFilter.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayFilter.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayFilter.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayFilter.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayFilter.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayFilter.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayFilter.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayFilter.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayFilter.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayFilter.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32228,8 +33355,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayJoin"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayJoin-3395"><a href="#ArrayJoin-3395"><span class="linenos">3395</span></a><span class="k">class</span> <span class="nc">ArrayJoin</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArrayJoin-3396"><a href="#ArrayJoin-3396"><span class="linenos">3396</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&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayJoin-3522"><a href="#ArrayJoin-3522"><span class="linenos">3522</span></a><span class="k">class</span> <span class="nc">ArrayJoin</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArrayJoin-3523"><a href="#ArrayJoin-3523"><span class="linenos">3523</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&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -32289,6 +33416,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayJoin.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayJoin.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayJoin.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayJoin.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayJoin.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayJoin.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayJoin.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayJoin.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayJoin.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayJoin.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32305,8 +33439,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArraySize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArraySize-3399"><a href="#ArraySize-3399"><span class="linenos">3399</span></a><span class="k">class</span> <span class="nc">ArraySize</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArraySize-3400"><a href="#ArraySize-3400"><span class="linenos">3400</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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArraySize-3526"><a href="#ArraySize-3526"><span class="linenos">3526</span></a><span class="k">class</span> <span class="nc">ArraySize</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArraySize-3527"><a href="#ArraySize-3527"><span class="linenos">3527</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -32366,6 +33500,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArraySize.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArraySize.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArraySize.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArraySize.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArraySize.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArraySize.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArraySize.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArraySize.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArraySize.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArraySize.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32382,8 +33523,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArraySort"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArraySort-3403"><a href="#ArraySort-3403"><span class="linenos">3403</span></a><span class="k">class</span> <span class="nc">ArraySort</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArraySort-3404"><a href="#ArraySort-3404"><span class="linenos">3404</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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArraySort-3530"><a href="#ArraySort-3530"><span class="linenos">3530</span></a><span class="k">class</span> <span class="nc">ArraySort</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArraySort-3531"><a href="#ArraySort-3531"><span class="linenos">3531</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -32443,6 +33584,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArraySort.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArraySort.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArraySort.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArraySort.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArraySort.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArraySort.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArraySort.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArraySort.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArraySort.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArraySort.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32459,8 +33607,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArraySum"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArraySum-3407"><a href="#ArraySum-3407"><span class="linenos">3407</span></a><span class="k">class</span> <span class="nc">ArraySum</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ArraySum-3408"><a href="#ArraySum-3408"><span class="linenos">3408</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArraySum-3534"><a href="#ArraySum-3534"><span class="linenos">3534</span></a><span class="k">class</span> <span class="nc">ArraySum</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ArraySum-3535"><a href="#ArraySum-3535"><span class="linenos">3535</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -32520,6 +33668,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArraySum.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArraySum.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArraySum.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArraySum.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArraySum.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArraySum.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArraySum.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArraySum.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArraySum.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArraySum.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32536,8 +33691,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ArrayUnionAgg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayUnionAgg-3411"><a href="#ArrayUnionAgg-3411"><span class="linenos">3411</span></a><span class="k">class</span> <span class="nc">ArrayUnionAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="ArrayUnionAgg-3412"><a href="#ArrayUnionAgg-3412"><span class="linenos">3412</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ArrayUnionAgg-3538"><a href="#ArrayUnionAgg-3538"><span class="linenos">3538</span></a><span class="k">class</span> <span class="nc">ArrayUnionAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="ArrayUnionAgg-3539"><a href="#ArrayUnionAgg-3539"><span class="linenos">3539</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -32597,6 +33752,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ArrayUnionAgg.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ArrayUnionAgg.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ArrayUnionAgg.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ArrayUnionAgg.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ArrayUnionAgg.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ArrayUnionAgg.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ArrayUnionAgg.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ArrayUnionAgg.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ArrayUnionAgg.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ArrayUnionAgg.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32613,8 +33775,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Avg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Avg-3415"><a href="#Avg-3415"><span class="linenos">3415</span></a><span class="k">class</span> <span class="nc">Avg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Avg-3416"><a href="#Avg-3416"><span class="linenos">3416</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Avg-3542"><a href="#Avg-3542"><span class="linenos">3542</span></a><span class="k">class</span> <span class="nc">Avg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Avg-3543"><a href="#Avg-3543"><span class="linenos">3543</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -32674,6 +33836,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Avg.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Avg.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Avg.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Avg.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Avg.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Avg.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Avg.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Avg.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Avg.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Avg.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32690,8 +33859,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#AnyValue"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="AnyValue-3419"><a href="#AnyValue-3419"><span class="linenos">3419</span></a><span class="k">class</span> <span class="nc">AnyValue</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="AnyValue-3420"><a href="#AnyValue-3420"><span class="linenos">3420</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="AnyValue-3546"><a href="#AnyValue-3546"><span class="linenos">3546</span></a><span class="k">class</span> <span class="nc">AnyValue</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="AnyValue-3547"><a href="#AnyValue-3547"><span class="linenos">3547</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -32751,6 +33920,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="AnyValue.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="AnyValue.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="AnyValue.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="AnyValue.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="AnyValue.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="AnyValue.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="AnyValue.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="AnyValue.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="AnyValue.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="AnyValue.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32767,13 +33943,77 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Case"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Case-3423"><a href="#Case-3423"><span class="linenos">3423</span></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Case-3424"><a href="#Case-3424"><span class="linenos">3424</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;ifs&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Case-3550"><a href="#Case-3550"><span class="linenos">3550</span></a><span class="k">class</span> <span class="nc">Case</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Case-3551"><a href="#Case-3551"><span class="linenos">3551</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;ifs&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Case-3552"><a href="#Case-3552"><span class="linenos">3552</span></a>
+</span><span id="Case-3553"><a href="#Case-3553"><span class="linenos">3553</span></a> <span class="k">def</span> <span class="nf">when</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">then</span><span class="p">:</span> <span class="n">ExpOrStr</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="n">Case</span><span class="p">:</span>
+</span><span id="Case-3554"><a href="#Case-3554"><span class="linenos">3554</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Case-3555"><a href="#Case-3555"><span class="linenos">3555</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Case-3556"><a href="#Case-3556"><span class="linenos">3556</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
+</span><span id="Case-3557"><a href="#Case-3557"><span class="linenos">3557</span></a> <span class="n">If</span><span class="p">(</span>
+</span><span id="Case-3558"><a href="#Case-3558"><span class="linenos">3558</span></a> <span class="n">this</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Case-3559"><a href="#Case-3559"><span class="linenos">3559</span></a> <span class="n">true</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">then</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Case-3560"><a href="#Case-3560"><span class="linenos">3560</span></a> <span class="p">),</span>
+</span><span id="Case-3561"><a href="#Case-3561"><span class="linenos">3561</span></a> <span class="p">)</span>
+</span><span id="Case-3562"><a href="#Case-3562"><span class="linenos">3562</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span><span id="Case-3563"><a href="#Case-3563"><span class="linenos">3563</span></a>
+</span><span id="Case-3564"><a href="#Case-3564"><span class="linenos">3564</span></a> <span class="k">def</span> <span class="nf">else_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">:</span> <span class="n">ExpOrStr</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="n">Case</span><span class="p">:</span>
+</span><span id="Case-3565"><a href="#Case-3565"><span class="linenos">3565</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Case-3566"><a href="#Case-3566"><span class="linenos">3566</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">))</span>
+</span><span id="Case-3567"><a href="#Case-3567"><span class="linenos">3567</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span></pre></div>
+
+
+
+
+ <div id="Case.when" class="classattr">
+ <input id="Case.when-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">when</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">condition</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span>,</span><span class="param"> <span class="n">then</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span>,</span><span class="param"> <span class="n">copy</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">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Case">sqlglot.expressions.Case</a></span>:</span></span>
+
+ <label class="view-source-button" for="Case.when-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Case.when"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Case.when-3553"><a href="#Case.when-3553"><span class="linenos">3553</span></a> <span class="k">def</span> <span class="nf">when</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">then</span><span class="p">:</span> <span class="n">ExpOrStr</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="n">Case</span><span class="p">:</span>
+</span><span id="Case.when-3554"><a href="#Case.when-3554"><span class="linenos">3554</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Case.when-3555"><a href="#Case.when-3555"><span class="linenos">3555</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Case.when-3556"><a href="#Case.when-3556"><span class="linenos">3556</span></a> <span class="s2">&quot;ifs&quot;</span><span class="p">,</span>
+</span><span id="Case.when-3557"><a href="#Case.when-3557"><span class="linenos">3557</span></a> <span class="n">If</span><span class="p">(</span>
+</span><span id="Case.when-3558"><a href="#Case.when-3558"><span class="linenos">3558</span></a> <span class="n">this</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Case.when-3559"><a href="#Case.when-3559"><span class="linenos">3559</span></a> <span class="n">true</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">then</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="Case.when-3560"><a href="#Case.when-3560"><span class="linenos">3560</span></a> <span class="p">),</span>
+</span><span id="Case.when-3561"><a href="#Case.when-3561"><span class="linenos">3561</span></a> <span class="p">)</span>
+</span><span id="Case.when-3562"><a href="#Case.when-3562"><span class="linenos">3562</span></a> <span class="k">return</span> <span class="n">instance</span>
+</span></pre></div>
+
+
+
+
+ </div>
+ <div id="Case.else_" class="classattr">
+ <input id="Case.else_-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">else_</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">condition</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"><a href="#Expression">sqlglot.expressions.Expression</a></span><span class="p">]</span>,</span><span class="param"> <span class="n">copy</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">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Case">sqlglot.expressions.Case</a></span>:</span></span>
+
+ <label class="view-source-button" for="Case.else_-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Case.else_"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Case.else_-3564"><a href="#Case.else_-3564"><span class="linenos">3564</span></a> <span class="k">def</span> <span class="nf">else_</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">condition</span><span class="p">:</span> <span class="n">ExpOrStr</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="n">Case</span><span class="p">:</span>
+</span><span id="Case.else_-3565"><a href="#Case.else_-3565"><span class="linenos">3565</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="Case.else_-3566"><a href="#Case.else_-3566"><span class="linenos">3566</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">))</span>
+</span><span id="Case.else_-3567"><a href="#Case.else_-3567"><span class="linenos">3567</span></a> <span class="k">return</span> <span class="n">instance</span>
</span></pre></div>
+ </div>
<div class="inherited">
<h5>Inherited Members</h5>
<dl>
@@ -32828,6 +34068,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Case.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Case.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Case.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Case.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Case.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Case.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Case.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Case.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Case.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Case.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32844,23 +34091,23 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Cast"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Cast-3427"><a href="#Cast-3427"><span class="linenos">3427</span></a><span class="k">class</span> <span class="nc">Cast</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Cast-3428"><a href="#Cast-3428"><span class="linenos">3428</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;to&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="Cast-3429"><a href="#Cast-3429"><span class="linenos">3429</span></a>
-</span><span id="Cast-3430"><a href="#Cast-3430"><span class="linenos">3430</span></a> <span class="nd">@property</span>
-</span><span id="Cast-3431"><a href="#Cast-3431"><span class="linenos">3431</span></a> <span class="k">def</span> <span class="nf">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="Cast-3432"><a href="#Cast-3432"><span class="linenos">3432</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Cast-3433"><a href="#Cast-3433"><span class="linenos">3433</span></a>
-</span><span id="Cast-3434"><a href="#Cast-3434"><span class="linenos">3434</span></a> <span class="nd">@property</span>
-</span><span id="Cast-3435"><a href="#Cast-3435"><span class="linenos">3435</span></a> <span class="k">def</span> <span class="nf">to</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Cast-3436"><a href="#Cast-3436"><span class="linenos">3436</span></a> <span class="k">return</span> <span class="bp">self</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="Cast-3437"><a href="#Cast-3437"><span class="linenos">3437</span></a>
-</span><span id="Cast-3438"><a href="#Cast-3438"><span class="linenos">3438</span></a> <span class="nd">@property</span>
-</span><span id="Cast-3439"><a href="#Cast-3439"><span class="linenos">3439</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><span id="Cast-3440"><a href="#Cast-3440"><span class="linenos">3440</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Cast-3441"><a href="#Cast-3441"><span class="linenos">3441</span></a>
-</span><span id="Cast-3442"><a href="#Cast-3442"><span class="linenos">3442</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
-</span><span id="Cast-3443"><a href="#Cast-3443"><span class="linenos">3443</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Cast-3570"><a href="#Cast-3570"><span class="linenos">3570</span></a><span class="k">class</span> <span class="nc">Cast</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Cast-3571"><a href="#Cast-3571"><span class="linenos">3571</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;to&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="Cast-3572"><a href="#Cast-3572"><span class="linenos">3572</span></a>
+</span><span id="Cast-3573"><a href="#Cast-3573"><span class="linenos">3573</span></a> <span class="nd">@property</span>
+</span><span id="Cast-3574"><a href="#Cast-3574"><span class="linenos">3574</span></a> <span class="k">def</span> <span class="nf">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="Cast-3575"><a href="#Cast-3575"><span class="linenos">3575</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Cast-3576"><a href="#Cast-3576"><span class="linenos">3576</span></a>
+</span><span id="Cast-3577"><a href="#Cast-3577"><span class="linenos">3577</span></a> <span class="nd">@property</span>
+</span><span id="Cast-3578"><a href="#Cast-3578"><span class="linenos">3578</span></a> <span class="k">def</span> <span class="nf">to</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Cast-3579"><a href="#Cast-3579"><span class="linenos">3579</span></a> <span class="k">return</span> <span class="bp">self</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="Cast-3580"><a href="#Cast-3580"><span class="linenos">3580</span></a>
+</span><span id="Cast-3581"><a href="#Cast-3581"><span class="linenos">3581</span></a> <span class="nd">@property</span>
+</span><span id="Cast-3582"><a href="#Cast-3582"><span class="linenos">3582</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><span id="Cast-3583"><a href="#Cast-3583"><span class="linenos">3583</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Cast-3584"><a href="#Cast-3584"><span class="linenos">3584</span></a>
+</span><span id="Cast-3585"><a href="#Cast-3585"><span class="linenos">3585</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
+</span><span id="Cast-3586"><a href="#Cast-3586"><span class="linenos">3586</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span>
</span></pre></div>
@@ -32907,8 +34154,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Cast.is_type"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Cast.is_type-3442"><a href="#Cast.is_type-3442"><span class="linenos">3442</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
-</span><span id="Cast.is_type-3443"><a href="#Cast.is_type-3443"><span class="linenos">3443</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Cast.is_type-3585"><a href="#Cast.is_type-3585"><span class="linenos">3585</span></a> <span class="k">def</span> <span class="nf">is_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dtype</span><span class="p">:</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="nb">bool</span><span class="p">:</span>
+</span><span id="Cast.is_type-3586"><a href="#Cast.is_type-3586"><span class="linenos">3586</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">dtype</span><span class="p">)</span>
</span></pre></div>
@@ -32968,6 +34215,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Cast.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Cast.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Cast.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Cast.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Cast.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Cast.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Cast.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Cast.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Cast.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Cast.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -32984,8 +34238,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Collate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Collate-3446"><a href="#Collate-3446"><span class="linenos">3446</span></a><span class="k">class</span> <span class="nc">Collate</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="Collate-3447"><a href="#Collate-3447"><span class="linenos">3447</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Collate-3589"><a href="#Collate-3589"><span class="linenos">3589</span></a><span class="k">class</span> <span class="nc">Collate</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="Collate-3590"><a href="#Collate-3590"><span class="linenos">3590</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -33034,6 +34288,19 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Collate.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="Collate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="Collate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="Collate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Collate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Collate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Collate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Collate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Collate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Collate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Collate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -33048,8 +34315,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TryCast"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TryCast-3450"><a href="#TryCast-3450"><span class="linenos">3450</span></a><span class="k">class</span> <span class="nc">TryCast</span><span class="p">(</span><span class="n">Cast</span><span class="p">):</span>
-</span><span id="TryCast-3451"><a href="#TryCast-3451"><span class="linenos">3451</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TryCast-3593"><a href="#TryCast-3593"><span class="linenos">3593</span></a><span class="k">class</span> <span class="nc">TryCast</span><span class="p">(</span><span class="n">Cast</span><span class="p">):</span>
+</span><span id="TryCast-3594"><a href="#TryCast-3594"><span class="linenos">3594</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -33113,6 +34380,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TryCast.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TryCast.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TryCast.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TryCast.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TryCast.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TryCast.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TryCast.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TryCast.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TryCast.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TryCast.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33129,9 +34403,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Ceil"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Ceil-3454"><a href="#Ceil-3454"><span class="linenos">3454</span></a><span class="k">class</span> <span class="nc">Ceil</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Ceil-3455"><a href="#Ceil-3455"><span class="linenos">3455</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Ceil-3456"><a href="#Ceil-3456"><span class="linenos">3456</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CEIL&quot;</span><span class="p">,</span> <span class="s2">&quot;CEILING&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Ceil-3597"><a href="#Ceil-3597"><span class="linenos">3597</span></a><span class="k">class</span> <span class="nc">Ceil</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Ceil-3598"><a href="#Ceil-3598"><span class="linenos">3598</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Ceil-3599"><a href="#Ceil-3599"><span class="linenos">3599</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CEIL&quot;</span><span class="p">,</span> <span class="s2">&quot;CEILING&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -33191,6 +34465,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Ceil.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Ceil.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Ceil.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Ceil.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Ceil.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Ceil.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Ceil.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Ceil.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Ceil.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Ceil.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33207,9 +34488,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Coalesce"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Coalesce-3459"><a href="#Coalesce-3459"><span class="linenos">3459</span></a><span class="k">class</span> <span class="nc">Coalesce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Coalesce-3460"><a href="#Coalesce-3460"><span class="linenos">3460</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Coalesce-3461"><a href="#Coalesce-3461"><span class="linenos">3461</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Coalesce-3602"><a href="#Coalesce-3602"><span class="linenos">3602</span></a><span class="k">class</span> <span class="nc">Coalesce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Coalesce-3603"><a href="#Coalesce-3603"><span class="linenos">3603</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Coalesce-3604"><a href="#Coalesce-3604"><span class="linenos">3604</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -33269,6 +34550,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Coalesce.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Coalesce.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Coalesce.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Coalesce.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Coalesce.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Coalesce.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Coalesce.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Coalesce.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Coalesce.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Coalesce.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33285,9 +34573,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Concat"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Concat-3464"><a href="#Concat-3464"><span class="linenos">3464</span></a><span class="k">class</span> <span class="nc">Concat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Concat-3465"><a href="#Concat-3465"><span class="linenos">3465</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="Concat-3466"><a href="#Concat-3466"><span class="linenos">3466</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Concat-3607"><a href="#Concat-3607"><span class="linenos">3607</span></a><span class="k">class</span> <span class="nc">Concat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Concat-3608"><a href="#Concat-3608"><span class="linenos">3608</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="Concat-3609"><a href="#Concat-3609"><span class="linenos">3609</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -33347,6 +34635,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Concat.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Concat.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Concat.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Concat.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Concat.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Concat.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Concat.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Concat.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Concat.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Concat.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33363,8 +34658,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ConcatWs"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ConcatWs-3469"><a href="#ConcatWs-3469"><span class="linenos">3469</span></a><span class="k">class</span> <span class="nc">ConcatWs</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
-</span><span id="ConcatWs-3470"><a href="#ConcatWs-3470"><span class="linenos">3470</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ConcatWs-3612"><a href="#ConcatWs-3612"><span class="linenos">3612</span></a><span class="k">class</span> <span class="nc">ConcatWs</span><span class="p">(</span><span class="n">Concat</span><span class="p">):</span>
+</span><span id="ConcatWs-3613"><a href="#ConcatWs-3613"><span class="linenos">3613</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -33424,6 +34719,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ConcatWs.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ConcatWs.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ConcatWs.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ConcatWs.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ConcatWs.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ConcatWs.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ConcatWs.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ConcatWs.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ConcatWs.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ConcatWs.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33440,8 +34742,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Count"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Count-3473"><a href="#Count-3473"><span class="linenos">3473</span></a><span class="k">class</span> <span class="nc">Count</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Count-3474"><a href="#Count-3474"><span class="linenos">3474</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Count-3616"><a href="#Count-3616"><span class="linenos">3616</span></a><span class="k">class</span> <span class="nc">Count</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Count-3617"><a href="#Count-3617"><span class="linenos">3617</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></pre></div>
@@ -33501,6 +34803,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Count.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Count.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Count.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Count.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Count.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Count.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Count.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Count.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Count.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Count.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33517,8 +34826,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#CountIf"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CountIf-3477"><a href="#CountIf-3477"><span class="linenos">3477</span></a><span class="k">class</span> <span class="nc">CountIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="CountIf-3478"><a href="#CountIf-3478"><span class="linenos">3478</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CountIf-3620"><a href="#CountIf-3620"><span class="linenos">3620</span></a><span class="k">class</span> <span class="nc">CountIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="CountIf-3621"><a href="#CountIf-3621"><span class="linenos">3621</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -33578,6 +34887,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="CountIf.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="CountIf.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="CountIf.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="CountIf.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="CountIf.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="CountIf.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="CountIf.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="CountIf.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="CountIf.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="CountIf.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33594,8 +34910,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#CurrentDate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentDate-3481"><a href="#CurrentDate-3481"><span class="linenos">3481</span></a><span class="k">class</span> <span class="nc">CurrentDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="CurrentDate-3482"><a href="#CurrentDate-3482"><span class="linenos">3482</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentDate-3624"><a href="#CurrentDate-3624"><span class="linenos">3624</span></a><span class="k">class</span> <span class="nc">CurrentDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="CurrentDate-3625"><a href="#CurrentDate-3625"><span class="linenos">3625</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></pre></div>
@@ -33655,6 +34971,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="CurrentDate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="CurrentDate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="CurrentDate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="CurrentDate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="CurrentDate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="CurrentDate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="CurrentDate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="CurrentDate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="CurrentDate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="CurrentDate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33671,8 +34994,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#CurrentDatetime"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentDatetime-3485"><a href="#CurrentDatetime-3485"><span class="linenos">3485</span></a><span class="k">class</span> <span class="nc">CurrentDatetime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="CurrentDatetime-3486"><a href="#CurrentDatetime-3486"><span class="linenos">3486</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentDatetime-3628"><a href="#CurrentDatetime-3628"><span class="linenos">3628</span></a><span class="k">class</span> <span class="nc">CurrentDatetime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="CurrentDatetime-3629"><a href="#CurrentDatetime-3629"><span class="linenos">3629</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></pre></div>
@@ -33732,6 +35055,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="CurrentDatetime.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="CurrentDatetime.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="CurrentDatetime.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="CurrentDatetime.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="CurrentDatetime.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="CurrentDatetime.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="CurrentDatetime.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="CurrentDatetime.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="CurrentDatetime.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="CurrentDatetime.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33748,8 +35078,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#CurrentTime"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentTime-3489"><a href="#CurrentTime-3489"><span class="linenos">3489</span></a><span class="k">class</span> <span class="nc">CurrentTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="CurrentTime-3490"><a href="#CurrentTime-3490"><span class="linenos">3490</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentTime-3632"><a href="#CurrentTime-3632"><span class="linenos">3632</span></a><span class="k">class</span> <span class="nc">CurrentTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="CurrentTime-3633"><a href="#CurrentTime-3633"><span class="linenos">3633</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></pre></div>
@@ -33809,6 +35139,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="CurrentTime.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="CurrentTime.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="CurrentTime.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="CurrentTime.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="CurrentTime.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="CurrentTime.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="CurrentTime.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="CurrentTime.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="CurrentTime.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="CurrentTime.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33825,8 +35162,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#CurrentTimestamp"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentTimestamp-3493"><a href="#CurrentTimestamp-3493"><span class="linenos">3493</span></a><span class="k">class</span> <span class="nc">CurrentTimestamp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="CurrentTimestamp-3494"><a href="#CurrentTimestamp-3494"><span class="linenos">3494</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentTimestamp-3636"><a href="#CurrentTimestamp-3636"><span class="linenos">3636</span></a><span class="k">class</span> <span class="nc">CurrentTimestamp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="CurrentTimestamp-3637"><a href="#CurrentTimestamp-3637"><span class="linenos">3637</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></pre></div>
@@ -33886,6 +35223,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="CurrentTimestamp.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="CurrentTimestamp.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="CurrentTimestamp.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="CurrentTimestamp.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="CurrentTimestamp.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="CurrentTimestamp.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="CurrentTimestamp.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="CurrentTimestamp.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="CurrentTimestamp.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="CurrentTimestamp.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33902,8 +35246,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#CurrentUser"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentUser-3497"><a href="#CurrentUser-3497"><span class="linenos">3497</span></a><span class="k">class</span> <span class="nc">CurrentUser</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="CurrentUser-3498"><a href="#CurrentUser-3498"><span class="linenos">3498</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="CurrentUser-3640"><a href="#CurrentUser-3640"><span class="linenos">3640</span></a><span class="k">class</span> <span class="nc">CurrentUser</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="CurrentUser-3641"><a href="#CurrentUser-3641"><span class="linenos">3641</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></pre></div>
@@ -33963,6 +35307,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="CurrentUser.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="CurrentUser.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="CurrentUser.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="CurrentUser.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="CurrentUser.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="CurrentUser.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="CurrentUser.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="CurrentUser.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="CurrentUser.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="CurrentUser.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -33979,8 +35330,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateAdd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateAdd-3501"><a href="#DateAdd-3501"><span class="linenos">3501</span></a><span class="k">class</span> <span class="nc">DateAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="DateAdd-3502"><a href="#DateAdd-3502"><span class="linenos">3502</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateAdd-3644"><a href="#DateAdd-3644"><span class="linenos">3644</span></a><span class="k">class</span> <span class="nc">DateAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="DateAdd-3645"><a href="#DateAdd-3645"><span class="linenos">3645</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34004,6 +35355,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateAdd.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateAdd.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateAdd.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateAdd.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateAdd.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateAdd.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateAdd.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateAdd.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateAdd.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateAdd.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -34059,8 +35417,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateSub"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateSub-3505"><a href="#DateSub-3505"><span class="linenos">3505</span></a><span class="k">class</span> <span class="nc">DateSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="DateSub-3506"><a href="#DateSub-3506"><span class="linenos">3506</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateSub-3648"><a href="#DateSub-3648"><span class="linenos">3648</span></a><span class="k">class</span> <span class="nc">DateSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="DateSub-3649"><a href="#DateSub-3649"><span class="linenos">3649</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34084,6 +35442,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateSub.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateSub.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateSub.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateSub.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateSub.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateSub.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateSub.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateSub.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateSub.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateSub.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -34139,9 +35504,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateDiff"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateDiff-3509"><a href="#DateDiff-3509"><span class="linenos">3509</span></a><span class="k">class</span> <span class="nc">DateDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="DateDiff-3510"><a href="#DateDiff-3510"><span class="linenos">3510</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">]</span>
-</span><span id="DateDiff-3511"><a href="#DateDiff-3511"><span class="linenos">3511</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateDiff-3652"><a href="#DateDiff-3652"><span class="linenos">3652</span></a><span class="k">class</span> <span class="nc">DateDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="DateDiff-3653"><a href="#DateDiff-3653"><span class="linenos">3653</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="s2">&quot;DATE_DIFF&quot;</span><span class="p">]</span>
+</span><span id="DateDiff-3654"><a href="#DateDiff-3654"><span class="linenos">3654</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34165,6 +35530,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateDiff.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateDiff.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateDiff.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateDiff.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateDiff.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateDiff.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateDiff.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateDiff.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateDiff.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateDiff.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -34220,8 +35592,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateTrunc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateTrunc-3514"><a href="#DateTrunc-3514"><span class="linenos">3514</span></a><span class="k">class</span> <span class="nc">DateTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DateTrunc-3515"><a href="#DateTrunc-3515"><span class="linenos">3515</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">True</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;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateTrunc-3657"><a href="#DateTrunc-3657"><span class="linenos">3657</span></a><span class="k">class</span> <span class="nc">DateTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DateTrunc-3658"><a href="#DateTrunc-3658"><span class="linenos">3658</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;unit&quot;</span><span class="p">:</span> <span class="kc">True</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;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34281,6 +35653,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateTrunc.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateTrunc.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateTrunc.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateTrunc.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateTrunc.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateTrunc.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateTrunc.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateTrunc.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateTrunc.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateTrunc.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -34297,8 +35676,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DatetimeAdd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeAdd-3518"><a href="#DatetimeAdd-3518"><span class="linenos">3518</span></a><span class="k">class</span> <span class="nc">DatetimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="DatetimeAdd-3519"><a href="#DatetimeAdd-3519"><span class="linenos">3519</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeAdd-3661"><a href="#DatetimeAdd-3661"><span class="linenos">3661</span></a><span class="k">class</span> <span class="nc">DatetimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="DatetimeAdd-3662"><a href="#DatetimeAdd-3662"><span class="linenos">3662</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34322,6 +35701,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DatetimeAdd.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DatetimeAdd.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DatetimeAdd.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DatetimeAdd.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DatetimeAdd.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DatetimeAdd.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DatetimeAdd.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DatetimeAdd.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DatetimeAdd.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DatetimeAdd.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -34377,8 +35763,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DatetimeSub"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeSub-3522"><a href="#DatetimeSub-3522"><span class="linenos">3522</span></a><span class="k">class</span> <span class="nc">DatetimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="DatetimeSub-3523"><a href="#DatetimeSub-3523"><span class="linenos">3523</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeSub-3665"><a href="#DatetimeSub-3665"><span class="linenos">3665</span></a><span class="k">class</span> <span class="nc">DatetimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="DatetimeSub-3666"><a href="#DatetimeSub-3666"><span class="linenos">3666</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34402,6 +35788,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DatetimeSub.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DatetimeSub.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DatetimeSub.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DatetimeSub.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DatetimeSub.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DatetimeSub.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DatetimeSub.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DatetimeSub.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DatetimeSub.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DatetimeSub.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -34457,8 +35850,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DatetimeDiff"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeDiff-3526"><a href="#DatetimeDiff-3526"><span class="linenos">3526</span></a><span class="k">class</span> <span class="nc">DatetimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="DatetimeDiff-3527"><a href="#DatetimeDiff-3527"><span class="linenos">3527</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeDiff-3669"><a href="#DatetimeDiff-3669"><span class="linenos">3669</span></a><span class="k">class</span> <span class="nc">DatetimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="DatetimeDiff-3670"><a href="#DatetimeDiff-3670"><span class="linenos">3670</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34482,6 +35875,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DatetimeDiff.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DatetimeDiff.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DatetimeDiff.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DatetimeDiff.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DatetimeDiff.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DatetimeDiff.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DatetimeDiff.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DatetimeDiff.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DatetimeDiff.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DatetimeDiff.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -34537,8 +35937,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DatetimeTrunc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeTrunc-3530"><a href="#DatetimeTrunc-3530"><span class="linenos">3530</span></a><span class="k">class</span> <span class="nc">DatetimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="DatetimeTrunc-3531"><a href="#DatetimeTrunc-3531"><span class="linenos">3531</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DatetimeTrunc-3673"><a href="#DatetimeTrunc-3673"><span class="linenos">3673</span></a><span class="k">class</span> <span class="nc">DatetimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="DatetimeTrunc-3674"><a href="#DatetimeTrunc-3674"><span class="linenos">3674</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -34562,6 +35962,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DatetimeTrunc.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DatetimeTrunc.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DatetimeTrunc.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DatetimeTrunc.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DatetimeTrunc.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DatetimeTrunc.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DatetimeTrunc.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DatetimeTrunc.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DatetimeTrunc.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DatetimeTrunc.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -34617,8 +36024,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DayOfWeek"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DayOfWeek-3534"><a href="#DayOfWeek-3534"><span class="linenos">3534</span></a><span class="k">class</span> <span class="nc">DayOfWeek</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DayOfWeek-3535"><a href="#DayOfWeek-3535"><span class="linenos">3535</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_WEEK&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DayOfWeek-3677"><a href="#DayOfWeek-3677"><span class="linenos">3677</span></a><span class="k">class</span> <span class="nc">DayOfWeek</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DayOfWeek-3678"><a href="#DayOfWeek-3678"><span class="linenos">3678</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_WEEK&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -34678,6 +36085,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DayOfWeek.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DayOfWeek.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DayOfWeek.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DayOfWeek.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DayOfWeek.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DayOfWeek.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DayOfWeek.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DayOfWeek.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DayOfWeek.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DayOfWeek.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -34694,8 +36108,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DayOfMonth"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DayOfMonth-3538"><a href="#DayOfMonth-3538"><span class="linenos">3538</span></a><span class="k">class</span> <span class="nc">DayOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DayOfMonth-3539"><a href="#DayOfMonth-3539"><span class="linenos">3539</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_MONTH&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DayOfMonth-3681"><a href="#DayOfMonth-3681"><span class="linenos">3681</span></a><span class="k">class</span> <span class="nc">DayOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DayOfMonth-3682"><a href="#DayOfMonth-3682"><span class="linenos">3682</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_MONTH&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -34755,6 +36169,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DayOfMonth.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DayOfMonth.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DayOfMonth.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DayOfMonth.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DayOfMonth.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DayOfMonth.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DayOfMonth.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DayOfMonth.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DayOfMonth.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DayOfMonth.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -34771,8 +36192,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DayOfYear"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DayOfYear-3542"><a href="#DayOfYear-3542"><span class="linenos">3542</span></a><span class="k">class</span> <span class="nc">DayOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DayOfYear-3543"><a href="#DayOfYear-3543"><span class="linenos">3543</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DayOfYear-3685"><a href="#DayOfYear-3685"><span class="linenos">3685</span></a><span class="k">class</span> <span class="nc">DayOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DayOfYear-3686"><a href="#DayOfYear-3686"><span class="linenos">3686</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DAY_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -34832,6 +36253,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DayOfYear.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DayOfYear.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DayOfYear.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DayOfYear.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DayOfYear.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DayOfYear.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DayOfYear.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DayOfYear.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DayOfYear.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DayOfYear.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -34848,8 +36276,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#WeekOfYear"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="WeekOfYear-3546"><a href="#WeekOfYear-3546"><span class="linenos">3546</span></a><span class="k">class</span> <span class="nc">WeekOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="WeekOfYear-3547"><a href="#WeekOfYear-3547"><span class="linenos">3547</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;WEEK_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="WeekOfYear-3689"><a href="#WeekOfYear-3689"><span class="linenos">3689</span></a><span class="k">class</span> <span class="nc">WeekOfYear</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="WeekOfYear-3690"><a href="#WeekOfYear-3690"><span class="linenos">3690</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;WEEK_OF_YEAR&quot;</span><span class="p">,</span> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -34909,6 +36337,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="WeekOfYear.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="WeekOfYear.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="WeekOfYear.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="WeekOfYear.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="WeekOfYear.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="WeekOfYear.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="WeekOfYear.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="WeekOfYear.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="WeekOfYear.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="WeekOfYear.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -34925,8 +36360,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#LastDateOfMonth"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LastDateOfMonth-3550"><a href="#LastDateOfMonth-3550"><span class="linenos">3550</span></a><span class="k">class</span> <span class="nc">LastDateOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="LastDateOfMonth-3551"><a href="#LastDateOfMonth-3551"><span class="linenos">3551</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LastDateOfMonth-3693"><a href="#LastDateOfMonth-3693"><span class="linenos">3693</span></a><span class="k">class</span> <span class="nc">LastDateOfMonth</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="LastDateOfMonth-3694"><a href="#LastDateOfMonth-3694"><span class="linenos">3694</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -34986,6 +36421,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="LastDateOfMonth.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="LastDateOfMonth.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="LastDateOfMonth.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="LastDateOfMonth.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="LastDateOfMonth.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="LastDateOfMonth.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="LastDateOfMonth.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="LastDateOfMonth.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="LastDateOfMonth.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="LastDateOfMonth.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -35002,8 +36444,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Extract"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Extract-3554"><a href="#Extract-3554"><span class="linenos">3554</span></a><span class="k">class</span> <span class="nc">Extract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Extract-3555"><a href="#Extract-3555"><span class="linenos">3555</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Extract-3697"><a href="#Extract-3697"><span class="linenos">3697</span></a><span class="k">class</span> <span class="nc">Extract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Extract-3698"><a href="#Extract-3698"><span class="linenos">3698</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></pre></div>
@@ -35063,6 +36505,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Extract.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Extract.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Extract.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Extract.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Extract.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Extract.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Extract.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Extract.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Extract.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Extract.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -35079,8 +36528,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimestampAdd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampAdd-3558"><a href="#TimestampAdd-3558"><span class="linenos">3558</span></a><span class="k">class</span> <span class="nc">TimestampAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimestampAdd-3559"><a href="#TimestampAdd-3559"><span class="linenos">3559</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampAdd-3701"><a href="#TimestampAdd-3701"><span class="linenos">3701</span></a><span class="k">class</span> <span class="nc">TimestampAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimestampAdd-3702"><a href="#TimestampAdd-3702"><span class="linenos">3702</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35104,6 +36553,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimestampAdd.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimestampAdd.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimestampAdd.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimestampAdd.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimestampAdd.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimestampAdd.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimestampAdd.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimestampAdd.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimestampAdd.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimestampAdd.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35159,8 +36615,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimestampSub"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampSub-3562"><a href="#TimestampSub-3562"><span class="linenos">3562</span></a><span class="k">class</span> <span class="nc">TimestampSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimestampSub-3563"><a href="#TimestampSub-3563"><span class="linenos">3563</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampSub-3705"><a href="#TimestampSub-3705"><span class="linenos">3705</span></a><span class="k">class</span> <span class="nc">TimestampSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimestampSub-3706"><a href="#TimestampSub-3706"><span class="linenos">3706</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35184,6 +36640,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimestampSub.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimestampSub.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimestampSub.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimestampSub.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimestampSub.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimestampSub.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimestampSub.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimestampSub.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimestampSub.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimestampSub.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35239,8 +36702,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimestampDiff"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampDiff-3566"><a href="#TimestampDiff-3566"><span class="linenos">3566</span></a><span class="k">class</span> <span class="nc">TimestampDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimestampDiff-3567"><a href="#TimestampDiff-3567"><span class="linenos">3567</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampDiff-3709"><a href="#TimestampDiff-3709"><span class="linenos">3709</span></a><span class="k">class</span> <span class="nc">TimestampDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimestampDiff-3710"><a href="#TimestampDiff-3710"><span class="linenos">3710</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35264,6 +36727,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimestampDiff.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimestampDiff.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimestampDiff.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimestampDiff.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimestampDiff.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimestampDiff.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimestampDiff.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimestampDiff.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimestampDiff.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimestampDiff.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35319,8 +36789,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimestampTrunc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampTrunc-3570"><a href="#TimestampTrunc-3570"><span class="linenos">3570</span></a><span class="k">class</span> <span class="nc">TimestampTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimestampTrunc-3571"><a href="#TimestampTrunc-3571"><span class="linenos">3571</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimestampTrunc-3713"><a href="#TimestampTrunc-3713"><span class="linenos">3713</span></a><span class="k">class</span> <span class="nc">TimestampTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimestampTrunc-3714"><a href="#TimestampTrunc-3714"><span class="linenos">3714</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35344,6 +36814,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimestampTrunc.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimestampTrunc.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimestampTrunc.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimestampTrunc.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimestampTrunc.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimestampTrunc.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimestampTrunc.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimestampTrunc.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimestampTrunc.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimestampTrunc.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35399,8 +36876,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeAdd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeAdd-3574"><a href="#TimeAdd-3574"><span class="linenos">3574</span></a><span class="k">class</span> <span class="nc">TimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimeAdd-3575"><a href="#TimeAdd-3575"><span class="linenos">3575</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeAdd-3717"><a href="#TimeAdd-3717"><span class="linenos">3717</span></a><span class="k">class</span> <span class="nc">TimeAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimeAdd-3718"><a href="#TimeAdd-3718"><span class="linenos">3718</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35424,6 +36901,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeAdd.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeAdd.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeAdd.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeAdd.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeAdd.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeAdd.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeAdd.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeAdd.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeAdd.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeAdd.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35479,8 +36963,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeSub"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeSub-3578"><a href="#TimeSub-3578"><span class="linenos">3578</span></a><span class="k">class</span> <span class="nc">TimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimeSub-3579"><a href="#TimeSub-3579"><span class="linenos">3579</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeSub-3721"><a href="#TimeSub-3721"><span class="linenos">3721</span></a><span class="k">class</span> <span class="nc">TimeSub</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimeSub-3722"><a href="#TimeSub-3722"><span class="linenos">3722</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35504,6 +36988,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeSub.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeSub.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeSub.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeSub.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeSub.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeSub.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeSub.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeSub.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeSub.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeSub.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35559,8 +37050,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeDiff"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeDiff-3582"><a href="#TimeDiff-3582"><span class="linenos">3582</span></a><span class="k">class</span> <span class="nc">TimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimeDiff-3583"><a href="#TimeDiff-3583"><span class="linenos">3583</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeDiff-3725"><a href="#TimeDiff-3725"><span class="linenos">3725</span></a><span class="k">class</span> <span class="nc">TimeDiff</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimeDiff-3726"><a href="#TimeDiff-3726"><span class="linenos">3726</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35584,6 +37075,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeDiff.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeDiff.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeDiff.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeDiff.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeDiff.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeDiff.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeDiff.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeDiff.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeDiff.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeDiff.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35639,8 +37137,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeTrunc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeTrunc-3586"><a href="#TimeTrunc-3586"><span class="linenos">3586</span></a><span class="k">class</span> <span class="nc">TimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TimeTrunc-3587"><a href="#TimeTrunc-3587"><span class="linenos">3587</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeTrunc-3729"><a href="#TimeTrunc-3729"><span class="linenos">3729</span></a><span class="k">class</span> <span class="nc">TimeTrunc</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TimeTrunc-3730"><a href="#TimeTrunc-3730"><span class="linenos">3730</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;unit&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -35664,6 +37162,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeTrunc.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeTrunc.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeTrunc.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeTrunc.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeTrunc.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeTrunc.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeTrunc.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeTrunc.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeTrunc.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeTrunc.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -35719,9 +37224,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateFromParts"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateFromParts-3590"><a href="#DateFromParts-3590"><span class="linenos">3590</span></a><span class="k">class</span> <span class="nc">DateFromParts</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DateFromParts-3591"><a href="#DateFromParts-3591"><span class="linenos">3591</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEFROMPARTS&quot;</span><span class="p">]</span>
-</span><span id="DateFromParts-3592"><a href="#DateFromParts-3592"><span class="linenos">3592</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateFromParts-3733"><a href="#DateFromParts-3733"><span class="linenos">3733</span></a><span class="k">class</span> <span class="nc">DateFromParts</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DateFromParts-3734"><a href="#DateFromParts-3734"><span class="linenos">3734</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;DATEFROMPARTS&quot;</span><span class="p">]</span>
+</span><span id="DateFromParts-3735"><a href="#DateFromParts-3735"><span class="linenos">3735</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;year&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -35781,6 +37286,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateFromParts.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateFromParts.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateFromParts.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateFromParts.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateFromParts.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateFromParts.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateFromParts.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateFromParts.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateFromParts.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateFromParts.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -35797,8 +37309,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateStrToDate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateStrToDate-3595"><a href="#DateStrToDate-3595"><span class="linenos">3595</span></a><span class="k">class</span> <span class="nc">DateStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DateStrToDate-3596"><a href="#DateStrToDate-3596"><span class="linenos">3596</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateStrToDate-3738"><a href="#DateStrToDate-3738"><span class="linenos">3738</span></a><span class="k">class</span> <span class="nc">DateStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DateStrToDate-3739"><a href="#DateStrToDate-3739"><span class="linenos">3739</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -35858,6 +37370,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateStrToDate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateStrToDate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateStrToDate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateStrToDate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateStrToDate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateStrToDate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateStrToDate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateStrToDate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateStrToDate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateStrToDate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -35874,8 +37393,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateToDateStr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateToDateStr-3599"><a href="#DateToDateStr-3599"><span class="linenos">3599</span></a><span class="k">class</span> <span class="nc">DateToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DateToDateStr-3600"><a href="#DateToDateStr-3600"><span class="linenos">3600</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateToDateStr-3742"><a href="#DateToDateStr-3742"><span class="linenos">3742</span></a><span class="k">class</span> <span class="nc">DateToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DateToDateStr-3743"><a href="#DateToDateStr-3743"><span class="linenos">3743</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -35935,6 +37454,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateToDateStr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateToDateStr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateToDateStr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateToDateStr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateToDateStr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateToDateStr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateToDateStr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateToDateStr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateToDateStr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateToDateStr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -35951,8 +37477,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DateToDi"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DateToDi-3603"><a href="#DateToDi-3603"><span class="linenos">3603</span></a><span class="k">class</span> <span class="nc">DateToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DateToDi-3604"><a href="#DateToDi-3604"><span class="linenos">3604</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DateToDi-3746"><a href="#DateToDi-3746"><span class="linenos">3746</span></a><span class="k">class</span> <span class="nc">DateToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DateToDi-3747"><a href="#DateToDi-3747"><span class="linenos">3747</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -36012,6 +37538,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DateToDi.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DateToDi.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DateToDi.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DateToDi.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DateToDi.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DateToDi.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DateToDi.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DateToDi.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DateToDi.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DateToDi.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36028,8 +37561,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Day"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Day-3607"><a href="#Day-3607"><span class="linenos">3607</span></a><span class="k">class</span> <span class="nc">Day</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Day-3608"><a href="#Day-3608"><span class="linenos">3608</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Day-3750"><a href="#Day-3750"><span class="linenos">3750</span></a><span class="k">class</span> <span class="nc">Day</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Day-3751"><a href="#Day-3751"><span class="linenos">3751</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -36089,6 +37622,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Day.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Day.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Day.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Day.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Day.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Day.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Day.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Day.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Day.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Day.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36105,8 +37645,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Decode"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Decode-3611"><a href="#Decode-3611"><span class="linenos">3611</span></a><span class="k">class</span> <span class="nc">Decode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Decode-3612"><a href="#Decode-3612"><span class="linenos">3612</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Decode-3754"><a href="#Decode-3754"><span class="linenos">3754</span></a><span class="k">class</span> <span class="nc">Decode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Decode-3755"><a href="#Decode-3755"><span class="linenos">3755</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -36166,6 +37706,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Decode.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Decode.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Decode.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Decode.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Decode.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Decode.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Decode.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Decode.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Decode.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Decode.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36182,8 +37729,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#DiToDate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DiToDate-3615"><a href="#DiToDate-3615"><span class="linenos">3615</span></a><span class="k">class</span> <span class="nc">DiToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="DiToDate-3616"><a href="#DiToDate-3616"><span class="linenos">3616</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DiToDate-3758"><a href="#DiToDate-3758"><span class="linenos">3758</span></a><span class="k">class</span> <span class="nc">DiToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="DiToDate-3759"><a href="#DiToDate-3759"><span class="linenos">3759</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -36243,6 +37790,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="DiToDate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="DiToDate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="DiToDate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="DiToDate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="DiToDate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="DiToDate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="DiToDate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="DiToDate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="DiToDate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="DiToDate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36259,8 +37813,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Encode"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Encode-3619"><a href="#Encode-3619"><span class="linenos">3619</span></a><span class="k">class</span> <span class="nc">Encode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Encode-3620"><a href="#Encode-3620"><span class="linenos">3620</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Encode-3762"><a href="#Encode-3762"><span class="linenos">3762</span></a><span class="k">class</span> <span class="nc">Encode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Encode-3763"><a href="#Encode-3763"><span class="linenos">3763</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;charset&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -36320,6 +37874,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Encode.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Encode.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Encode.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Encode.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Encode.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Encode.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Encode.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Encode.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Encode.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Encode.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36336,8 +37897,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Exp"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Exp-3623"><a href="#Exp-3623"><span class="linenos">3623</span></a><span class="k">class</span> <span class="nc">Exp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Exp-3624"><a href="#Exp-3624"><span class="linenos">3624</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Exp-3766"><a href="#Exp-3766"><span class="linenos">3766</span></a><span class="k">class</span> <span class="nc">Exp</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Exp-3767"><a href="#Exp-3767"><span class="linenos">3767</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -36397,6 +37958,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Exp.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Exp.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Exp.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Exp.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Exp.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Exp.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Exp.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Exp.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Exp.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Exp.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36413,8 +37981,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Explode"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Explode-3627"><a href="#Explode-3627"><span class="linenos">3627</span></a><span class="k">class</span> <span class="nc">Explode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Explode-3628"><a href="#Explode-3628"><span class="linenos">3628</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Explode-3770"><a href="#Explode-3770"><span class="linenos">3770</span></a><span class="k">class</span> <span class="nc">Explode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Explode-3771"><a href="#Explode-3771"><span class="linenos">3771</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -36474,6 +38042,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Explode.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Explode.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Explode.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Explode.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Explode.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Explode.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Explode.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Explode.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Explode.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Explode.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36490,8 +38065,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ExponentialTimeDecayedAvg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ExponentialTimeDecayedAvg-3631"><a href="#ExponentialTimeDecayedAvg-3631"><span class="linenos">3631</span></a><span class="k">class</span> <span class="nc">ExponentialTimeDecayedAvg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="ExponentialTimeDecayedAvg-3632"><a href="#ExponentialTimeDecayedAvg-3632"><span class="linenos">3632</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;time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;decay&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ExponentialTimeDecayedAvg-3774"><a href="#ExponentialTimeDecayedAvg-3774"><span class="linenos">3774</span></a><span class="k">class</span> <span class="nc">ExponentialTimeDecayedAvg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="ExponentialTimeDecayedAvg-3775"><a href="#ExponentialTimeDecayedAvg-3775"><span class="linenos">3775</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;time&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;decay&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -36551,6 +38126,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ExponentialTimeDecayedAvg.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ExponentialTimeDecayedAvg.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ExponentialTimeDecayedAvg.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ExponentialTimeDecayedAvg.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ExponentialTimeDecayedAvg.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ExponentialTimeDecayedAvg.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ExponentialTimeDecayedAvg.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ExponentialTimeDecayedAvg.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ExponentialTimeDecayedAvg.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ExponentialTimeDecayedAvg.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36567,8 +38149,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Floor"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Floor-3635"><a href="#Floor-3635"><span class="linenos">3635</span></a><span class="k">class</span> <span class="nc">Floor</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Floor-3636"><a href="#Floor-3636"><span class="linenos">3636</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Floor-3778"><a href="#Floor-3778"><span class="linenos">3778</span></a><span class="k">class</span> <span class="nc">Floor</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Floor-3779"><a href="#Floor-3779"><span class="linenos">3779</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -36628,6 +38210,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Floor.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Floor.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Floor.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Floor.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Floor.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Floor.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Floor.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Floor.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Floor.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Floor.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36644,9 +38233,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Greatest"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Greatest-3639"><a href="#Greatest-3639"><span class="linenos">3639</span></a><span class="k">class</span> <span class="nc">Greatest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Greatest-3640"><a href="#Greatest-3640"><span class="linenos">3640</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Greatest-3641"><a href="#Greatest-3641"><span class="linenos">3641</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Greatest-3782"><a href="#Greatest-3782"><span class="linenos">3782</span></a><span class="k">class</span> <span class="nc">Greatest</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Greatest-3783"><a href="#Greatest-3783"><span class="linenos">3783</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Greatest-3784"><a href="#Greatest-3784"><span class="linenos">3784</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -36706,6 +38295,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Greatest.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Greatest.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Greatest.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Greatest.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Greatest.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Greatest.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Greatest.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Greatest.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Greatest.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Greatest.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36722,8 +38318,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#GroupConcat"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GroupConcat-3644"><a href="#GroupConcat-3644"><span class="linenos">3644</span></a><span class="k">class</span> <span class="nc">GroupConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="GroupConcat-3645"><a href="#GroupConcat-3645"><span class="linenos">3645</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;separator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GroupConcat-3787"><a href="#GroupConcat-3787"><span class="linenos">3787</span></a><span class="k">class</span> <span class="nc">GroupConcat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="GroupConcat-3788"><a href="#GroupConcat-3788"><span class="linenos">3788</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;separator&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -36783,6 +38379,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="GroupConcat.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="GroupConcat.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="GroupConcat.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="GroupConcat.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="GroupConcat.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="GroupConcat.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="GroupConcat.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="GroupConcat.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="GroupConcat.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="GroupConcat.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36799,8 +38402,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#GroupUniqArray"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="GroupUniqArray-3648"><a href="#GroupUniqArray-3648"><span class="linenos">3648</span></a><span class="k">class</span> <span class="nc">GroupUniqArray</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="GroupUniqArray-3649"><a href="#GroupUniqArray-3649"><span class="linenos">3649</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;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="GroupUniqArray-3791"><a href="#GroupUniqArray-3791"><span class="linenos">3791</span></a><span class="k">class</span> <span class="nc">GroupUniqArray</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="GroupUniqArray-3792"><a href="#GroupUniqArray-3792"><span class="linenos">3792</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;size&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -36860,6 +38463,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="GroupUniqArray.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="GroupUniqArray.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="GroupUniqArray.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="GroupUniqArray.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="GroupUniqArray.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="GroupUniqArray.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="GroupUniqArray.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="GroupUniqArray.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="GroupUniqArray.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="GroupUniqArray.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36876,8 +38486,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Hex"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Hex-3652"><a href="#Hex-3652"><span class="linenos">3652</span></a><span class="k">class</span> <span class="nc">Hex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Hex-3653"><a href="#Hex-3653"><span class="linenos">3653</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Hex-3795"><a href="#Hex-3795"><span class="linenos">3795</span></a><span class="k">class</span> <span class="nc">Hex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Hex-3796"><a href="#Hex-3796"><span class="linenos">3796</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -36937,6 +38547,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Hex.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Hex.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Hex.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Hex.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Hex.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Hex.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Hex.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Hex.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Hex.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Hex.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -36953,8 +38570,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Histogram"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Histogram-3656"><a href="#Histogram-3656"><span class="linenos">3656</span></a><span class="k">class</span> <span class="nc">Histogram</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Histogram-3657"><a href="#Histogram-3657"><span class="linenos">3657</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;bins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Histogram-3799"><a href="#Histogram-3799"><span class="linenos">3799</span></a><span class="k">class</span> <span class="nc">Histogram</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Histogram-3800"><a href="#Histogram-3800"><span class="linenos">3800</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;bins&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -37014,6 +38631,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Histogram.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Histogram.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Histogram.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Histogram.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Histogram.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Histogram.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Histogram.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Histogram.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Histogram.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Histogram.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37030,8 +38654,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#If"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="If-3660"><a href="#If-3660"><span class="linenos">3660</span></a><span class="k">class</span> <span class="nc">If</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="If-3661"><a href="#If-3661"><span class="linenos">3661</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="If-3803"><a href="#If-3803"><span class="linenos">3803</span></a><span class="k">class</span> <span class="nc">If</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="If-3804"><a href="#If-3804"><span class="linenos">3804</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -37091,6 +38715,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="If.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="If.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="If.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="If.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="If.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="If.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="If.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="If.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="If.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="If.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37107,9 +38738,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#IfNull"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="IfNull-3664"><a href="#IfNull-3664"><span class="linenos">3664</span></a><span class="k">class</span> <span class="nc">IfNull</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="IfNull-3665"><a href="#IfNull-3665"><span class="linenos">3665</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">False</span><span class="p">}</span>
-</span><span id="IfNull-3666"><a href="#IfNull-3666"><span class="linenos">3666</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IFNULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NVL&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="IfNull-3807"><a href="#IfNull-3807"><span class="linenos">3807</span></a><span class="k">class</span> <span class="nc">IfNull</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="IfNull-3808"><a href="#IfNull-3808"><span class="linenos">3808</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">False</span><span class="p">}</span>
+</span><span id="IfNull-3809"><a href="#IfNull-3809"><span class="linenos">3809</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;IFNULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NVL&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -37169,6 +38800,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="IfNull.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="IfNull.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="IfNull.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="IfNull.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="IfNull.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="IfNull.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="IfNull.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="IfNull.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="IfNull.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="IfNull.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37185,8 +38823,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Initcap"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Initcap-3669"><a href="#Initcap-3669"><span class="linenos">3669</span></a><span class="k">class</span> <span class="nc">Initcap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Initcap-3670"><a href="#Initcap-3670"><span class="linenos">3670</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Initcap-3812"><a href="#Initcap-3812"><span class="linenos">3812</span></a><span class="k">class</span> <span class="nc">Initcap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Initcap-3813"><a href="#Initcap-3813"><span class="linenos">3813</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -37246,6 +38884,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Initcap.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Initcap.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Initcap.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Initcap.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Initcap.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Initcap.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Initcap.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Initcap.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Initcap.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Initcap.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37262,8 +38907,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONKeyValue"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONKeyValue-3673"><a href="#JSONKeyValue-3673"><span class="linenos">3673</span></a><span class="k">class</span> <span class="nc">JSONKeyValue</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="JSONKeyValue-3674"><a href="#JSONKeyValue-3674"><span class="linenos">3674</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONKeyValue-3816"><a href="#JSONKeyValue-3816"><span class="linenos">3816</span></a><span class="k">class</span> <span class="nc">JSONKeyValue</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="JSONKeyValue-3817"><a href="#JSONKeyValue-3817"><span class="linenos">3817</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></pre></div>
@@ -37326,15 +38971,15 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONObject"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONObject-3677"><a href="#JSONObject-3677"><span class="linenos">3677</span></a><span class="k">class</span> <span class="nc">JSONObject</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="JSONObject-3678"><a href="#JSONObject-3678"><span class="linenos">3678</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="JSONObject-3679"><a href="#JSONObject-3679"><span class="linenos">3679</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JSONObject-3680"><a href="#JSONObject-3680"><span class="linenos">3680</span></a> <span class="s2">&quot;null_handling&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JSONObject-3681"><a href="#JSONObject-3681"><span class="linenos">3681</span></a> <span class="s2">&quot;unique_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JSONObject-3682"><a href="#JSONObject-3682"><span class="linenos">3682</span></a> <span class="s2">&quot;return_type&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JSONObject-3683"><a href="#JSONObject-3683"><span class="linenos">3683</span></a> <span class="s2">&quot;format_json&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JSONObject-3684"><a href="#JSONObject-3684"><span class="linenos">3684</span></a> <span class="s2">&quot;encoding&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="JSONObject-3685"><a href="#JSONObject-3685"><span class="linenos">3685</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONObject-3820"><a href="#JSONObject-3820"><span class="linenos">3820</span></a><span class="k">class</span> <span class="nc">JSONObject</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="JSONObject-3821"><a href="#JSONObject-3821"><span class="linenos">3821</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="JSONObject-3822"><a href="#JSONObject-3822"><span class="linenos">3822</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JSONObject-3823"><a href="#JSONObject-3823"><span class="linenos">3823</span></a> <span class="s2">&quot;null_handling&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JSONObject-3824"><a href="#JSONObject-3824"><span class="linenos">3824</span></a> <span class="s2">&quot;unique_keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JSONObject-3825"><a href="#JSONObject-3825"><span class="linenos">3825</span></a> <span class="s2">&quot;return_type&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JSONObject-3826"><a href="#JSONObject-3826"><span class="linenos">3826</span></a> <span class="s2">&quot;format_json&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JSONObject-3827"><a href="#JSONObject-3827"><span class="linenos">3827</span></a> <span class="s2">&quot;encoding&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="JSONObject-3828"><a href="#JSONObject-3828"><span class="linenos">3828</span></a> <span class="p">}</span>
</span></pre></div>
@@ -37394,6 +39039,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="JSONObject.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="JSONObject.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="JSONObject.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="JSONObject.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="JSONObject.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="JSONObject.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="JSONObject.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="JSONObject.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="JSONObject.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="JSONObject.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37410,8 +39062,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONBContains"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONBContains-3688"><a href="#JSONBContains-3688"><span class="linenos">3688</span></a><span class="k">class</span> <span class="nc">JSONBContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
-</span><span id="JSONBContains-3689"><a href="#JSONBContains-3689"><span class="linenos">3689</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_CONTAINS&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONBContains-3831"><a href="#JSONBContains-3831"><span class="linenos">3831</span></a><span class="k">class</span> <span class="nc">JSONBContains</span><span class="p">(</span><span class="n">Binary</span><span class="p">):</span>
+</span><span id="JSONBContains-3832"><a href="#JSONBContains-3832"><span class="linenos">3832</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_CONTAINS&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -37460,6 +39112,19 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="JSONBContains.load" class="function"><a href="#Expression.load">load</a></dd>
</div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="JSONBContains.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="JSONBContains.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="JSONBContains.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="JSONBContains.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="JSONBContains.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="JSONBContains.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="JSONBContains.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="JSONBContains.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="JSONBContains.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="JSONBContains.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
</dl>
</div>
</section>
@@ -37474,8 +39139,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONExtract"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtract-3692"><a href="#JSONExtract-3692"><span class="linenos">3692</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-3693"><a href="#JSONExtract-3693"><span class="linenos">3693</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtract-3835"><a href="#JSONExtract-3835"><span class="linenos">3835</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-3836"><a href="#JSONExtract-3836"><span class="linenos">3836</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></pre></div>
@@ -37535,6 +39200,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="JSONExtract.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="JSONExtract.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="JSONExtract.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="JSONExtract.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="JSONExtract.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="JSONExtract.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="JSONExtract.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="JSONExtract.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="JSONExtract.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="JSONExtract.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37551,8 +39223,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONExtractScalar"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONExtractScalar-3696"><a href="#JSONExtractScalar-3696"><span class="linenos">3696</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
-</span><span id="JSONExtractScalar-3697"><a href="#JSONExtractScalar-3697"><span class="linenos">3697</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-3839"><a href="#JSONExtractScalar-3839"><span class="linenos">3839</span></a><span class="k">class</span> <span class="nc">JSONExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
+</span><span id="JSONExtractScalar-3840"><a href="#JSONExtractScalar-3840"><span class="linenos">3840</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></pre></div>
@@ -37612,6 +39284,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="JSONExtractScalar.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="JSONExtractScalar.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="JSONExtractScalar.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="JSONExtractScalar.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="JSONExtractScalar.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="JSONExtractScalar.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="JSONExtractScalar.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="JSONExtractScalar.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="JSONExtractScalar.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="JSONExtractScalar.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37628,8 +39307,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONBExtract"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONBExtract-3700"><a href="#JSONBExtract-3700"><span class="linenos">3700</span></a><span class="k">class</span> <span class="nc">JSONBExtract</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
-</span><span id="JSONBExtract-3701"><a href="#JSONBExtract-3701"><span class="linenos">3701</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONBExtract-3843"><a href="#JSONBExtract-3843"><span class="linenos">3843</span></a><span class="k">class</span> <span class="nc">JSONBExtract</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
+</span><span id="JSONBExtract-3844"><a href="#JSONBExtract-3844"><span class="linenos">3844</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -37689,6 +39368,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="JSONBExtract.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="JSONBExtract.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="JSONBExtract.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="JSONBExtract.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="JSONBExtract.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="JSONBExtract.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="JSONBExtract.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="JSONBExtract.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="JSONBExtract.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="JSONBExtract.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37705,8 +39391,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONBExtractScalar"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONBExtractScalar-3704"><a href="#JSONBExtractScalar-3704"><span class="linenos">3704</span></a><span class="k">class</span> <span class="nc">JSONBExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
-</span><span id="JSONBExtractScalar-3705"><a href="#JSONBExtractScalar-3705"><span class="linenos">3705</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT_SCALAR&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONBExtractScalar-3847"><a href="#JSONBExtractScalar-3847"><span class="linenos">3847</span></a><span class="k">class</span> <span class="nc">JSONBExtractScalar</span><span class="p">(</span><span class="n">JSONExtract</span><span class="p">):</span>
+</span><span id="JSONBExtractScalar-3848"><a href="#JSONBExtractScalar-3848"><span class="linenos">3848</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSONB_EXTRACT_SCALAR&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -37766,6 +39452,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="JSONBExtractScalar.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="JSONBExtractScalar.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="JSONBExtractScalar.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="JSONBExtractScalar.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="JSONBExtractScalar.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="JSONBExtractScalar.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="JSONBExtractScalar.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="JSONBExtractScalar.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="JSONBExtractScalar.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="JSONBExtractScalar.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37782,9 +39475,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#JSONFormat"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="JSONFormat-3708"><a href="#JSONFormat-3708"><span class="linenos">3708</span></a><span class="k">class</span> <span class="nc">JSONFormat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="JSONFormat-3709"><a href="#JSONFormat-3709"><span class="linenos">3709</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;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="JSONFormat-3710"><a href="#JSONFormat-3710"><span class="linenos">3710</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_FORMAT&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="JSONFormat-3851"><a href="#JSONFormat-3851"><span class="linenos">3851</span></a><span class="k">class</span> <span class="nc">JSONFormat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="JSONFormat-3852"><a href="#JSONFormat-3852"><span class="linenos">3852</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;options&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="JSONFormat-3853"><a href="#JSONFormat-3853"><span class="linenos">3853</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;JSON_FORMAT&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -37844,6 +39537,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="JSONFormat.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="JSONFormat.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="JSONFormat.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="JSONFormat.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="JSONFormat.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="JSONFormat.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="JSONFormat.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="JSONFormat.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="JSONFormat.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="JSONFormat.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37860,9 +39560,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Least"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Least-3713"><a href="#Least-3713"><span class="linenos">3713</span></a><span class="k">class</span> <span class="nc">Least</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Least-3714"><a href="#Least-3714"><span class="linenos">3714</span></a> <span class="n">arg_types</span> <span class="o">=</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="Least-3715"><a href="#Least-3715"><span class="linenos">3715</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Least-3856"><a href="#Least-3856"><span class="linenos">3856</span></a><span class="k">class</span> <span class="nc">Least</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Least-3857"><a href="#Least-3857"><span class="linenos">3857</span></a> <span class="n">arg_types</span> <span class="o">=</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="Least-3858"><a href="#Least-3858"><span class="linenos">3858</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -37922,6 +39622,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Least.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Least.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Least.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Least.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Least.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Least.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Least.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Least.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Least.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Least.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -37938,8 +39645,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Length"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Length-3718"><a href="#Length-3718"><span class="linenos">3718</span></a><span class="k">class</span> <span class="nc">Length</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Length-3719"><a href="#Length-3719"><span class="linenos">3719</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Length-3861"><a href="#Length-3861"><span class="linenos">3861</span></a><span class="k">class</span> <span class="nc">Length</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Length-3862"><a href="#Length-3862"><span class="linenos">3862</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -37999,6 +39706,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Length.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Length.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Length.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Length.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Length.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Length.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Length.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Length.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Length.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Length.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38015,14 +39729,14 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Levenshtein"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Levenshtein-3722"><a href="#Levenshtein-3722"><span class="linenos">3722</span></a><span class="k">class</span> <span class="nc">Levenshtein</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Levenshtein-3723"><a href="#Levenshtein-3723"><span class="linenos">3723</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Levenshtein-3724"><a href="#Levenshtein-3724"><span class="linenos">3724</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Levenshtein-3725"><a href="#Levenshtein-3725"><span class="linenos">3725</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Levenshtein-3726"><a href="#Levenshtein-3726"><span class="linenos">3726</span></a> <span class="s2">&quot;ins_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Levenshtein-3727"><a href="#Levenshtein-3727"><span class="linenos">3727</span></a> <span class="s2">&quot;del_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Levenshtein-3728"><a href="#Levenshtein-3728"><span class="linenos">3728</span></a> <span class="s2">&quot;sub_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Levenshtein-3729"><a href="#Levenshtein-3729"><span class="linenos">3729</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Levenshtein-3865"><a href="#Levenshtein-3865"><span class="linenos">3865</span></a><span class="k">class</span> <span class="nc">Levenshtein</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Levenshtein-3866"><a href="#Levenshtein-3866"><span class="linenos">3866</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Levenshtein-3867"><a href="#Levenshtein-3867"><span class="linenos">3867</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Levenshtein-3868"><a href="#Levenshtein-3868"><span class="linenos">3868</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Levenshtein-3869"><a href="#Levenshtein-3869"><span class="linenos">3869</span></a> <span class="s2">&quot;ins_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Levenshtein-3870"><a href="#Levenshtein-3870"><span class="linenos">3870</span></a> <span class="s2">&quot;del_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Levenshtein-3871"><a href="#Levenshtein-3871"><span class="linenos">3871</span></a> <span class="s2">&quot;sub_cost&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Levenshtein-3872"><a href="#Levenshtein-3872"><span class="linenos">3872</span></a> <span class="p">}</span>
</span></pre></div>
@@ -38082,6 +39796,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Levenshtein.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Levenshtein.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Levenshtein.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Levenshtein.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Levenshtein.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Levenshtein.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Levenshtein.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Levenshtein.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Levenshtein.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Levenshtein.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38098,8 +39819,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Ln"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Ln-3732"><a href="#Ln-3732"><span class="linenos">3732</span></a><span class="k">class</span> <span class="nc">Ln</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Ln-3733"><a href="#Ln-3733"><span class="linenos">3733</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Ln-3875"><a href="#Ln-3875"><span class="linenos">3875</span></a><span class="k">class</span> <span class="nc">Ln</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Ln-3876"><a href="#Ln-3876"><span class="linenos">3876</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -38159,6 +39880,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Ln.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Ln.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Ln.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Ln.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Ln.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Ln.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Ln.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Ln.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Ln.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Ln.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38175,8 +39903,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Log"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Log-3736"><a href="#Log-3736"><span class="linenos">3736</span></a><span class="k">class</span> <span class="nc">Log</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Log-3737"><a href="#Log-3737"><span class="linenos">3737</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">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Log-3879"><a href="#Log-3879"><span class="linenos">3879</span></a><span class="k">class</span> <span class="nc">Log</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Log-3880"><a href="#Log-3880"><span class="linenos">3880</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -38236,6 +39964,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Log.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Log.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Log.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Log.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Log.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Log.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Log.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Log.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Log.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Log.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38252,8 +39987,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Log2"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Log2-3740"><a href="#Log2-3740"><span class="linenos">3740</span></a><span class="k">class</span> <span class="nc">Log2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Log2-3741"><a href="#Log2-3741"><span class="linenos">3741</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Log2-3883"><a href="#Log2-3883"><span class="linenos">3883</span></a><span class="k">class</span> <span class="nc">Log2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Log2-3884"><a href="#Log2-3884"><span class="linenos">3884</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -38313,6 +40048,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Log2.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Log2.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Log2.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Log2.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Log2.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Log2.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Log2.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Log2.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Log2.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Log2.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38329,8 +40071,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Log10"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Log10-3744"><a href="#Log10-3744"><span class="linenos">3744</span></a><span class="k">class</span> <span class="nc">Log10</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Log10-3745"><a href="#Log10-3745"><span class="linenos">3745</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Log10-3887"><a href="#Log10-3887"><span class="linenos">3887</span></a><span class="k">class</span> <span class="nc">Log10</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Log10-3888"><a href="#Log10-3888"><span class="linenos">3888</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -38390,6 +40132,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Log10.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Log10.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Log10.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Log10.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Log10.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Log10.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Log10.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Log10.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Log10.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Log10.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38406,8 +40155,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#LogicalOr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LogicalOr-3748"><a href="#LogicalOr-3748"><span class="linenos">3748</span></a><span class="k">class</span> <span class="nc">LogicalOr</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="LogicalOr-3749"><a href="#LogicalOr-3749"><span class="linenos">3749</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLOR_AGG&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LogicalOr-3891"><a href="#LogicalOr-3891"><span class="linenos">3891</span></a><span class="k">class</span> <span class="nc">LogicalOr</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="LogicalOr-3892"><a href="#LogicalOr-3892"><span class="linenos">3892</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_OR&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLOR_AGG&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -38467,6 +40216,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="LogicalOr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="LogicalOr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="LogicalOr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="LogicalOr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="LogicalOr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="LogicalOr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="LogicalOr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="LogicalOr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="LogicalOr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="LogicalOr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38483,8 +40239,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#LogicalAnd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="LogicalAnd-3752"><a href="#LogicalAnd-3752"><span class="linenos">3752</span></a><span class="k">class</span> <span class="nc">LogicalAnd</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="LogicalAnd-3753"><a href="#LogicalAnd-3753"><span class="linenos">3753</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLAND_AGG&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="LogicalAnd-3895"><a href="#LogicalAnd-3895"><span class="linenos">3895</span></a><span class="k">class</span> <span class="nc">LogicalAnd</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="LogicalAnd-3896"><a href="#LogicalAnd-3896"><span class="linenos">3896</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOGICAL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOL_AND&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLAND_AGG&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -38544,6 +40300,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="LogicalAnd.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="LogicalAnd.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="LogicalAnd.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="LogicalAnd.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="LogicalAnd.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="LogicalAnd.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="LogicalAnd.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="LogicalAnd.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="LogicalAnd.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="LogicalAnd.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38560,8 +40323,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Lower"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Lower-3756"><a href="#Lower-3756"><span class="linenos">3756</span></a><span class="k">class</span> <span class="nc">Lower</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Lower-3757"><a href="#Lower-3757"><span class="linenos">3757</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOWER&quot;</span><span class="p">,</span> <span class="s2">&quot;LCASE&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Lower-3899"><a href="#Lower-3899"><span class="linenos">3899</span></a><span class="k">class</span> <span class="nc">Lower</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Lower-3900"><a href="#Lower-3900"><span class="linenos">3900</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;LOWER&quot;</span><span class="p">,</span> <span class="s2">&quot;LCASE&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -38621,6 +40384,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Lower.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Lower.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Lower.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Lower.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Lower.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Lower.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Lower.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Lower.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Lower.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Lower.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38637,8 +40407,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Map"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Map-3760"><a href="#Map-3760"><span class="linenos">3760</span></a><span class="k">class</span> <span class="nc">Map</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Map-3761"><a href="#Map-3761"><span class="linenos">3761</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Map-3903"><a href="#Map-3903"><span class="linenos">3903</span></a><span class="k">class</span> <span class="nc">Map</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Map-3904"><a href="#Map-3904"><span class="linenos">3904</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -38698,6 +40468,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Map.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Map.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Map.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Map.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Map.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Map.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Map.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Map.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Map.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Map.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38714,8 +40491,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StarMap"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StarMap-3764"><a href="#StarMap-3764"><span class="linenos">3764</span></a><span class="k">class</span> <span class="nc">StarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StarMap-3765"><a href="#StarMap-3765"><span class="linenos">3765</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StarMap-3907"><a href="#StarMap-3907"><span class="linenos">3907</span></a><span class="k">class</span> <span class="nc">StarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StarMap-3908"><a href="#StarMap-3908"><span class="linenos">3908</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -38775,6 +40552,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StarMap.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StarMap.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StarMap.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StarMap.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StarMap.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StarMap.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StarMap.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StarMap.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StarMap.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StarMap.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38791,9 +40575,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#VarMap"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="VarMap-3768"><a href="#VarMap-3768"><span class="linenos">3768</span></a><span class="k">class</span> <span class="nc">VarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="VarMap-3769"><a href="#VarMap-3769"><span class="linenos">3769</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="VarMap-3770"><a href="#VarMap-3770"><span class="linenos">3770</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="VarMap-3911"><a href="#VarMap-3911"><span class="linenos">3911</span></a><span class="k">class</span> <span class="nc">VarMap</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="VarMap-3912"><a href="#VarMap-3912"><span class="linenos">3912</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;keys&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;values&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="VarMap-3913"><a href="#VarMap-3913"><span class="linenos">3913</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -38853,6 +40637,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="VarMap.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="VarMap.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="VarMap.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="VarMap.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="VarMap.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="VarMap.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="VarMap.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="VarMap.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="VarMap.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="VarMap.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38869,8 +40660,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#MatchAgainst"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MatchAgainst-3774"><a href="#MatchAgainst-3774"><span class="linenos">3774</span></a><span class="k">class</span> <span class="nc">MatchAgainst</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="MatchAgainst-3775"><a href="#MatchAgainst-3775"><span class="linenos">3775</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;modifier&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MatchAgainst-3917"><a href="#MatchAgainst-3917"><span class="linenos">3917</span></a><span class="k">class</span> <span class="nc">MatchAgainst</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="MatchAgainst-3918"><a href="#MatchAgainst-3918"><span class="linenos">3918</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;modifier&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -38930,6 +40721,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="MatchAgainst.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="MatchAgainst.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="MatchAgainst.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="MatchAgainst.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="MatchAgainst.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="MatchAgainst.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="MatchAgainst.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="MatchAgainst.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="MatchAgainst.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="MatchAgainst.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -38946,9 +40744,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Max"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Max-3778"><a href="#Max-3778"><span class="linenos">3778</span></a><span class="k">class</span> <span class="nc">Max</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Max-3779"><a href="#Max-3779"><span class="linenos">3779</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Max-3780"><a href="#Max-3780"><span class="linenos">3780</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Max-3921"><a href="#Max-3921"><span class="linenos">3921</span></a><span class="k">class</span> <span class="nc">Max</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Max-3922"><a href="#Max-3922"><span class="linenos">3922</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Max-3923"><a href="#Max-3923"><span class="linenos">3923</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -39008,6 +40806,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Max.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Max.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Max.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Max.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Max.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Max.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Max.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Max.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Max.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Max.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39024,8 +40829,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#MD5"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="MD5-3783"><a href="#MD5-3783"><span class="linenos">3783</span></a><span class="k">class</span> <span class="nc">MD5</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="MD5-3784"><a href="#MD5-3784"><span class="linenos">3784</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="MD5-3926"><a href="#MD5-3926"><span class="linenos">3926</span></a><span class="k">class</span> <span class="nc">MD5</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="MD5-3927"><a href="#MD5-3927"><span class="linenos">3927</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;MD5&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -39085,6 +40890,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="MD5.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="MD5.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="MD5.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="MD5.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="MD5.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="MD5.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="MD5.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="MD5.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="MD5.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="MD5.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39101,9 +40913,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Min"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Min-3787"><a href="#Min-3787"><span class="linenos">3787</span></a><span class="k">class</span> <span class="nc">Min</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Min-3788"><a href="#Min-3788"><span class="linenos">3788</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="Min-3789"><a href="#Min-3789"><span class="linenos">3789</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Min-3930"><a href="#Min-3930"><span class="linenos">3930</span></a><span class="k">class</span> <span class="nc">Min</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Min-3931"><a href="#Min-3931"><span class="linenos">3931</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="Min-3932"><a href="#Min-3932"><span class="linenos">3932</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -39163,6 +40975,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Min.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Min.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Min.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Min.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Min.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Min.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Min.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Min.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Min.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Min.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39179,8 +40998,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Month"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Month-3792"><a href="#Month-3792"><span class="linenos">3792</span></a><span class="k">class</span> <span class="nc">Month</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Month-3793"><a href="#Month-3793"><span class="linenos">3793</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Month-3935"><a href="#Month-3935"><span class="linenos">3935</span></a><span class="k">class</span> <span class="nc">Month</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Month-3936"><a href="#Month-3936"><span class="linenos">3936</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -39240,6 +41059,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Month.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Month.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Month.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Month.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Month.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Month.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Month.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Month.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Month.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Month.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39256,8 +41082,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Nvl2"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Nvl2-3796"><a href="#Nvl2-3796"><span class="linenos">3796</span></a><span class="k">class</span> <span class="nc">Nvl2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Nvl2-3797"><a href="#Nvl2-3797"><span class="linenos">3797</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Nvl2-3939"><a href="#Nvl2-3939"><span class="linenos">3939</span></a><span class="k">class</span> <span class="nc">Nvl2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Nvl2-3940"><a href="#Nvl2-3940"><span class="linenos">3940</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;true&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -39317,6 +41143,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Nvl2.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Nvl2.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Nvl2.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Nvl2.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Nvl2.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Nvl2.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Nvl2.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Nvl2.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Nvl2.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Nvl2.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39333,8 +41166,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Posexplode"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Posexplode-3800"><a href="#Posexplode-3800"><span class="linenos">3800</span></a><span class="k">class</span> <span class="nc">Posexplode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Posexplode-3801"><a href="#Posexplode-3801"><span class="linenos">3801</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Posexplode-3943"><a href="#Posexplode-3943"><span class="linenos">3943</span></a><span class="k">class</span> <span class="nc">Posexplode</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Posexplode-3944"><a href="#Posexplode-3944"><span class="linenos">3944</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -39394,6 +41227,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Posexplode.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Posexplode.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Posexplode.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Posexplode.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Posexplode.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Posexplode.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Posexplode.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Posexplode.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Posexplode.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Posexplode.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39410,8 +41250,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Pow"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Pow-3804"><a href="#Pow-3804"><span class="linenos">3804</span></a><span class="k">class</span> <span class="nc">Pow</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="Pow-3805"><a href="#Pow-3805"><span class="linenos">3805</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;POWER&quot;</span><span class="p">,</span> <span class="s2">&quot;POW&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Pow-3947"><a href="#Pow-3947"><span class="linenos">3947</span></a><span class="k">class</span> <span class="nc">Pow</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="Pow-3948"><a href="#Pow-3948"><span class="linenos">3948</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;POWER&quot;</span><span class="p">,</span> <span class="s2">&quot;POW&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -39471,6 +41311,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Pow.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Pow.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Pow.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Pow.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Pow.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Pow.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Pow.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Pow.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Pow.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Pow.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39487,8 +41334,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#PercentileCont"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PercentileCont-3808"><a href="#PercentileCont-3808"><span class="linenos">3808</span></a><span class="k">class</span> <span class="nc">PercentileCont</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="PercentileCont-3809"><a href="#PercentileCont-3809"><span class="linenos">3809</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PercentileCont-3951"><a href="#PercentileCont-3951"><span class="linenos">3951</span></a><span class="k">class</span> <span class="nc">PercentileCont</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="PercentileCont-3952"><a href="#PercentileCont-3952"><span class="linenos">3952</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -39548,6 +41395,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="PercentileCont.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="PercentileCont.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="PercentileCont.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="PercentileCont.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="PercentileCont.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="PercentileCont.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="PercentileCont.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="PercentileCont.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="PercentileCont.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="PercentileCont.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39564,8 +41418,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#PercentileDisc"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="PercentileDisc-3812"><a href="#PercentileDisc-3812"><span class="linenos">3812</span></a><span class="k">class</span> <span class="nc">PercentileDisc</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="PercentileDisc-3813"><a href="#PercentileDisc-3813"><span class="linenos">3813</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="PercentileDisc-3955"><a href="#PercentileDisc-3955"><span class="linenos">3955</span></a><span class="k">class</span> <span class="nc">PercentileDisc</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="PercentileDisc-3956"><a href="#PercentileDisc-3956"><span class="linenos">3956</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">False</span><span class="p">}</span>
</span></pre></div>
@@ -39625,6 +41479,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="PercentileDisc.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="PercentileDisc.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="PercentileDisc.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="PercentileDisc.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="PercentileDisc.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="PercentileDisc.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="PercentileDisc.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="PercentileDisc.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="PercentileDisc.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="PercentileDisc.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39641,8 +41502,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Quantile"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Quantile-3816"><a href="#Quantile-3816"><span class="linenos">3816</span></a><span class="k">class</span> <span class="nc">Quantile</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Quantile-3817"><a href="#Quantile-3817"><span class="linenos">3817</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Quantile-3959"><a href="#Quantile-3959"><span class="linenos">3959</span></a><span class="k">class</span> <span class="nc">Quantile</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Quantile-3960"><a href="#Quantile-3960"><span class="linenos">3960</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -39702,6 +41563,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Quantile.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Quantile.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Quantile.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Quantile.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Quantile.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Quantile.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Quantile.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Quantile.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Quantile.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Quantile.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39718,9 +41586,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Quantiles"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Quantiles-3822"><a href="#Quantiles-3822"><span class="linenos">3822</span></a><span class="k">class</span> <span class="nc">Quantiles</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Quantiles-3823"><a href="#Quantiles-3823"><span class="linenos">3823</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
-</span><span id="Quantiles-3824"><a href="#Quantiles-3824"><span class="linenos">3824</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Quantiles-3965"><a href="#Quantiles-3965"><span class="linenos">3965</span></a><span class="k">class</span> <span class="nc">Quantiles</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Quantiles-3966"><a href="#Quantiles-3966"><span class="linenos">3966</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
+</span><span id="Quantiles-3967"><a href="#Quantiles-3967"><span class="linenos">3967</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -39780,6 +41648,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Quantiles.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Quantiles.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Quantiles.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Quantiles.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Quantiles.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Quantiles.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Quantiles.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Quantiles.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Quantiles.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Quantiles.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39796,8 +41671,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#QuantileIf"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="QuantileIf-3827"><a href="#QuantileIf-3827"><span class="linenos">3827</span></a><span class="k">class</span> <span class="nc">QuantileIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="QuantileIf-3828"><a href="#QuantileIf-3828"><span class="linenos">3828</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="QuantileIf-3970"><a href="#QuantileIf-3970"><span class="linenos">3970</span></a><span class="k">class</span> <span class="nc">QuantileIf</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="QuantileIf-3971"><a href="#QuantileIf-3971"><span class="linenos">3971</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;parameters&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">True</span><span class="p">}</span>
</span></pre></div>
@@ -39857,6 +41732,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="QuantileIf.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="QuantileIf.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="QuantileIf.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="QuantileIf.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="QuantileIf.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="QuantileIf.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="QuantileIf.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="QuantileIf.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="QuantileIf.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="QuantileIf.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39873,8 +41755,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ApproxQuantile"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ApproxQuantile-3831"><a href="#ApproxQuantile-3831"><span class="linenos">3831</span></a><span class="k">class</span> <span class="nc">ApproxQuantile</span><span class="p">(</span><span class="n">Quantile</span><span class="p">):</span>
-</span><span id="ApproxQuantile-3832"><a href="#ApproxQuantile-3832"><span class="linenos">3832</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;weight&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ApproxQuantile-3974"><a href="#ApproxQuantile-3974"><span class="linenos">3974</span></a><span class="k">class</span> <span class="nc">ApproxQuantile</span><span class="p">(</span><span class="n">Quantile</span><span class="p">):</span>
+</span><span id="ApproxQuantile-3975"><a href="#ApproxQuantile-3975"><span class="linenos">3975</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;quantile&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;accuracy&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;weight&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -39934,6 +41816,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ApproxQuantile.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ApproxQuantile.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ApproxQuantile.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ApproxQuantile.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ApproxQuantile.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ApproxQuantile.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ApproxQuantile.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ApproxQuantile.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ApproxQuantile.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ApproxQuantile.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -39950,8 +41839,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#RangeN"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RangeN-3835"><a href="#RangeN-3835"><span class="linenos">3835</span></a><span class="k">class</span> <span class="nc">RangeN</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="RangeN-3836"><a href="#RangeN-3836"><span class="linenos">3836</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;each&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RangeN-3978"><a href="#RangeN-3978"><span class="linenos">3978</span></a><span class="k">class</span> <span class="nc">RangeN</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="RangeN-3979"><a href="#RangeN-3979"><span class="linenos">3979</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;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;each&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -40011,6 +41900,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="RangeN.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="RangeN.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="RangeN.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="RangeN.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="RangeN.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="RangeN.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="RangeN.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="RangeN.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="RangeN.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="RangeN.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40027,10 +41923,10 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#ReadCSV"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="ReadCSV-3839"><a href="#ReadCSV-3839"><span class="linenos">3839</span></a><span class="k">class</span> <span class="nc">ReadCSV</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="ReadCSV-3840"><a href="#ReadCSV-3840"><span class="linenos">3840</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;READ_CSV&quot;</span><span class="p">]</span>
-</span><span id="ReadCSV-3841"><a href="#ReadCSV-3841"><span class="linenos">3841</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="ReadCSV-3842"><a href="#ReadCSV-3842"><span class="linenos">3842</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="ReadCSV-3982"><a href="#ReadCSV-3982"><span class="linenos">3982</span></a><span class="k">class</span> <span class="nc">ReadCSV</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="ReadCSV-3983"><a href="#ReadCSV-3983"><span class="linenos">3983</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;READ_CSV&quot;</span><span class="p">]</span>
+</span><span id="ReadCSV-3984"><a href="#ReadCSV-3984"><span class="linenos">3984</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="ReadCSV-3985"><a href="#ReadCSV-3985"><span class="linenos">3985</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;expressions&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -40090,6 +41986,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="ReadCSV.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="ReadCSV.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="ReadCSV.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="ReadCSV.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="ReadCSV.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="ReadCSV.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="ReadCSV.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="ReadCSV.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="ReadCSV.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="ReadCSV.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40106,8 +42009,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Reduce"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Reduce-3845"><a href="#Reduce-3845"><span class="linenos">3845</span></a><span class="k">class</span> <span class="nc">Reduce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Reduce-3846"><a href="#Reduce-3846"><span class="linenos">3846</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;initial&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;merge&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;finish&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Reduce-3988"><a href="#Reduce-3988"><span class="linenos">3988</span></a><span class="k">class</span> <span class="nc">Reduce</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Reduce-3989"><a href="#Reduce-3989"><span class="linenos">3989</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;initial&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;merge&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;finish&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -40167,6 +42070,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Reduce.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Reduce.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Reduce.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Reduce.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Reduce.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Reduce.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Reduce.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Reduce.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Reduce.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Reduce.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40183,14 +42093,14 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#RegexpExtract"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpExtract-3849"><a href="#RegexpExtract-3849"><span class="linenos">3849</span></a><span class="k">class</span> <span class="nc">RegexpExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="RegexpExtract-3850"><a href="#RegexpExtract-3850"><span class="linenos">3850</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="RegexpExtract-3851"><a href="#RegexpExtract-3851"><span class="linenos">3851</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="RegexpExtract-3852"><a href="#RegexpExtract-3852"><span class="linenos">3852</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="RegexpExtract-3853"><a href="#RegexpExtract-3853"><span class="linenos">3853</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RegexpExtract-3854"><a href="#RegexpExtract-3854"><span class="linenos">3854</span></a> <span class="s2">&quot;occurrence&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RegexpExtract-3855"><a href="#RegexpExtract-3855"><span class="linenos">3855</span></a> <span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="RegexpExtract-3856"><a href="#RegexpExtract-3856"><span class="linenos">3856</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpExtract-3992"><a href="#RegexpExtract-3992"><span class="linenos">3992</span></a><span class="k">class</span> <span class="nc">RegexpExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="RegexpExtract-3993"><a href="#RegexpExtract-3993"><span class="linenos">3993</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="RegexpExtract-3994"><a href="#RegexpExtract-3994"><span class="linenos">3994</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="RegexpExtract-3995"><a href="#RegexpExtract-3995"><span class="linenos">3995</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="RegexpExtract-3996"><a href="#RegexpExtract-3996"><span class="linenos">3996</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RegexpExtract-3997"><a href="#RegexpExtract-3997"><span class="linenos">3997</span></a> <span class="s2">&quot;occurrence&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RegexpExtract-3998"><a href="#RegexpExtract-3998"><span class="linenos">3998</span></a> <span class="s2">&quot;group&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="RegexpExtract-3999"><a href="#RegexpExtract-3999"><span class="linenos">3999</span></a> <span class="p">}</span>
</span></pre></div>
@@ -40250,6 +42160,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="RegexpExtract.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="RegexpExtract.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="RegexpExtract.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="RegexpExtract.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="RegexpExtract.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="RegexpExtract.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="RegexpExtract.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="RegexpExtract.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="RegexpExtract.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="RegexpExtract.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40266,8 +42183,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#RegexpLike"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpLike-3859"><a href="#RegexpLike-3859"><span class="linenos">3859</span></a><span class="k">class</span> <span class="nc">RegexpLike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="RegexpLike-3860"><a href="#RegexpLike-3860"><span class="linenos">3860</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpLike-4002"><a href="#RegexpLike-4002"><span class="linenos">4002</span></a><span class="k">class</span> <span class="nc">RegexpLike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="RegexpLike-4003"><a href="#RegexpLike-4003"><span class="linenos">4003</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -40327,6 +42244,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="RegexpLike.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="RegexpLike.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="RegexpLike.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="RegexpLike.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="RegexpLike.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="RegexpLike.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="RegexpLike.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="RegexpLike.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="RegexpLike.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="RegexpLike.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40343,8 +42267,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#RegexpILike"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpILike-3863"><a href="#RegexpILike-3863"><span class="linenos">3863</span></a><span class="k">class</span> <span class="nc">RegexpILike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="RegexpILike-3864"><a href="#RegexpILike-3864"><span class="linenos">3864</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpILike-4006"><a href="#RegexpILike-4006"><span class="linenos">4006</span></a><span class="k">class</span> <span class="nc">RegexpILike</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="RegexpILike-4007"><a href="#RegexpILike-4007"><span class="linenos">4007</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;flag&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -40404,6 +42328,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="RegexpILike.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="RegexpILike.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="RegexpILike.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="RegexpILike.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="RegexpILike.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="RegexpILike.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="RegexpILike.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="RegexpILike.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="RegexpILike.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="RegexpILike.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40420,8 +42351,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#RegexpSplit"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpSplit-3869"><a href="#RegexpSplit-3869"><span class="linenos">3869</span></a><span class="k">class</span> <span class="nc">RegexpSplit</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="RegexpSplit-3870"><a href="#RegexpSplit-3870"><span class="linenos">3870</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RegexpSplit-4012"><a href="#RegexpSplit-4012"><span class="linenos">4012</span></a><span class="k">class</span> <span class="nc">RegexpSplit</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="RegexpSplit-4013"><a href="#RegexpSplit-4013"><span class="linenos">4013</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -40481,6 +42412,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="RegexpSplit.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="RegexpSplit.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="RegexpSplit.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="RegexpSplit.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="RegexpSplit.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="RegexpSplit.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="RegexpSplit.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="RegexpSplit.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="RegexpSplit.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="RegexpSplit.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40497,8 +42435,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Repeat"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Repeat-3873"><a href="#Repeat-3873"><span class="linenos">3873</span></a><span class="k">class</span> <span class="nc">Repeat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Repeat-3874"><a href="#Repeat-3874"><span class="linenos">3874</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;times&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Repeat-4016"><a href="#Repeat-4016"><span class="linenos">4016</span></a><span class="k">class</span> <span class="nc">Repeat</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Repeat-4017"><a href="#Repeat-4017"><span class="linenos">4017</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;times&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -40558,6 +42496,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Repeat.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Repeat.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Repeat.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Repeat.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Repeat.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Repeat.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Repeat.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Repeat.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Repeat.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Repeat.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40574,8 +42519,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Round"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Round-3877"><a href="#Round-3877"><span class="linenos">3877</span></a><span class="k">class</span> <span class="nc">Round</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Round-3878"><a href="#Round-3878"><span class="linenos">3878</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Round-4020"><a href="#Round-4020"><span class="linenos">4020</span></a><span class="k">class</span> <span class="nc">Round</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Round-4021"><a href="#Round-4021"><span class="linenos">4021</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;decimals&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -40635,6 +42580,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Round.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Round.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Round.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Round.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Round.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Round.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Round.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Round.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Round.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Round.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40651,8 +42603,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#RowNumber"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="RowNumber-3881"><a href="#RowNumber-3881"><span class="linenos">3881</span></a><span class="k">class</span> <span class="nc">RowNumber</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="RowNumber-3882"><a href="#RowNumber-3882"><span class="linenos">3882</span></a> <span class="n">arg_types</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="RowNumber-4024"><a href="#RowNumber-4024"><span class="linenos">4024</span></a><span class="k">class</span> <span class="nc">RowNumber</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="RowNumber-4025"><a href="#RowNumber-4025"><span class="linenos">4025</span></a> <span class="n">arg_types</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></pre></div>
@@ -40712,6 +42664,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="RowNumber.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="RowNumber.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="RowNumber.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="RowNumber.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="RowNumber.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="RowNumber.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="RowNumber.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="RowNumber.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="RowNumber.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="RowNumber.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40728,8 +42687,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#SafeDivide"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SafeDivide-3885"><a href="#SafeDivide-3885"><span class="linenos">3885</span></a><span class="k">class</span> <span class="nc">SafeDivide</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="SafeDivide-3886"><a href="#SafeDivide-3886"><span class="linenos">3886</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SafeDivide-4028"><a href="#SafeDivide-4028"><span class="linenos">4028</span></a><span class="k">class</span> <span class="nc">SafeDivide</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="SafeDivide-4029"><a href="#SafeDivide-4029"><span class="linenos">4029</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></pre></div>
@@ -40789,6 +42748,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="SafeDivide.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="SafeDivide.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="SafeDivide.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="SafeDivide.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="SafeDivide.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="SafeDivide.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="SafeDivide.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="SafeDivide.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="SafeDivide.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="SafeDivide.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40805,8 +42771,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#SetAgg"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SetAgg-3889"><a href="#SetAgg-3889"><span class="linenos">3889</span></a><span class="k">class</span> <span class="nc">SetAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="SetAgg-3890"><a href="#SetAgg-3890"><span class="linenos">3890</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SetAgg-4032"><a href="#SetAgg-4032"><span class="linenos">4032</span></a><span class="k">class</span> <span class="nc">SetAgg</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="SetAgg-4033"><a href="#SetAgg-4033"><span class="linenos">4033</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -40866,6 +42832,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="SetAgg.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="SetAgg.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="SetAgg.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="SetAgg.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="SetAgg.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="SetAgg.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="SetAgg.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="SetAgg.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="SetAgg.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="SetAgg.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40882,8 +42855,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#SHA"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SHA-3893"><a href="#SHA-3893"><span class="linenos">3893</span></a><span class="k">class</span> <span class="nc">SHA</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="SHA-3894"><a href="#SHA-3894"><span class="linenos">3894</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA&quot;</span><span class="p">,</span> <span class="s2">&quot;SHA1&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SHA-4036"><a href="#SHA-4036"><span class="linenos">4036</span></a><span class="k">class</span> <span class="nc">SHA</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="SHA-4037"><a href="#SHA-4037"><span class="linenos">4037</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA&quot;</span><span class="p">,</span> <span class="s2">&quot;SHA1&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -40943,6 +42916,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="SHA.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="SHA.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="SHA.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="SHA.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="SHA.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="SHA.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="SHA.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="SHA.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="SHA.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="SHA.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -40959,9 +42939,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#SHA2"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SHA2-3897"><a href="#SHA2-3897"><span class="linenos">3897</span></a><span class="k">class</span> <span class="nc">SHA2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="SHA2-3898"><a href="#SHA2-3898"><span class="linenos">3898</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA2&quot;</span><span class="p">]</span>
-</span><span id="SHA2-3899"><a href="#SHA2-3899"><span class="linenos">3899</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;length&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SHA2-4040"><a href="#SHA2-4040"><span class="linenos">4040</span></a><span class="k">class</span> <span class="nc">SHA2</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="SHA2-4041"><a href="#SHA2-4041"><span class="linenos">4041</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;SHA2&quot;</span><span class="p">]</span>
+</span><span id="SHA2-4042"><a href="#SHA2-4042"><span class="linenos">4042</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;length&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -41021,6 +43001,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="SHA2.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="SHA2.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="SHA2.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="SHA2.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="SHA2.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="SHA2.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="SHA2.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="SHA2.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="SHA2.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="SHA2.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41037,8 +43024,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#SortArray"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="SortArray-3902"><a href="#SortArray-3902"><span class="linenos">3902</span></a><span class="k">class</span> <span class="nc">SortArray</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="SortArray-3903"><a href="#SortArray-3903"><span class="linenos">3903</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;asc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="SortArray-4045"><a href="#SortArray-4045"><span class="linenos">4045</span></a><span class="k">class</span> <span class="nc">SortArray</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="SortArray-4046"><a href="#SortArray-4046"><span class="linenos">4046</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;asc&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -41098,6 +43085,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="SortArray.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="SortArray.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="SortArray.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="SortArray.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="SortArray.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="SortArray.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="SortArray.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="SortArray.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="SortArray.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="SortArray.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41114,8 +43108,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Split"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Split-3906"><a href="#Split-3906"><span class="linenos">3906</span></a><span class="k">class</span> <span class="nc">Split</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Split-3907"><a href="#Split-3907"><span class="linenos">3907</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Split-4049"><a href="#Split-4049"><span class="linenos">4049</span></a><span class="k">class</span> <span class="nc">Split</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Split-4050"><a href="#Split-4050"><span class="linenos">4050</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;limit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -41175,6 +43169,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Split.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Split.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Split.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Split.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Split.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Split.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Split.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Split.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Split.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Split.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41191,8 +43192,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Substring"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Substring-3912"><a href="#Substring-3912"><span class="linenos">3912</span></a><span class="k">class</span> <span class="nc">Substring</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Substring-3913"><a href="#Substring-3913"><span class="linenos">3913</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;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Substring-4055"><a href="#Substring-4055"><span class="linenos">4055</span></a><span class="k">class</span> <span class="nc">Substring</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Substring-4056"><a href="#Substring-4056"><span class="linenos">4056</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;start&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -41252,6 +43253,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Substring.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Substring.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Substring.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Substring.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Substring.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Substring.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Substring.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Substring.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Substring.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Substring.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41268,13 +43276,13 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StrPosition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StrPosition-3916"><a href="#StrPosition-3916"><span class="linenos">3916</span></a><span class="k">class</span> <span class="nc">StrPosition</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StrPosition-3917"><a href="#StrPosition-3917"><span class="linenos">3917</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="StrPosition-3918"><a href="#StrPosition-3918"><span class="linenos">3918</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="StrPosition-3919"><a href="#StrPosition-3919"><span class="linenos">3919</span></a> <span class="s2">&quot;substr&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="StrPosition-3920"><a href="#StrPosition-3920"><span class="linenos">3920</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="StrPosition-3921"><a href="#StrPosition-3921"><span class="linenos">3921</span></a> <span class="s2">&quot;instance&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="StrPosition-3922"><a href="#StrPosition-3922"><span class="linenos">3922</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StrPosition-4059"><a href="#StrPosition-4059"><span class="linenos">4059</span></a><span class="k">class</span> <span class="nc">StrPosition</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StrPosition-4060"><a href="#StrPosition-4060"><span class="linenos">4060</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="StrPosition-4061"><a href="#StrPosition-4061"><span class="linenos">4061</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="StrPosition-4062"><a href="#StrPosition-4062"><span class="linenos">4062</span></a> <span class="s2">&quot;substr&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="StrPosition-4063"><a href="#StrPosition-4063"><span class="linenos">4063</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="StrPosition-4064"><a href="#StrPosition-4064"><span class="linenos">4064</span></a> <span class="s2">&quot;instance&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="StrPosition-4065"><a href="#StrPosition-4065"><span class="linenos">4065</span></a> <span class="p">}</span>
</span></pre></div>
@@ -41334,6 +43342,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StrPosition.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StrPosition.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StrPosition.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StrPosition.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StrPosition.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StrPosition.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StrPosition.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StrPosition.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StrPosition.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StrPosition.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41350,8 +43365,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StrToDate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StrToDate-3925"><a href="#StrToDate-3925"><span class="linenos">3925</span></a><span class="k">class</span> <span class="nc">StrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StrToDate-3926"><a href="#StrToDate-3926"><span class="linenos">3926</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StrToDate-4068"><a href="#StrToDate-4068"><span class="linenos">4068</span></a><span class="k">class</span> <span class="nc">StrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StrToDate-4069"><a href="#StrToDate-4069"><span class="linenos">4069</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -41411,6 +43426,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StrToDate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StrToDate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StrToDate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StrToDate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StrToDate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StrToDate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StrToDate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StrToDate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StrToDate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StrToDate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41427,8 +43449,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StrToTime"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StrToTime-3929"><a href="#StrToTime-3929"><span class="linenos">3929</span></a><span class="k">class</span> <span class="nc">StrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StrToTime-3930"><a href="#StrToTime-3930"><span class="linenos">3930</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StrToTime-4072"><a href="#StrToTime-4072"><span class="linenos">4072</span></a><span class="k">class</span> <span class="nc">StrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StrToTime-4073"><a href="#StrToTime-4073"><span class="linenos">4073</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -41488,6 +43510,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StrToTime.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StrToTime.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StrToTime.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StrToTime.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StrToTime.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StrToTime.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StrToTime.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StrToTime.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StrToTime.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StrToTime.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41504,8 +43533,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StrToUnix"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StrToUnix-3935"><a href="#StrToUnix-3935"><span class="linenos">3935</span></a><span class="k">class</span> <span class="nc">StrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StrToUnix-3936"><a href="#StrToUnix-3936"><span class="linenos">3936</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StrToUnix-4078"><a href="#StrToUnix-4078"><span class="linenos">4078</span></a><span class="k">class</span> <span class="nc">StrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StrToUnix-4079"><a href="#StrToUnix-4079"><span class="linenos">4079</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -41565,6 +43594,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StrToUnix.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StrToUnix.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StrToUnix.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StrToUnix.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StrToUnix.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StrToUnix.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StrToUnix.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StrToUnix.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StrToUnix.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StrToUnix.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41581,8 +43617,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#NumberToStr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="NumberToStr-3939"><a href="#NumberToStr-3939"><span class="linenos">3939</span></a><span class="k">class</span> <span class="nc">NumberToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="NumberToStr-3940"><a href="#NumberToStr-3940"><span class="linenos">3940</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NumberToStr-4082"><a href="#NumberToStr-4082"><span class="linenos">4082</span></a><span class="k">class</span> <span class="nc">NumberToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="NumberToStr-4083"><a href="#NumberToStr-4083"><span class="linenos">4083</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -41642,6 +43678,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="NumberToStr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="NumberToStr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="NumberToStr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="NumberToStr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="NumberToStr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="NumberToStr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="NumberToStr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="NumberToStr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="NumberToStr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="NumberToStr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41658,9 +43701,9 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Struct"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Struct-3943"><a href="#Struct-3943"><span class="linenos">3943</span></a><span class="k">class</span> <span class="nc">Struct</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Struct-3944"><a href="#Struct-3944"><span class="linenos">3944</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
-</span><span id="Struct-3945"><a href="#Struct-3945"><span class="linenos">3945</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Struct-4086"><a href="#Struct-4086"><span class="linenos">4086</span></a><span class="k">class</span> <span class="nc">Struct</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Struct-4087"><a href="#Struct-4087"><span class="linenos">4087</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+</span><span id="Struct-4088"><a href="#Struct-4088"><span class="linenos">4088</span></a> <span class="n">is_var_len_args</span> <span class="o">=</span> <span class="kc">True</span>
</span></pre></div>
@@ -41720,6 +43763,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Struct.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Struct.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Struct.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Struct.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Struct.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Struct.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Struct.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Struct.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Struct.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Struct.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41736,8 +43786,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StructExtract"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StructExtract-3948"><a href="#StructExtract-3948"><span class="linenos">3948</span></a><span class="k">class</span> <span class="nc">StructExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="StructExtract-3949"><a href="#StructExtract-3949"><span class="linenos">3949</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StructExtract-4091"><a href="#StructExtract-4091"><span class="linenos">4091</span></a><span class="k">class</span> <span class="nc">StructExtract</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="StructExtract-4092"><a href="#StructExtract-4092"><span class="linenos">4092</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></pre></div>
@@ -41797,6 +43847,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StructExtract.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StructExtract.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StructExtract.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StructExtract.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StructExtract.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StructExtract.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StructExtract.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StructExtract.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StructExtract.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StructExtract.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41813,8 +43870,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Sum"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Sum-3952"><a href="#Sum-3952"><span class="linenos">3952</span></a><span class="k">class</span> <span class="nc">Sum</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Sum-3953"><a href="#Sum-3953"><span class="linenos">3953</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sum-4095"><a href="#Sum-4095"><span class="linenos">4095</span></a><span class="k">class</span> <span class="nc">Sum</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Sum-4096"><a href="#Sum-4096"><span class="linenos">4096</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41874,6 +43931,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Sum.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Sum.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Sum.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Sum.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Sum.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Sum.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Sum.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Sum.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Sum.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Sum.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41890,8 +43954,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Sqrt"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Sqrt-3956"><a href="#Sqrt-3956"><span class="linenos">3956</span></a><span class="k">class</span> <span class="nc">Sqrt</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Sqrt-3957"><a href="#Sqrt-3957"><span class="linenos">3957</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Sqrt-4099"><a href="#Sqrt-4099"><span class="linenos">4099</span></a><span class="k">class</span> <span class="nc">Sqrt</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Sqrt-4100"><a href="#Sqrt-4100"><span class="linenos">4100</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -41951,6 +44015,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Sqrt.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Sqrt.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Sqrt.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Sqrt.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Sqrt.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Sqrt.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Sqrt.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Sqrt.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Sqrt.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Sqrt.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -41967,8 +44038,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Stddev"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Stddev-3960"><a href="#Stddev-3960"><span class="linenos">3960</span></a><span class="k">class</span> <span class="nc">Stddev</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Stddev-3961"><a href="#Stddev-3961"><span class="linenos">3961</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Stddev-4103"><a href="#Stddev-4103"><span class="linenos">4103</span></a><span class="k">class</span> <span class="nc">Stddev</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Stddev-4104"><a href="#Stddev-4104"><span class="linenos">4104</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42028,6 +44099,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Stddev.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Stddev.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Stddev.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Stddev.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Stddev.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Stddev.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Stddev.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Stddev.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Stddev.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Stddev.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42044,8 +44122,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StddevPop"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StddevPop-3964"><a href="#StddevPop-3964"><span class="linenos">3964</span></a><span class="k">class</span> <span class="nc">StddevPop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="StddevPop-3965"><a href="#StddevPop-3965"><span class="linenos">3965</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StddevPop-4107"><a href="#StddevPop-4107"><span class="linenos">4107</span></a><span class="k">class</span> <span class="nc">StddevPop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="StddevPop-4108"><a href="#StddevPop-4108"><span class="linenos">4108</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42105,6 +44183,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StddevPop.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StddevPop.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StddevPop.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StddevPop.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StddevPop.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StddevPop.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StddevPop.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StddevPop.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StddevPop.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StddevPop.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42121,8 +44206,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#StddevSamp"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="StddevSamp-3968"><a href="#StddevSamp-3968"><span class="linenos">3968</span></a><span class="k">class</span> <span class="nc">StddevSamp</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="StddevSamp-3969"><a href="#StddevSamp-3969"><span class="linenos">3969</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="StddevSamp-4111"><a href="#StddevSamp-4111"><span class="linenos">4111</span></a><span class="k">class</span> <span class="nc">StddevSamp</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="StddevSamp-4112"><a href="#StddevSamp-4112"><span class="linenos">4112</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42182,6 +44267,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="StddevSamp.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="StddevSamp.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="StddevSamp.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="StddevSamp.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="StddevSamp.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="StddevSamp.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="StddevSamp.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="StddevSamp.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="StddevSamp.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="StddevSamp.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42198,8 +44290,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeToStr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToStr-3972"><a href="#TimeToStr-3972"><span class="linenos">3972</span></a><span class="k">class</span> <span class="nc">TimeToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TimeToStr-3973"><a href="#TimeToStr-3973"><span class="linenos">3973</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToStr-4115"><a href="#TimeToStr-4115"><span class="linenos">4115</span></a><span class="k">class</span> <span class="nc">TimeToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TimeToStr-4116"><a href="#TimeToStr-4116"><span class="linenos">4116</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;format&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -42259,6 +44351,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeToStr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeToStr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeToStr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeToStr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeToStr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeToStr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeToStr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeToStr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeToStr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeToStr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42275,8 +44374,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeToTimeStr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToTimeStr-3976"><a href="#TimeToTimeStr-3976"><span class="linenos">3976</span></a><span class="k">class</span> <span class="nc">TimeToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TimeToTimeStr-3977"><a href="#TimeToTimeStr-3977"><span class="linenos">3977</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToTimeStr-4119"><a href="#TimeToTimeStr-4119"><span class="linenos">4119</span></a><span class="k">class</span> <span class="nc">TimeToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TimeToTimeStr-4120"><a href="#TimeToTimeStr-4120"><span class="linenos">4120</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42336,6 +44435,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeToTimeStr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeToTimeStr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeToTimeStr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeToTimeStr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeToTimeStr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeToTimeStr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeToTimeStr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeToTimeStr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeToTimeStr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeToTimeStr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42352,8 +44458,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeToUnix"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToUnix-3980"><a href="#TimeToUnix-3980"><span class="linenos">3980</span></a><span class="k">class</span> <span class="nc">TimeToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TimeToUnix-3981"><a href="#TimeToUnix-3981"><span class="linenos">3981</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeToUnix-4123"><a href="#TimeToUnix-4123"><span class="linenos">4123</span></a><span class="k">class</span> <span class="nc">TimeToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TimeToUnix-4124"><a href="#TimeToUnix-4124"><span class="linenos">4124</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42413,6 +44519,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeToUnix.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeToUnix.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeToUnix.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeToUnix.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeToUnix.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeToUnix.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeToUnix.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeToUnix.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeToUnix.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeToUnix.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42429,8 +44542,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeStrToDate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToDate-3984"><a href="#TimeStrToDate-3984"><span class="linenos">3984</span></a><span class="k">class</span> <span class="nc">TimeStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TimeStrToDate-3985"><a href="#TimeStrToDate-3985"><span class="linenos">3985</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToDate-4127"><a href="#TimeStrToDate-4127"><span class="linenos">4127</span></a><span class="k">class</span> <span class="nc">TimeStrToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TimeStrToDate-4128"><a href="#TimeStrToDate-4128"><span class="linenos">4128</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42490,6 +44603,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeStrToDate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeStrToDate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeStrToDate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeStrToDate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeStrToDate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeStrToDate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeStrToDate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeStrToDate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeStrToDate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeStrToDate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42506,8 +44626,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeStrToTime"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToTime-3988"><a href="#TimeStrToTime-3988"><span class="linenos">3988</span></a><span class="k">class</span> <span class="nc">TimeStrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TimeStrToTime-3989"><a href="#TimeStrToTime-3989"><span class="linenos">3989</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToTime-4131"><a href="#TimeStrToTime-4131"><span class="linenos">4131</span></a><span class="k">class</span> <span class="nc">TimeStrToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TimeStrToTime-4132"><a href="#TimeStrToTime-4132"><span class="linenos">4132</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42567,6 +44687,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeStrToTime.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeStrToTime.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeStrToTime.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeStrToTime.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeStrToTime.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeStrToTime.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeStrToTime.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeStrToTime.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeStrToTime.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeStrToTime.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42583,8 +44710,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TimeStrToUnix"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToUnix-3992"><a href="#TimeStrToUnix-3992"><span class="linenos">3992</span></a><span class="k">class</span> <span class="nc">TimeStrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TimeStrToUnix-3993"><a href="#TimeStrToUnix-3993"><span class="linenos">3993</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TimeStrToUnix-4135"><a href="#TimeStrToUnix-4135"><span class="linenos">4135</span></a><span class="k">class</span> <span class="nc">TimeStrToUnix</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TimeStrToUnix-4136"><a href="#TimeStrToUnix-4136"><span class="linenos">4136</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42644,6 +44771,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TimeStrToUnix.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TimeStrToUnix.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TimeStrToUnix.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TimeStrToUnix.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TimeStrToUnix.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TimeStrToUnix.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TimeStrToUnix.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TimeStrToUnix.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TimeStrToUnix.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TimeStrToUnix.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42660,13 +44794,13 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Trim"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Trim-3996"><a href="#Trim-3996"><span class="linenos">3996</span></a><span class="k">class</span> <span class="nc">Trim</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Trim-3997"><a href="#Trim-3997"><span class="linenos">3997</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Trim-3998"><a href="#Trim-3998"><span class="linenos">3998</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Trim-3999"><a href="#Trim-3999"><span class="linenos">3999</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Trim-4000"><a href="#Trim-4000"><span class="linenos">4000</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Trim-4001"><a href="#Trim-4001"><span class="linenos">4001</span></a> <span class="s2">&quot;collation&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Trim-4002"><a href="#Trim-4002"><span class="linenos">4002</span></a> <span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Trim-4139"><a href="#Trim-4139"><span class="linenos">4139</span></a><span class="k">class</span> <span class="nc">Trim</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Trim-4140"><a href="#Trim-4140"><span class="linenos">4140</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Trim-4141"><a href="#Trim-4141"><span class="linenos">4141</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Trim-4142"><a href="#Trim-4142"><span class="linenos">4142</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Trim-4143"><a href="#Trim-4143"><span class="linenos">4143</span></a> <span class="s2">&quot;position&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Trim-4144"><a href="#Trim-4144"><span class="linenos">4144</span></a> <span class="s2">&quot;collation&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Trim-4145"><a href="#Trim-4145"><span class="linenos">4145</span></a> <span class="p">}</span>
</span></pre></div>
@@ -42726,6 +44860,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Trim.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Trim.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Trim.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Trim.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Trim.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Trim.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Trim.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Trim.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Trim.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Trim.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42742,8 +44883,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TsOrDsAdd"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDsAdd-4005"><a href="#TsOrDsAdd-4005"><span class="linenos">4005</span></a><span class="k">class</span> <span class="nc">TsOrDsAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
-</span><span id="TsOrDsAdd-4006"><a href="#TsOrDsAdd-4006"><span class="linenos">4006</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDsAdd-4148"><a href="#TsOrDsAdd-4148"><span class="linenos">4148</span></a><span class="k">class</span> <span class="nc">TsOrDsAdd</span><span class="p">(</span><span class="n">Func</span><span class="p">,</span> <span class="n">TimeUnit</span><span class="p">):</span>
+</span><span id="TsOrDsAdd-4149"><a href="#TsOrDsAdd-4149"><span class="linenos">4149</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;unit&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -42767,6 +44908,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TsOrDsAdd.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TsOrDsAdd.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TsOrDsAdd.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TsOrDsAdd.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TsOrDsAdd.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TsOrDsAdd.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TsOrDsAdd.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TsOrDsAdd.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TsOrDsAdd.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TsOrDsAdd.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
<div><dt><a href="#Expression">Expression</a></dt>
@@ -42822,8 +44970,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TsOrDsToDateStr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDsToDateStr-4009"><a href="#TsOrDsToDateStr-4009"><span class="linenos">4009</span></a><span class="k">class</span> <span class="nc">TsOrDsToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TsOrDsToDateStr-4010"><a href="#TsOrDsToDateStr-4010"><span class="linenos">4010</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDsToDateStr-4152"><a href="#TsOrDsToDateStr-4152"><span class="linenos">4152</span></a><span class="k">class</span> <span class="nc">TsOrDsToDateStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TsOrDsToDateStr-4153"><a href="#TsOrDsToDateStr-4153"><span class="linenos">4153</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -42883,6 +45031,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TsOrDsToDateStr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TsOrDsToDateStr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TsOrDsToDateStr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TsOrDsToDateStr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TsOrDsToDateStr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TsOrDsToDateStr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TsOrDsToDateStr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TsOrDsToDateStr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TsOrDsToDateStr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TsOrDsToDateStr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42899,8 +45054,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TsOrDsToDate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDsToDate-4013"><a href="#TsOrDsToDate-4013"><span class="linenos">4013</span></a><span class="k">class</span> <span class="nc">TsOrDsToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TsOrDsToDate-4014"><a href="#TsOrDsToDate-4014"><span class="linenos">4014</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDsToDate-4156"><a href="#TsOrDsToDate-4156"><span class="linenos">4156</span></a><span class="k">class</span> <span class="nc">TsOrDsToDate</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TsOrDsToDate-4157"><a href="#TsOrDsToDate-4157"><span class="linenos">4157</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -42960,6 +45115,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TsOrDsToDate.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TsOrDsToDate.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TsOrDsToDate.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TsOrDsToDate.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TsOrDsToDate.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TsOrDsToDate.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TsOrDsToDate.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TsOrDsToDate.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TsOrDsToDate.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TsOrDsToDate.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -42976,8 +45138,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#TsOrDiToDi"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDiToDi-4017"><a href="#TsOrDiToDi-4017"><span class="linenos">4017</span></a><span class="k">class</span> <span class="nc">TsOrDiToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="TsOrDiToDi-4018"><a href="#TsOrDiToDi-4018"><span class="linenos">4018</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="TsOrDiToDi-4160"><a href="#TsOrDiToDi-4160"><span class="linenos">4160</span></a><span class="k">class</span> <span class="nc">TsOrDiToDi</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="TsOrDiToDi-4161"><a href="#TsOrDiToDi-4161"><span class="linenos">4161</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43037,6 +45199,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="TsOrDiToDi.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="TsOrDiToDi.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="TsOrDiToDi.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="TsOrDiToDi.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="TsOrDiToDi.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="TsOrDiToDi.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="TsOrDiToDi.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="TsOrDiToDi.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="TsOrDiToDi.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="TsOrDiToDi.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43053,8 +45222,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Unhex"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Unhex-4021"><a href="#Unhex-4021"><span class="linenos">4021</span></a><span class="k">class</span> <span class="nc">Unhex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Unhex-4022"><a href="#Unhex-4022"><span class="linenos">4022</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Unhex-4164"><a href="#Unhex-4164"><span class="linenos">4164</span></a><span class="k">class</span> <span class="nc">Unhex</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Unhex-4165"><a href="#Unhex-4165"><span class="linenos">4165</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43114,6 +45283,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Unhex.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Unhex.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Unhex.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Unhex.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Unhex.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Unhex.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Unhex.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Unhex.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Unhex.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Unhex.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43130,8 +45306,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#UnixToStr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="UnixToStr-4025"><a href="#UnixToStr-4025"><span class="linenos">4025</span></a><span class="k">class</span> <span class="nc">UnixToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="UnixToStr-4026"><a href="#UnixToStr-4026"><span class="linenos">4026</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UnixToStr-4168"><a href="#UnixToStr-4168"><span class="linenos">4168</span></a><span class="k">class</span> <span class="nc">UnixToStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="UnixToStr-4169"><a href="#UnixToStr-4169"><span class="linenos">4169</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;format&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -43191,6 +45367,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="UnixToStr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="UnixToStr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="UnixToStr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="UnixToStr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="UnixToStr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="UnixToStr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="UnixToStr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="UnixToStr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="UnixToStr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="UnixToStr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43207,12 +45390,12 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#UnixToTime"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="UnixToTime-4031"><a href="#UnixToTime-4031"><span class="linenos">4031</span></a><span class="k">class</span> <span class="nc">UnixToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="UnixToTime-4032"><a href="#UnixToTime-4032"><span class="linenos">4032</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;scale&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
-</span><span id="UnixToTime-4033"><a href="#UnixToTime-4033"><span class="linenos">4033</span></a>
-</span><span id="UnixToTime-4034"><a href="#UnixToTime-4034"><span class="linenos">4034</span></a> <span class="n">SECONDS</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;seconds&quot;</span><span class="p">)</span>
-</span><span id="UnixToTime-4035"><a href="#UnixToTime-4035"><span class="linenos">4035</span></a> <span class="n">MILLIS</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;millis&quot;</span><span class="p">)</span>
-</span><span id="UnixToTime-4036"><a href="#UnixToTime-4036"><span class="linenos">4036</span></a> <span class="n">MICROS</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;micros&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UnixToTime-4174"><a href="#UnixToTime-4174"><span class="linenos">4174</span></a><span class="k">class</span> <span class="nc">UnixToTime</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="UnixToTime-4175"><a href="#UnixToTime-4175"><span class="linenos">4175</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;scale&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;zone&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;hours&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;minutes&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span><span id="UnixToTime-4176"><a href="#UnixToTime-4176"><span class="linenos">4176</span></a>
+</span><span id="UnixToTime-4177"><a href="#UnixToTime-4177"><span class="linenos">4177</span></a> <span class="n">SECONDS</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;seconds&quot;</span><span class="p">)</span>
+</span><span id="UnixToTime-4178"><a href="#UnixToTime-4178"><span class="linenos">4178</span></a> <span class="n">MILLIS</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;millis&quot;</span><span class="p">)</span>
+</span><span id="UnixToTime-4179"><a href="#UnixToTime-4179"><span class="linenos">4179</span></a> <span class="n">MICROS</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;micros&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -43272,6 +45455,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="UnixToTime.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="UnixToTime.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="UnixToTime.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="UnixToTime.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="UnixToTime.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="UnixToTime.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="UnixToTime.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="UnixToTime.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="UnixToTime.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="UnixToTime.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43288,8 +45478,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#UnixToTimeStr"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="UnixToTimeStr-4039"><a href="#UnixToTimeStr-4039"><span class="linenos">4039</span></a><span class="k">class</span> <span class="nc">UnixToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="UnixToTimeStr-4040"><a href="#UnixToTimeStr-4040"><span class="linenos">4040</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="UnixToTimeStr-4182"><a href="#UnixToTimeStr-4182"><span class="linenos">4182</span></a><span class="k">class</span> <span class="nc">UnixToTimeStr</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="UnixToTimeStr-4183"><a href="#UnixToTimeStr-4183"><span class="linenos">4183</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43349,6 +45539,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="UnixToTimeStr.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="UnixToTimeStr.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="UnixToTimeStr.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="UnixToTimeStr.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="UnixToTimeStr.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="UnixToTimeStr.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="UnixToTimeStr.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="UnixToTimeStr.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="UnixToTimeStr.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="UnixToTimeStr.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43365,8 +45562,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Upper"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Upper-4043"><a href="#Upper-4043"><span class="linenos">4043</span></a><span class="k">class</span> <span class="nc">Upper</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Upper-4044"><a href="#Upper-4044"><span class="linenos">4044</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;UPPER&quot;</span><span class="p">,</span> <span class="s2">&quot;UCASE&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Upper-4186"><a href="#Upper-4186"><span class="linenos">4186</span></a><span class="k">class</span> <span class="nc">Upper</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Upper-4187"><a href="#Upper-4187"><span class="linenos">4187</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;UPPER&quot;</span><span class="p">,</span> <span class="s2">&quot;UCASE&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -43426,6 +45623,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Upper.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Upper.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Upper.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Upper.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Upper.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Upper.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Upper.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Upper.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Upper.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Upper.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43442,8 +45646,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Variance"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Variance-4047"><a href="#Variance-4047"><span class="linenos">4047</span></a><span class="k">class</span> <span class="nc">Variance</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="Variance-4048"><a href="#Variance-4048"><span class="linenos">4048</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE&quot;</span><span class="p">,</span> <span class="s2">&quot;VARIANCE_SAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Variance-4190"><a href="#Variance-4190"><span class="linenos">4190</span></a><span class="k">class</span> <span class="nc">Variance</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="Variance-4191"><a href="#Variance-4191"><span class="linenos">4191</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE&quot;</span><span class="p">,</span> <span class="s2">&quot;VARIANCE_SAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_SAMP&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -43503,6 +45707,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Variance.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Variance.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Variance.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Variance.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Variance.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Variance.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Variance.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Variance.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Variance.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Variance.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43519,8 +45730,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#VariancePop"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="VariancePop-4051"><a href="#VariancePop-4051"><span class="linenos">4051</span></a><span class="k">class</span> <span class="nc">VariancePop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
-</span><span id="VariancePop-4052"><a href="#VariancePop-4052"><span class="linenos">4052</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE_POP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_POP&quot;</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="VariancePop-4194"><a href="#VariancePop-4194"><span class="linenos">4194</span></a><span class="k">class</span> <span class="nc">VariancePop</span><span class="p">(</span><span class="n">AggFunc</span><span class="p">):</span>
+</span><span id="VariancePop-4195"><a href="#VariancePop-4195"><span class="linenos">4195</span></a> <span class="n">_sql_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;VARIANCE_POP&quot;</span><span class="p">,</span> <span class="s2">&quot;VAR_POP&quot;</span><span class="p">]</span>
</span></pre></div>
@@ -43580,6 +45791,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="VariancePop.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="VariancePop.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="VariancePop.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="VariancePop.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="VariancePop.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="VariancePop.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="VariancePop.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="VariancePop.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="VariancePop.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="VariancePop.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43596,8 +45814,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Week"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Week-4055"><a href="#Week-4055"><span class="linenos">4055</span></a><span class="k">class</span> <span class="nc">Week</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Week-4056"><a href="#Week-4056"><span class="linenos">4056</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;mode&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Week-4198"><a href="#Week-4198"><span class="linenos">4198</span></a><span class="k">class</span> <span class="nc">Week</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Week-4199"><a href="#Week-4199"><span class="linenos">4199</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;mode&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -43657,6 +45875,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Week.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Week.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Week.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Week.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Week.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Week.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Week.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Week.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Week.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Week.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43673,8 +45898,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#XMLTable"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="XMLTable-4059"><a href="#XMLTable-4059"><span class="linenos">4059</span></a><span class="k">class</span> <span class="nc">XMLTable</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="XMLTable-4060"><a href="#XMLTable-4060"><span class="linenos">4060</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;passing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;by_ref&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="XMLTable-4202"><a href="#XMLTable-4202"><span class="linenos">4202</span></a><span class="k">class</span> <span class="nc">XMLTable</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="XMLTable-4203"><a href="#XMLTable-4203"><span class="linenos">4203</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;passing&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;by_ref&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -43734,6 +45959,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="XMLTable.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="XMLTable.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="XMLTable.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="XMLTable.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="XMLTable.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="XMLTable.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="XMLTable.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="XMLTable.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="XMLTable.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="XMLTable.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43750,8 +45982,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Year"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Year-4063"><a href="#Year-4063"><span class="linenos">4063</span></a><span class="k">class</span> <span class="nc">Year</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Year-4064"><a href="#Year-4064"><span class="linenos">4064</span></a> <span class="k">pass</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Year-4206"><a href="#Year-4206"><span class="linenos">4206</span></a><span class="k">class</span> <span class="nc">Year</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Year-4207"><a href="#Year-4207"><span class="linenos">4207</span></a> <span class="k">pass</span>
</span></pre></div>
@@ -43811,6 +46043,13 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="Year.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="Year.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="Year.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="Year.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="Year.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="Year.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="Year.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="Year.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="Year.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="Year.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -43827,8 +46066,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Use"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Use-4067"><a href="#Use-4067"><span class="linenos">4067</span></a><span class="k">class</span> <span class="nc">Use</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Use-4068"><a href="#Use-4068"><span class="linenos">4068</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Use-4210"><a href="#Use-4210"><span class="linenos">4210</span></a><span class="k">class</span> <span class="nc">Use</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Use-4211"><a href="#Use-4211"><span class="linenos">4211</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;kind&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></pre></div>
@@ -43891,8 +46130,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#Merge"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Merge-4071"><a href="#Merge-4071"><span class="linenos">4071</span></a><span class="k">class</span> <span class="nc">Merge</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
-</span><span id="Merge-4072"><a href="#Merge-4072"><span class="linenos">4072</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;using&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;on&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">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Merge-4214"><a href="#Merge-4214"><span class="linenos">4214</span></a><span class="k">class</span> <span class="nc">Merge</span><span class="p">(</span><span class="n">Expression</span><span class="p">):</span>
+</span><span id="Merge-4215"><a href="#Merge-4215"><span class="linenos">4215</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;using&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;on&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">True</span><span class="p">}</span>
</span></pre></div>
@@ -43955,8 +46194,8 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#When"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="When-4075"><a href="#When-4075"><span class="linenos">4075</span></a><span class="k">class</span> <span class="nc">When</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="When-4076"><a href="#When-4076"><span class="linenos">4076</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;matched&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;condition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;then&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="When-4218"><a href="#When-4218"><span class="linenos">4218</span></a><span class="k">class</span> <span class="nc">When</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="When-4219"><a href="#When-4219"><span class="linenos">4219</span></a> <span class="n">arg_types</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;matched&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;condition&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;then&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></pre></div>
@@ -44016,6 +46255,97 @@ name is set to the expression's class name transformed to snake case.</li>
<dd id="When.and_" class="function"><a href="#Condition.and_">and_</a></dd>
<dd id="When.or_" class="function"><a href="#Condition.or_">or_</a></dd>
<dd id="When.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="When.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="When.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="When.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="When.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="When.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="When.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="When.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
+
+ </div>
+ </dl>
+ </div>
+ </section>
+ <section id="NextValueFor">
+ <input id="NextValueFor-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr class">
+
+ <span class="def">class</span>
+ <span class="name">NextValueFor</span><wbr>(<span class="base"><a href="#Func">Func</a></span>):
+
+ <label class="view-source-button" for="NextValueFor-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#NextValueFor"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="NextValueFor-4224"><a href="#NextValueFor-4224"><span class="linenos">4224</span></a><span class="k">class</span> <span class="nc">NextValueFor</span><span class="p">(</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="NextValueFor-4225"><a href="#NextValueFor-4225"><span class="linenos">4225</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;order&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
+</span></pre></div>
+
+
+
+
+ <div class="inherited">
+ <h5>Inherited Members</h5>
+ <dl>
+ <div><dt><a href="#Expression">Expression</a></dt>
+ <dd id="NextValueFor.__init__" class="function"><a href="#Expression.__init__">Expression</a></dd>
+ <dd id="NextValueFor.this" class="variable"><a href="#Expression.this">this</a></dd>
+ <dd id="NextValueFor.expression" class="variable"><a href="#Expression.expression">expression</a></dd>
+ <dd id="NextValueFor.expressions" class="variable"><a href="#Expression.expressions">expressions</a></dd>
+ <dd id="NextValueFor.text" class="function"><a href="#Expression.text">text</a></dd>
+ <dd id="NextValueFor.is_string" class="variable"><a href="#Expression.is_string">is_string</a></dd>
+ <dd id="NextValueFor.is_number" class="variable"><a href="#Expression.is_number">is_number</a></dd>
+ <dd id="NextValueFor.is_int" class="variable"><a href="#Expression.is_int">is_int</a></dd>
+ <dd id="NextValueFor.is_star" class="variable"><a href="#Expression.is_star">is_star</a></dd>
+ <dd id="NextValueFor.alias" class="variable"><a href="#Expression.alias">alias</a></dd>
+ <dd id="NextValueFor.output_name" class="variable"><a href="#Expression.output_name">output_name</a></dd>
+ <dd id="NextValueFor.copy" class="function"><a href="#Expression.copy">copy</a></dd>
+ <dd id="NextValueFor.append" class="function"><a href="#Expression.append">append</a></dd>
+ <dd id="NextValueFor.set" class="function"><a href="#Expression.set">set</a></dd>
+ <dd id="NextValueFor.depth" class="variable"><a href="#Expression.depth">depth</a></dd>
+ <dd id="NextValueFor.iter_expressions" class="function"><a href="#Expression.iter_expressions">iter_expressions</a></dd>
+ <dd id="NextValueFor.find" class="function"><a href="#Expression.find">find</a></dd>
+ <dd id="NextValueFor.find_all" class="function"><a href="#Expression.find_all">find_all</a></dd>
+ <dd id="NextValueFor.find_ancestor" class="function"><a href="#Expression.find_ancestor">find_ancestor</a></dd>
+ <dd id="NextValueFor.parent_select" class="variable"><a href="#Expression.parent_select">parent_select</a></dd>
+ <dd id="NextValueFor.same_parent" class="variable"><a href="#Expression.same_parent">same_parent</a></dd>
+ <dd id="NextValueFor.root" class="function"><a href="#Expression.root">root</a></dd>
+ <dd id="NextValueFor.walk" class="function"><a href="#Expression.walk">walk</a></dd>
+ <dd id="NextValueFor.dfs" class="function"><a href="#Expression.dfs">dfs</a></dd>
+ <dd id="NextValueFor.bfs" class="function"><a href="#Expression.bfs">bfs</a></dd>
+ <dd id="NextValueFor.unnest" class="function"><a href="#Expression.unnest">unnest</a></dd>
+ <dd id="NextValueFor.unalias" class="function"><a href="#Expression.unalias">unalias</a></dd>
+ <dd id="NextValueFor.unnest_operands" class="function"><a href="#Expression.unnest_operands">unnest_operands</a></dd>
+ <dd id="NextValueFor.flatten" class="function"><a href="#Expression.flatten">flatten</a></dd>
+ <dd id="NextValueFor.sql" class="function"><a href="#Expression.sql">sql</a></dd>
+ <dd id="NextValueFor.transform" class="function"><a href="#Expression.transform">transform</a></dd>
+ <dd id="NextValueFor.replace" class="function"><a href="#Expression.replace">replace</a></dd>
+ <dd id="NextValueFor.pop" class="function"><a href="#Expression.pop">pop</a></dd>
+ <dd id="NextValueFor.assert_is" class="function"><a href="#Expression.assert_is">assert_is</a></dd>
+ <dd id="NextValueFor.error_messages" class="function"><a href="#Expression.error_messages">error_messages</a></dd>
+ <dd id="NextValueFor.dump" class="function"><a href="#Expression.dump">dump</a></dd>
+ <dd id="NextValueFor.load" class="function"><a href="#Expression.load">load</a></dd>
+
+ </div>
+ <div><dt><a href="#Func">Func</a></dt>
+ <dd id="NextValueFor.from_arg_list" class="function"><a href="#Func.from_arg_list">from_arg_list</a></dd>
+ <dd id="NextValueFor.sql_names" class="function"><a href="#Func.sql_names">sql_names</a></dd>
+ <dd id="NextValueFor.sql_name" class="function"><a href="#Func.sql_name">sql_name</a></dd>
+ <dd id="NextValueFor.default_parser_mappings" class="function"><a href="#Func.default_parser_mappings">default_parser_mappings</a></dd>
+
+ </div>
+ <div><dt><a href="#Condition">Condition</a></dt>
+ <dd id="NextValueFor.and_" class="function"><a href="#Condition.and_">and_</a></dd>
+ <dd id="NextValueFor.or_" class="function"><a href="#Condition.or_">or_</a></dd>
+ <dd id="NextValueFor.not_" class="function"><a href="#Condition.not_">not_</a></dd>
+ <dd id="NextValueFor.isin" class="function"><a href="#Condition.isin">isin</a></dd>
+ <dd id="NextValueFor.between" class="function"><a href="#Condition.between">between</a></dd>
+ <dd id="NextValueFor.like" class="function"><a href="#Condition.like">like</a></dd>
+ <dd id="NextValueFor.ilike" class="function"><a href="#Condition.ilike">ilike</a></dd>
+ <dd id="NextValueFor.eq" class="function"><a href="#Condition.eq">eq</a></dd>
+ <dd id="NextValueFor.neq" class="function"><a href="#Condition.neq">neq</a></dd>
+ <dd id="NextValueFor.rlike" class="function"><a href="#Condition.rlike">rlike</a></dd>
</div>
</dl>
@@ -44032,48 +46362,48 @@ name is set to the expression's class name transformed to snake case.</li>
</div>
<a class="headerlink" href="#maybe_parse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="maybe_parse-4113"><a href="#maybe_parse-4113"><span class="linenos">4113</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
-</span><span id="maybe_parse-4114"><a href="#maybe_parse-4114"><span class="linenos">4114</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="maybe_parse-4115"><a href="#maybe_parse-4115"><span class="linenos">4115</span></a> <span class="o">*</span><span class="p">,</span>
-</span><span id="maybe_parse-4116"><a href="#maybe_parse-4116"><span class="linenos">4116</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="maybe_parse-4117"><a href="#maybe_parse-4117"><span class="linenos">4117</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="maybe_parse-4118"><a href="#maybe_parse-4118"><span class="linenos">4118</span></a> <span class="n">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><span id="maybe_parse-4119"><a href="#maybe_parse-4119"><span class="linenos">4119</span></a> <span class="n">copy</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="maybe_parse-4120"><a href="#maybe_parse-4120"><span class="linenos">4120</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="maybe_parse-4121"><a href="#maybe_parse-4121"><span class="linenos">4121</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="maybe_parse-4122"><a href="#maybe_parse-4122"><span class="linenos">4122</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Gracefully handle a possible string or expression.</span>
-</span><span id="maybe_parse-4123"><a href="#maybe_parse-4123"><span class="linenos">4123</span></a>
-</span><span id="maybe_parse-4124"><a href="#maybe_parse-4124"><span class="linenos">4124</span></a><span class="sd"> Example:</span>
-</span><span id="maybe_parse-4125"><a href="#maybe_parse-4125"><span class="linenos">4125</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
-</span><span id="maybe_parse-4126"><a href="#maybe_parse-4126"><span class="linenos">4126</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
-</span><span id="maybe_parse-4127"><a href="#maybe_parse-4127"><span class="linenos">4127</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
-</span><span id="maybe_parse-4128"><a href="#maybe_parse-4128"><span class="linenos">4128</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</span>
-</span><span id="maybe_parse-4129"><a href="#maybe_parse-4129"><span class="linenos">4129</span></a>
-</span><span id="maybe_parse-4130"><a href="#maybe_parse-4130"><span class="linenos">4130</span></a><span class="sd"> Args:</span>
-</span><span id="maybe_parse-4131"><a href="#maybe_parse-4131"><span class="linenos">4131</span></a><span class="sd"> sql_or_expression: the SQL code string or an expression</span>
-</span><span id="maybe_parse-4132"><a href="#maybe_parse-4132"><span class="linenos">4132</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
-</span><span id="maybe_parse-4133"><a href="#maybe_parse-4133"><span class="linenos">4133</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
-</span><span id="maybe_parse-4134"><a href="#maybe_parse-4134"><span class="linenos">4134</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="maybe_parse-4135"><a href="#maybe_parse-4135"><span class="linenos">4135</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
-</span><span id="maybe_parse-4136"><a href="#maybe_parse-4136"><span class="linenos">4136</span></a><span class="sd"> (automatically includes a space)</span>
-</span><span id="maybe_parse-4137"><a href="#maybe_parse-4137"><span class="linenos">4137</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
-</span><span id="maybe_parse-4138"><a href="#maybe_parse-4138"><span class="linenos">4138</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="maybe_parse-4139"><a href="#maybe_parse-4139"><span class="linenos">4139</span></a><span class="sd"> that an input expression is a SQL string).</span>
-</span><span id="maybe_parse-4140"><a href="#maybe_parse-4140"><span class="linenos">4140</span></a>
-</span><span id="maybe_parse-4141"><a href="#maybe_parse-4141"><span class="linenos">4141</span></a><span class="sd"> Returns:</span>
-</span><span id="maybe_parse-4142"><a href="#maybe_parse-4142"><span class="linenos">4142</span></a><span class="sd"> Expression: the parsed or given expression.</span>
-</span><span id="maybe_parse-4143"><a href="#maybe_parse-4143"><span class="linenos">4143</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="maybe_parse-4144"><a href="#maybe_parse-4144"><span class="linenos">4144</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="maybe_parse-4145"><a href="#maybe_parse-4145"><span class="linenos">4145</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="maybe_parse-4146"><a href="#maybe_parse-4146"><span class="linenos">4146</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="maybe_parse-4147"><a href="#maybe_parse-4147"><span class="linenos">4147</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span>
-</span><span id="maybe_parse-4148"><a href="#maybe_parse-4148"><span class="linenos">4148</span></a>
-</span><span id="maybe_parse-4149"><a href="#maybe_parse-4149"><span class="linenos">4149</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
-</span><span id="maybe_parse-4150"><a href="#maybe_parse-4150"><span class="linenos">4150</span></a>
-</span><span id="maybe_parse-4151"><a href="#maybe_parse-4151"><span class="linenos">4151</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">)</span>
-</span><span id="maybe_parse-4152"><a href="#maybe_parse-4152"><span class="linenos">4152</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
-</span><span id="maybe_parse-4153"><a href="#maybe_parse-4153"><span class="linenos">4153</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">prefix</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><span id="maybe_parse-4154"><a href="#maybe_parse-4154"><span class="linenos">4154</span></a> <span class="k">return</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">into</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="maybe_parse-4262"><a href="#maybe_parse-4262"><span class="linenos">4262</span></a><span class="k">def</span> <span class="nf">maybe_parse</span><span class="p">(</span>
+</span><span id="maybe_parse-4263"><a href="#maybe_parse-4263"><span class="linenos">4263</span></a> <span class="n">sql_or_expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="maybe_parse-4264"><a href="#maybe_parse-4264"><span class="linenos">4264</span></a> <span class="o">*</span><span class="p">,</span>
+</span><span id="maybe_parse-4265"><a href="#maybe_parse-4265"><span class="linenos">4265</span></a> <span class="n">into</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">IntoType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="maybe_parse-4266"><a href="#maybe_parse-4266"><span class="linenos">4266</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="maybe_parse-4267"><a href="#maybe_parse-4267"><span class="linenos">4267</span></a> <span class="n">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><span id="maybe_parse-4268"><a href="#maybe_parse-4268"><span class="linenos">4268</span></a> <span class="n">copy</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="maybe_parse-4269"><a href="#maybe_parse-4269"><span class="linenos">4269</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="maybe_parse-4270"><a href="#maybe_parse-4270"><span class="linenos">4270</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="maybe_parse-4271"><a href="#maybe_parse-4271"><span class="linenos">4271</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Gracefully handle a possible string or expression.</span>
+</span><span id="maybe_parse-4272"><a href="#maybe_parse-4272"><span class="linenos">4272</span></a>
+</span><span id="maybe_parse-4273"><a href="#maybe_parse-4273"><span class="linenos">4273</span></a><span class="sd"> Example:</span>
+</span><span id="maybe_parse-4274"><a href="#maybe_parse-4274"><span class="linenos">4274</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(&quot;1&quot;)</span>
+</span><span id="maybe_parse-4275"><a href="#maybe_parse-4275"><span class="linenos">4275</span></a><span class="sd"> (LITERAL this: 1, is_string: False)</span>
+</span><span id="maybe_parse-4276"><a href="#maybe_parse-4276"><span class="linenos">4276</span></a><span class="sd"> &gt;&gt;&gt; maybe_parse(to_identifier(&quot;x&quot;))</span>
+</span><span id="maybe_parse-4277"><a href="#maybe_parse-4277"><span class="linenos">4277</span></a><span class="sd"> (IDENTIFIER this: x, quoted: False)</span>
+</span><span id="maybe_parse-4278"><a href="#maybe_parse-4278"><span class="linenos">4278</span></a>
+</span><span id="maybe_parse-4279"><a href="#maybe_parse-4279"><span class="linenos">4279</span></a><span class="sd"> Args:</span>
+</span><span id="maybe_parse-4280"><a href="#maybe_parse-4280"><span class="linenos">4280</span></a><span class="sd"> sql_or_expression: the SQL code string or an expression</span>
+</span><span id="maybe_parse-4281"><a href="#maybe_parse-4281"><span class="linenos">4281</span></a><span class="sd"> into: the SQLGlot Expression to parse into</span>
+</span><span id="maybe_parse-4282"><a href="#maybe_parse-4282"><span class="linenos">4282</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
+</span><span id="maybe_parse-4283"><a href="#maybe_parse-4283"><span class="linenos">4283</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="maybe_parse-4284"><a href="#maybe_parse-4284"><span class="linenos">4284</span></a><span class="sd"> prefix: a string to prefix the sql with before it gets parsed</span>
+</span><span id="maybe_parse-4285"><a href="#maybe_parse-4285"><span class="linenos">4285</span></a><span class="sd"> (automatically includes a space)</span>
+</span><span id="maybe_parse-4286"><a href="#maybe_parse-4286"><span class="linenos">4286</span></a><span class="sd"> copy: whether or not to copy the expression.</span>
+</span><span id="maybe_parse-4287"><a href="#maybe_parse-4287"><span class="linenos">4287</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="maybe_parse-4288"><a href="#maybe_parse-4288"><span class="linenos">4288</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="maybe_parse-4289"><a href="#maybe_parse-4289"><span class="linenos">4289</span></a>
+</span><span id="maybe_parse-4290"><a href="#maybe_parse-4290"><span class="linenos">4290</span></a><span class="sd"> Returns:</span>
+</span><span id="maybe_parse-4291"><a href="#maybe_parse-4291"><span class="linenos">4291</span></a><span class="sd"> Expression: the parsed or given expression.</span>
+</span><span id="maybe_parse-4292"><a href="#maybe_parse-4292"><span class="linenos">4292</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="maybe_parse-4293"><a href="#maybe_parse-4293"><span class="linenos">4293</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="maybe_parse-4294"><a href="#maybe_parse-4294"><span class="linenos">4294</span></a> <span class="k">if</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="maybe_parse-4295"><a href="#maybe_parse-4295"><span class="linenos">4295</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="maybe_parse-4296"><a href="#maybe_parse-4296"><span class="linenos">4296</span></a> <span class="k">return</span> <span class="n">sql_or_expression</span>
+</span><span id="maybe_parse-4297"><a href="#maybe_parse-4297"><span class="linenos">4297</span></a>
+</span><span id="maybe_parse-4298"><a href="#maybe_parse-4298"><span class="linenos">4298</span></a> <span class="kn">import</span> <span class="nn">sqlglot</span>
+</span><span id="maybe_parse-4299"><a href="#maybe_parse-4299"><span class="linenos">4299</span></a>
+</span><span id="maybe_parse-4300"><a href="#maybe_parse-4300"><span class="linenos">4300</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="p">)</span>
+</span><span id="maybe_parse-4301"><a href="#maybe_parse-4301"><span class="linenos">4301</span></a> <span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
+</span><span id="maybe_parse-4302"><a href="#maybe_parse-4302"><span class="linenos">4302</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">prefix</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><span id="maybe_parse-4303"><a href="#maybe_parse-4303"><span class="linenos">4303</span></a> <span class="k">return</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">parse_one</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">read</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -44125,29 +46455,29 @@ that an input expression is a SQL string).</li>
</div>
<a class="headerlink" href="#union"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="union-4300"><a href="#union-4300"><span class="linenos">4300</span></a><span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="union-4301"><a href="#union-4301"><span class="linenos">4301</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="union-4302"><a href="#union-4302"><span class="linenos">4302</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</span>
-</span><span id="union-4303"><a href="#union-4303"><span class="linenos">4303</span></a>
-</span><span id="union-4304"><a href="#union-4304"><span class="linenos">4304</span></a><span class="sd"> Example:</span>
-</span><span id="union-4305"><a href="#union-4305"><span class="linenos">4305</span></a><span class="sd"> &gt;&gt;&gt; union(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="union-4306"><a href="#union-4306"><span class="linenos">4306</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
-</span><span id="union-4307"><a href="#union-4307"><span class="linenos">4307</span></a>
-</span><span id="union-4308"><a href="#union-4308"><span class="linenos">4308</span></a><span class="sd"> Args:</span>
-</span><span id="union-4309"><a href="#union-4309"><span class="linenos">4309</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
-</span><span id="union-4310"><a href="#union-4310"><span class="linenos">4310</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="union-4311"><a href="#union-4311"><span class="linenos">4311</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
-</span><span id="union-4312"><a href="#union-4312"><span class="linenos">4312</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="union-4313"><a href="#union-4313"><span class="linenos">4313</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="union-4314"><a href="#union-4314"><span class="linenos">4314</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="union-4315"><a href="#union-4315"><span class="linenos">4315</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="union-4316"><a href="#union-4316"><span class="linenos">4316</span></a><span class="sd"> Returns:</span>
-</span><span id="union-4317"><a href="#union-4317"><span class="linenos">4317</span></a><span class="sd"> Union: the syntax tree for the UNION expression.</span>
-</span><span id="union-4318"><a href="#union-4318"><span class="linenos">4318</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="union-4319"><a href="#union-4319"><span class="linenos">4319</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="union-4320"><a href="#union-4320"><span class="linenos">4320</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="union-4321"><a href="#union-4321"><span class="linenos">4321</span></a>
-</span><span id="union-4322"><a href="#union-4322"><span class="linenos">4322</span></a> <span class="k">return</span> <span class="n">Union</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="union-4451"><a href="#union-4451"><span class="linenos">4451</span></a><span class="k">def</span> <span class="nf">union</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="union-4452"><a href="#union-4452"><span class="linenos">4452</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="union-4453"><a href="#union-4453"><span class="linenos">4453</span></a><span class="sd"> Initializes a syntax tree from one UNION expression.</span>
+</span><span id="union-4454"><a href="#union-4454"><span class="linenos">4454</span></a>
+</span><span id="union-4455"><a href="#union-4455"><span class="linenos">4455</span></a><span class="sd"> Example:</span>
+</span><span id="union-4456"><a href="#union-4456"><span class="linenos">4456</span></a><span class="sd"> &gt;&gt;&gt; union(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="union-4457"><a href="#union-4457"><span class="linenos">4457</span></a><span class="sd"> &#39;SELECT * FROM foo UNION SELECT * FROM bla&#39;</span>
+</span><span id="union-4458"><a href="#union-4458"><span class="linenos">4458</span></a>
+</span><span id="union-4459"><a href="#union-4459"><span class="linenos">4459</span></a><span class="sd"> Args:</span>
+</span><span id="union-4460"><a href="#union-4460"><span class="linenos">4460</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
+</span><span id="union-4461"><a href="#union-4461"><span class="linenos">4461</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="union-4462"><a href="#union-4462"><span class="linenos">4462</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
+</span><span id="union-4463"><a href="#union-4463"><span class="linenos">4463</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="union-4464"><a href="#union-4464"><span class="linenos">4464</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="union-4465"><a href="#union-4465"><span class="linenos">4465</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="union-4466"><a href="#union-4466"><span class="linenos">4466</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="union-4467"><a href="#union-4467"><span class="linenos">4467</span></a><span class="sd"> Returns:</span>
+</span><span id="union-4468"><a href="#union-4468"><span class="linenos">4468</span></a><span class="sd"> Union: the syntax tree for the UNION expression.</span>
+</span><span id="union-4469"><a href="#union-4469"><span class="linenos">4469</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="union-4470"><a href="#union-4470"><span class="linenos">4470</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="union-4471"><a href="#union-4471"><span class="linenos">4471</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="union-4472"><a href="#union-4472"><span class="linenos">4472</span></a>
+</span><span id="union-4473"><a href="#union-4473"><span class="linenos">4473</span></a> <span class="k">return</span> <span class="n">Union</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
</span></pre></div>
@@ -44195,29 +46525,29 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#intersect"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="intersect-4325"><a href="#intersect-4325"><span class="linenos">4325</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="intersect-4326"><a href="#intersect-4326"><span class="linenos">4326</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="intersect-4327"><a href="#intersect-4327"><span class="linenos">4327</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</span>
-</span><span id="intersect-4328"><a href="#intersect-4328"><span class="linenos">4328</span></a>
-</span><span id="intersect-4329"><a href="#intersect-4329"><span class="linenos">4329</span></a><span class="sd"> Example:</span>
-</span><span id="intersect-4330"><a href="#intersect-4330"><span class="linenos">4330</span></a><span class="sd"> &gt;&gt;&gt; intersect(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="intersect-4331"><a href="#intersect-4331"><span class="linenos">4331</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
-</span><span id="intersect-4332"><a href="#intersect-4332"><span class="linenos">4332</span></a>
-</span><span id="intersect-4333"><a href="#intersect-4333"><span class="linenos">4333</span></a><span class="sd"> Args:</span>
-</span><span id="intersect-4334"><a href="#intersect-4334"><span class="linenos">4334</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
-</span><span id="intersect-4335"><a href="#intersect-4335"><span class="linenos">4335</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="intersect-4336"><a href="#intersect-4336"><span class="linenos">4336</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
-</span><span id="intersect-4337"><a href="#intersect-4337"><span class="linenos">4337</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="intersect-4338"><a href="#intersect-4338"><span class="linenos">4338</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="intersect-4339"><a href="#intersect-4339"><span class="linenos">4339</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="intersect-4340"><a href="#intersect-4340"><span class="linenos">4340</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="intersect-4341"><a href="#intersect-4341"><span class="linenos">4341</span></a><span class="sd"> Returns:</span>
-</span><span id="intersect-4342"><a href="#intersect-4342"><span class="linenos">4342</span></a><span class="sd"> Intersect: the syntax tree for the INTERSECT expression.</span>
-</span><span id="intersect-4343"><a href="#intersect-4343"><span class="linenos">4343</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="intersect-4344"><a href="#intersect-4344"><span class="linenos">4344</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="intersect-4345"><a href="#intersect-4345"><span class="linenos">4345</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="intersect-4346"><a href="#intersect-4346"><span class="linenos">4346</span></a>
-</span><span id="intersect-4347"><a href="#intersect-4347"><span class="linenos">4347</span></a> <span class="k">return</span> <span class="n">Intersect</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="intersect-4476"><a href="#intersect-4476"><span class="linenos">4476</span></a><span class="k">def</span> <span class="nf">intersect</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="intersect-4477"><a href="#intersect-4477"><span class="linenos">4477</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="intersect-4478"><a href="#intersect-4478"><span class="linenos">4478</span></a><span class="sd"> Initializes a syntax tree from one INTERSECT expression.</span>
+</span><span id="intersect-4479"><a href="#intersect-4479"><span class="linenos">4479</span></a>
+</span><span id="intersect-4480"><a href="#intersect-4480"><span class="linenos">4480</span></a><span class="sd"> Example:</span>
+</span><span id="intersect-4481"><a href="#intersect-4481"><span class="linenos">4481</span></a><span class="sd"> &gt;&gt;&gt; intersect(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="intersect-4482"><a href="#intersect-4482"><span class="linenos">4482</span></a><span class="sd"> &#39;SELECT * FROM foo INTERSECT SELECT * FROM bla&#39;</span>
+</span><span id="intersect-4483"><a href="#intersect-4483"><span class="linenos">4483</span></a>
+</span><span id="intersect-4484"><a href="#intersect-4484"><span class="linenos">4484</span></a><span class="sd"> Args:</span>
+</span><span id="intersect-4485"><a href="#intersect-4485"><span class="linenos">4485</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
+</span><span id="intersect-4486"><a href="#intersect-4486"><span class="linenos">4486</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="intersect-4487"><a href="#intersect-4487"><span class="linenos">4487</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
+</span><span id="intersect-4488"><a href="#intersect-4488"><span class="linenos">4488</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="intersect-4489"><a href="#intersect-4489"><span class="linenos">4489</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="intersect-4490"><a href="#intersect-4490"><span class="linenos">4490</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="intersect-4491"><a href="#intersect-4491"><span class="linenos">4491</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="intersect-4492"><a href="#intersect-4492"><span class="linenos">4492</span></a><span class="sd"> Returns:</span>
+</span><span id="intersect-4493"><a href="#intersect-4493"><span class="linenos">4493</span></a><span class="sd"> Intersect: the syntax tree for the INTERSECT expression.</span>
+</span><span id="intersect-4494"><a href="#intersect-4494"><span class="linenos">4494</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="intersect-4495"><a href="#intersect-4495"><span class="linenos">4495</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="intersect-4496"><a href="#intersect-4496"><span class="linenos">4496</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="intersect-4497"><a href="#intersect-4497"><span class="linenos">4497</span></a>
+</span><span id="intersect-4498"><a href="#intersect-4498"><span class="linenos">4498</span></a> <span class="k">return</span> <span class="n">Intersect</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
</span></pre></div>
@@ -44265,29 +46595,29 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#except_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="except_-4350"><a href="#except_-4350"><span class="linenos">4350</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="except_-4351"><a href="#except_-4351"><span class="linenos">4351</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="except_-4352"><a href="#except_-4352"><span class="linenos">4352</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</span>
-</span><span id="except_-4353"><a href="#except_-4353"><span class="linenos">4353</span></a>
-</span><span id="except_-4354"><a href="#except_-4354"><span class="linenos">4354</span></a><span class="sd"> Example:</span>
-</span><span id="except_-4355"><a href="#except_-4355"><span class="linenos">4355</span></a><span class="sd"> &gt;&gt;&gt; except_(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
-</span><span id="except_-4356"><a href="#except_-4356"><span class="linenos">4356</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
-</span><span id="except_-4357"><a href="#except_-4357"><span class="linenos">4357</span></a>
-</span><span id="except_-4358"><a href="#except_-4358"><span class="linenos">4358</span></a><span class="sd"> Args:</span>
-</span><span id="except_-4359"><a href="#except_-4359"><span class="linenos">4359</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
-</span><span id="except_-4360"><a href="#except_-4360"><span class="linenos">4360</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="except_-4361"><a href="#except_-4361"><span class="linenos">4361</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
-</span><span id="except_-4362"><a href="#except_-4362"><span class="linenos">4362</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
-</span><span id="except_-4363"><a href="#except_-4363"><span class="linenos">4363</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
-</span><span id="except_-4364"><a href="#except_-4364"><span class="linenos">4364</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="except_-4365"><a href="#except_-4365"><span class="linenos">4365</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
-</span><span id="except_-4366"><a href="#except_-4366"><span class="linenos">4366</span></a><span class="sd"> Returns:</span>
-</span><span id="except_-4367"><a href="#except_-4367"><span class="linenos">4367</span></a><span class="sd"> Except: the syntax tree for the EXCEPT statement.</span>
-</span><span id="except_-4368"><a href="#except_-4368"><span class="linenos">4368</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="except_-4369"><a href="#except_-4369"><span class="linenos">4369</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="except_-4370"><a href="#except_-4370"><span class="linenos">4370</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="except_-4371"><a href="#except_-4371"><span class="linenos">4371</span></a>
-</span><span id="except_-4372"><a href="#except_-4372"><span class="linenos">4372</span></a> <span class="k">return</span> <span class="n">Except</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="except_-4501"><a href="#except_-4501"><span class="linenos">4501</span></a><span class="k">def</span> <span class="nf">except_</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="except_-4502"><a href="#except_-4502"><span class="linenos">4502</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="except_-4503"><a href="#except_-4503"><span class="linenos">4503</span></a><span class="sd"> Initializes a syntax tree from one EXCEPT expression.</span>
+</span><span id="except_-4504"><a href="#except_-4504"><span class="linenos">4504</span></a>
+</span><span id="except_-4505"><a href="#except_-4505"><span class="linenos">4505</span></a><span class="sd"> Example:</span>
+</span><span id="except_-4506"><a href="#except_-4506"><span class="linenos">4506</span></a><span class="sd"> &gt;&gt;&gt; except_(&quot;SELECT * FROM foo&quot;, &quot;SELECT * FROM bla&quot;).sql()</span>
+</span><span id="except_-4507"><a href="#except_-4507"><span class="linenos">4507</span></a><span class="sd"> &#39;SELECT * FROM foo EXCEPT SELECT * FROM bla&#39;</span>
+</span><span id="except_-4508"><a href="#except_-4508"><span class="linenos">4508</span></a>
+</span><span id="except_-4509"><a href="#except_-4509"><span class="linenos">4509</span></a><span class="sd"> Args:</span>
+</span><span id="except_-4510"><a href="#except_-4510"><span class="linenos">4510</span></a><span class="sd"> left (str | Expression): the SQL code string corresponding to the left-hand side.</span>
+</span><span id="except_-4511"><a href="#except_-4511"><span class="linenos">4511</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="except_-4512"><a href="#except_-4512"><span class="linenos">4512</span></a><span class="sd"> right (str | Expression): the SQL code string corresponding to the right-hand side.</span>
+</span><span id="except_-4513"><a href="#except_-4513"><span class="linenos">4513</span></a><span class="sd"> If an `Expression` instance is passed, it will be used as-is.</span>
+</span><span id="except_-4514"><a href="#except_-4514"><span class="linenos">4514</span></a><span class="sd"> distinct (bool): set the DISTINCT flag if and only if this is true.</span>
+</span><span id="except_-4515"><a href="#except_-4515"><span class="linenos">4515</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="except_-4516"><a href="#except_-4516"><span class="linenos">4516</span></a><span class="sd"> opts (kwargs): other options to use to parse the input expressions.</span>
+</span><span id="except_-4517"><a href="#except_-4517"><span class="linenos">4517</span></a><span class="sd"> Returns:</span>
+</span><span id="except_-4518"><a href="#except_-4518"><span class="linenos">4518</span></a><span class="sd"> Except: the syntax tree for the EXCEPT statement.</span>
+</span><span id="except_-4519"><a href="#except_-4519"><span class="linenos">4519</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="except_-4520"><a href="#except_-4520"><span class="linenos">4520</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">left</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="except_-4521"><a href="#except_-4521"><span class="linenos">4521</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">sql_or_expression</span><span class="o">=</span><span class="n">right</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="except_-4522"><a href="#except_-4522"><span class="linenos">4522</span></a>
+</span><span id="except_-4523"><a href="#except_-4523"><span class="linenos">4523</span></a> <span class="k">return</span> <span class="n">Except</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 class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">)</span>
</span></pre></div>
@@ -44335,26 +46665,26 @@ If an <code><a href="#Expression">Expression</a></code> instance is passed, it w
</div>
<a class="headerlink" href="#select"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="select-4375"><a href="#select-4375"><span class="linenos">4375</span></a><span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</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">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
-</span><span id="select-4376"><a href="#select-4376"><span class="linenos">4376</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="select-4377"><a href="#select-4377"><span class="linenos">4377</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
-</span><span id="select-4378"><a href="#select-4378"><span class="linenos">4378</span></a>
-</span><span id="select-4379"><a href="#select-4379"><span class="linenos">4379</span></a><span class="sd"> Example:</span>
-</span><span id="select-4380"><a href="#select-4380"><span class="linenos">4380</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;col1&quot;, &quot;col2&quot;).from_(&quot;tbl&quot;).sql()</span>
-</span><span id="select-4381"><a href="#select-4381"><span class="linenos">4381</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="select-4382"><a href="#select-4382"><span class="linenos">4382</span></a>
-</span><span id="select-4383"><a href="#select-4383"><span class="linenos">4383</span></a><span class="sd"> Args:</span>
-</span><span id="select-4384"><a href="#select-4384"><span class="linenos">4384</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
-</span><span id="select-4385"><a href="#select-4385"><span class="linenos">4385</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="select-4386"><a href="#select-4386"><span class="linenos">4386</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
-</span><span id="select-4387"><a href="#select-4387"><span class="linenos">4387</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="select-4388"><a href="#select-4388"><span class="linenos">4388</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="select-4389"><a href="#select-4389"><span class="linenos">4389</span></a><span class="sd"> that an input expression is a SQL string).</span>
-</span><span id="select-4390"><a href="#select-4390"><span class="linenos">4390</span></a>
-</span><span id="select-4391"><a href="#select-4391"><span class="linenos">4391</span></a><span class="sd"> Returns:</span>
-</span><span id="select-4392"><a href="#select-4392"><span class="linenos">4392</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="select-4393"><a href="#select-4393"><span class="linenos">4393</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="select-4394"><a href="#select-4394"><span class="linenos">4394</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="select-4526"><a href="#select-4526"><span class="linenos">4526</span></a><span class="k">def</span> <span class="nf">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">:</span> <span class="n">ExpOrStr</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">**</span><span class="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Select</span><span class="p">:</span>
+</span><span id="select-4527"><a href="#select-4527"><span class="linenos">4527</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="select-4528"><a href="#select-4528"><span class="linenos">4528</span></a><span class="sd"> Initializes a syntax tree from one or multiple SELECT expressions.</span>
+</span><span id="select-4529"><a href="#select-4529"><span class="linenos">4529</span></a>
+</span><span id="select-4530"><a href="#select-4530"><span class="linenos">4530</span></a><span class="sd"> Example:</span>
+</span><span id="select-4531"><a href="#select-4531"><span class="linenos">4531</span></a><span class="sd"> &gt;&gt;&gt; select(&quot;col1&quot;, &quot;col2&quot;).from_(&quot;tbl&quot;).sql()</span>
+</span><span id="select-4532"><a href="#select-4532"><span class="linenos">4532</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
+</span><span id="select-4533"><a href="#select-4533"><span class="linenos">4533</span></a>
+</span><span id="select-4534"><a href="#select-4534"><span class="linenos">4534</span></a><span class="sd"> Args:</span>
+</span><span id="select-4535"><a href="#select-4535"><span class="linenos">4535</span></a><span class="sd"> *expressions: the SQL code string to parse as the expressions of a</span>
+</span><span id="select-4536"><a href="#select-4536"><span class="linenos">4536</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="select-4537"><a href="#select-4537"><span class="linenos">4537</span></a><span class="sd"> dialect: the dialect used to parse the input expressions (in the case that an</span>
+</span><span id="select-4538"><a href="#select-4538"><span class="linenos">4538</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="select-4539"><a href="#select-4539"><span class="linenos">4539</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="select-4540"><a href="#select-4540"><span class="linenos">4540</span></a><span class="sd"> that an input expression is a SQL string).</span>
+</span><span id="select-4541"><a href="#select-4541"><span class="linenos">4541</span></a>
+</span><span id="select-4542"><a href="#select-4542"><span class="linenos">4542</span></a><span class="sd"> Returns:</span>
+</span><span id="select-4543"><a href="#select-4543"><span class="linenos">4543</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="select-4544"><a href="#select-4544"><span class="linenos">4544</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="select-4545"><a href="#select-4545"><span class="linenos">4545</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -44401,26 +46731,26 @@ that an input expression is a SQL string).</li>
</div>
<a class="headerlink" href="#from_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="from_-4397"><a href="#from_-4397"><span class="linenos">4397</span></a><span class="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">Select</span><span class="p">:</span>
-</span><span id="from_-4398"><a href="#from_-4398"><span class="linenos">4398</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="from_-4399"><a href="#from_-4399"><span class="linenos">4399</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</span>
-</span><span id="from_-4400"><a href="#from_-4400"><span class="linenos">4400</span></a>
-</span><span id="from_-4401"><a href="#from_-4401"><span class="linenos">4401</span></a><span class="sd"> Example:</span>
-</span><span id="from_-4402"><a href="#from_-4402"><span class="linenos">4402</span></a><span class="sd"> &gt;&gt;&gt; from_(&quot;tbl&quot;).select(&quot;col1&quot;, &quot;col2&quot;).sql()</span>
-</span><span id="from_-4403"><a href="#from_-4403"><span class="linenos">4403</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
-</span><span id="from_-4404"><a href="#from_-4404"><span class="linenos">4404</span></a>
-</span><span id="from_-4405"><a href="#from_-4405"><span class="linenos">4405</span></a><span class="sd"> Args:</span>
-</span><span id="from_-4406"><a href="#from_-4406"><span class="linenos">4406</span></a><span class="sd"> *expressions (str | Expression): the SQL code string to parse as the FROM expressions of a</span>
-</span><span id="from_-4407"><a href="#from_-4407"><span class="linenos">4407</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
-</span><span id="from_-4408"><a href="#from_-4408"><span class="linenos">4408</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
-</span><span id="from_-4409"><a href="#from_-4409"><span class="linenos">4409</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="from_-4410"><a href="#from_-4410"><span class="linenos">4410</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="from_-4411"><a href="#from_-4411"><span class="linenos">4411</span></a><span class="sd"> that the input expression is a SQL string).</span>
-</span><span id="from_-4412"><a href="#from_-4412"><span class="linenos">4412</span></a>
-</span><span id="from_-4413"><a href="#from_-4413"><span class="linenos">4413</span></a><span class="sd"> Returns:</span>
-</span><span id="from_-4414"><a href="#from_-4414"><span class="linenos">4414</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
-</span><span id="from_-4415"><a href="#from_-4415"><span class="linenos">4415</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="from_-4416"><a href="#from_-4416"><span class="linenos">4416</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="from_-4548"><a href="#from_-4548"><span class="linenos">4548</span></a><span class="k">def</span> <span class="nf">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">Select</span><span class="p">:</span>
+</span><span id="from_-4549"><a href="#from_-4549"><span class="linenos">4549</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="from_-4550"><a href="#from_-4550"><span class="linenos">4550</span></a><span class="sd"> Initializes a syntax tree from a FROM expression.</span>
+</span><span id="from_-4551"><a href="#from_-4551"><span class="linenos">4551</span></a>
+</span><span id="from_-4552"><a href="#from_-4552"><span class="linenos">4552</span></a><span class="sd"> Example:</span>
+</span><span id="from_-4553"><a href="#from_-4553"><span class="linenos">4553</span></a><span class="sd"> &gt;&gt;&gt; from_(&quot;tbl&quot;).select(&quot;col1&quot;, &quot;col2&quot;).sql()</span>
+</span><span id="from_-4554"><a href="#from_-4554"><span class="linenos">4554</span></a><span class="sd"> &#39;SELECT col1, col2 FROM tbl&#39;</span>
+</span><span id="from_-4555"><a href="#from_-4555"><span class="linenos">4555</span></a>
+</span><span id="from_-4556"><a href="#from_-4556"><span class="linenos">4556</span></a><span class="sd"> Args:</span>
+</span><span id="from_-4557"><a href="#from_-4557"><span class="linenos">4557</span></a><span class="sd"> *expressions (str | Expression): the SQL code string to parse as the FROM expressions of a</span>
+</span><span id="from_-4558"><a href="#from_-4558"><span class="linenos">4558</span></a><span class="sd"> SELECT statement. If an Expression instance is passed, this is used as-is.</span>
+</span><span id="from_-4559"><a href="#from_-4559"><span class="linenos">4559</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
+</span><span id="from_-4560"><a href="#from_-4560"><span class="linenos">4560</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="from_-4561"><a href="#from_-4561"><span class="linenos">4561</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="from_-4562"><a href="#from_-4562"><span class="linenos">4562</span></a><span class="sd"> that the input expression is a SQL string).</span>
+</span><span id="from_-4563"><a href="#from_-4563"><span class="linenos">4563</span></a>
+</span><span id="from_-4564"><a href="#from_-4564"><span class="linenos">4564</span></a><span class="sd"> Returns:</span>
+</span><span id="from_-4565"><a href="#from_-4565"><span class="linenos">4565</span></a><span class="sd"> Select: the syntax tree for the SELECT statement.</span>
+</span><span id="from_-4566"><a href="#from_-4566"><span class="linenos">4566</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="from_-4567"><a href="#from_-4567"><span class="linenos">4567</span></a> <span class="k">return</span> <span class="n">Select</span><span class="p">()</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</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="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -44467,53 +46797,53 @@ that the input expression is a SQL string).</li>
</div>
<a class="headerlink" href="#update"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="update-4419"><a href="#update-4419"><span class="linenos">4419</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
-</span><span id="update-4420"><a href="#update-4420"><span class="linenos">4420</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span>
-</span><span id="update-4421"><a href="#update-4421"><span class="linenos">4421</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
-</span><span id="update-4422"><a href="#update-4422"><span class="linenos">4422</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="update-4423"><a href="#update-4423"><span class="linenos">4423</span></a> <span class="n">from_</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="update-4424"><a href="#update-4424"><span class="linenos">4424</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="update-4425"><a href="#update-4425"><span class="linenos">4425</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="update-4426"><a href="#update-4426"><span class="linenos">4426</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
-</span><span id="update-4427"><a href="#update-4427"><span class="linenos">4427</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="update-4428"><a href="#update-4428"><span class="linenos">4428</span></a><span class="sd"> Creates an update statement.</span>
-</span><span id="update-4429"><a href="#update-4429"><span class="linenos">4429</span></a>
-</span><span id="update-4430"><a href="#update-4430"><span class="linenos">4430</span></a><span class="sd"> Example:</span>
-</span><span id="update-4431"><a href="#update-4431"><span class="linenos">4431</span></a><span class="sd"> &gt;&gt;&gt; update(&quot;my_table&quot;, {&quot;x&quot;: 1, &quot;y&quot;: &quot;2&quot;, &quot;z&quot;: None}, from_=&quot;baz&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
-</span><span id="update-4432"><a href="#update-4432"><span class="linenos">4432</span></a><span class="sd"> &quot;UPDATE my_table SET x = 1, y = &#39;2&#39;, z = NULL FROM baz WHERE id &gt; 1&quot;</span>
-</span><span id="update-4433"><a href="#update-4433"><span class="linenos">4433</span></a>
-</span><span id="update-4434"><a href="#update-4434"><span class="linenos">4434</span></a><span class="sd"> Args:</span>
-</span><span id="update-4435"><a href="#update-4435"><span class="linenos">4435</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
-</span><span id="update-4436"><a href="#update-4436"><span class="linenos">4436</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
-</span><span id="update-4437"><a href="#update-4437"><span class="linenos">4437</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="update-4438"><a href="#update-4438"><span class="linenos">4438</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
-</span><span id="update-4439"><a href="#update-4439"><span class="linenos">4439</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="update-4440"><a href="#update-4440"><span class="linenos">4440</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="update-4441"><a href="#update-4441"><span class="linenos">4441</span></a>
-</span><span id="update-4442"><a href="#update-4442"><span class="linenos">4442</span></a><span class="sd"> Returns:</span>
-</span><span id="update-4443"><a href="#update-4443"><span class="linenos">4443</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
-</span><span id="update-4444"><a href="#update-4444"><span class="linenos">4444</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="update-4445"><a href="#update-4445"><span class="linenos">4445</span></a> <span class="n">update_expr</span> <span class="o">=</span> <span class="n">Update</span><span class="p">(</span><span class="n">this</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">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><span id="update-4446"><a href="#update-4446"><span class="linenos">4446</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="update-4447"><a href="#update-4447"><span class="linenos">4447</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="update-4448"><a href="#update-4448"><span class="linenos">4448</span></a> <span class="p">[</span>
-</span><span id="update-4449"><a href="#update-4449"><span class="linenos">4449</span></a> <span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">k</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="o">**</span><span class="n">opts</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">v</span><span class="p">))</span>
-</span><span id="update-4450"><a href="#update-4450"><span class="linenos">4450</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">properties</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="update-4451"><a href="#update-4451"><span class="linenos">4451</span></a> <span class="p">],</span>
-</span><span id="update-4452"><a href="#update-4452"><span class="linenos">4452</span></a> <span class="p">)</span>
-</span><span id="update-4453"><a href="#update-4453"><span class="linenos">4453</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="update-4454"><a href="#update-4454"><span class="linenos">4454</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="update-4455"><a href="#update-4455"><span class="linenos">4455</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
-</span><span id="update-4456"><a href="#update-4456"><span class="linenos">4456</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">From</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">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
-</span><span id="update-4457"><a href="#update-4457"><span class="linenos">4457</span></a> <span class="p">)</span>
-</span><span id="update-4458"><a href="#update-4458"><span class="linenos">4458</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
-</span><span id="update-4459"><a href="#update-4459"><span class="linenos">4459</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">Where</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">where</span><span class="p">)</span>
-</span><span id="update-4460"><a href="#update-4460"><span class="linenos">4460</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="update-4461"><a href="#update-4461"><span class="linenos">4461</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="update-4462"><a href="#update-4462"><span class="linenos">4462</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
-</span><span id="update-4463"><a href="#update-4463"><span class="linenos">4463</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Where</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">prefix</span><span class="o">=</span><span class="s2">&quot;WHERE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
-</span><span id="update-4464"><a href="#update-4464"><span class="linenos">4464</span></a> <span class="p">)</span>
-</span><span id="update-4465"><a href="#update-4465"><span class="linenos">4465</span></a> <span class="k">return</span> <span class="n">update_expr</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="update-4570"><a href="#update-4570"><span class="linenos">4570</span></a><span class="k">def</span> <span class="nf">update</span><span class="p">(</span>
+</span><span id="update-4571"><a href="#update-4571"><span class="linenos">4571</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span>
+</span><span id="update-4572"><a href="#update-4572"><span class="linenos">4572</span></a> <span class="n">properties</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
+</span><span id="update-4573"><a href="#update-4573"><span class="linenos">4573</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="update-4574"><a href="#update-4574"><span class="linenos">4574</span></a> <span class="n">from_</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="update-4575"><a href="#update-4575"><span class="linenos">4575</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="update-4576"><a href="#update-4576"><span class="linenos">4576</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="update-4577"><a href="#update-4577"><span class="linenos">4577</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Update</span><span class="p">:</span>
+</span><span id="update-4578"><a href="#update-4578"><span class="linenos">4578</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="update-4579"><a href="#update-4579"><span class="linenos">4579</span></a><span class="sd"> Creates an update statement.</span>
+</span><span id="update-4580"><a href="#update-4580"><span class="linenos">4580</span></a>
+</span><span id="update-4581"><a href="#update-4581"><span class="linenos">4581</span></a><span class="sd"> Example:</span>
+</span><span id="update-4582"><a href="#update-4582"><span class="linenos">4582</span></a><span class="sd"> &gt;&gt;&gt; update(&quot;my_table&quot;, {&quot;x&quot;: 1, &quot;y&quot;: &quot;2&quot;, &quot;z&quot;: None}, from_=&quot;baz&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
+</span><span id="update-4583"><a href="#update-4583"><span class="linenos">4583</span></a><span class="sd"> &quot;UPDATE my_table SET x = 1, y = &#39;2&#39;, z = NULL FROM baz WHERE id &gt; 1&quot;</span>
+</span><span id="update-4584"><a href="#update-4584"><span class="linenos">4584</span></a>
+</span><span id="update-4585"><a href="#update-4585"><span class="linenos">4585</span></a><span class="sd"> Args:</span>
+</span><span id="update-4586"><a href="#update-4586"><span class="linenos">4586</span></a><span class="sd"> *properties: dictionary of properties to set which are</span>
+</span><span id="update-4587"><a href="#update-4587"><span class="linenos">4587</span></a><span class="sd"> auto converted to sql objects eg None -&gt; NULL</span>
+</span><span id="update-4588"><a href="#update-4588"><span class="linenos">4588</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="update-4589"><a href="#update-4589"><span class="linenos">4589</span></a><span class="sd"> from_: sql statement parsed into a FROM statement</span>
+</span><span id="update-4590"><a href="#update-4590"><span class="linenos">4590</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="update-4591"><a href="#update-4591"><span class="linenos">4591</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="update-4592"><a href="#update-4592"><span class="linenos">4592</span></a>
+</span><span id="update-4593"><a href="#update-4593"><span class="linenos">4593</span></a><span class="sd"> Returns:</span>
+</span><span id="update-4594"><a href="#update-4594"><span class="linenos">4594</span></a><span class="sd"> Update: the syntax tree for the UPDATE statement.</span>
+</span><span id="update-4595"><a href="#update-4595"><span class="linenos">4595</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="update-4596"><a href="#update-4596"><span class="linenos">4596</span></a> <span class="n">update_expr</span> <span class="o">=</span> <span class="n">Update</span><span class="p">(</span><span class="n">this</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">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><span id="update-4597"><a href="#update-4597"><span class="linenos">4597</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="update-4598"><a href="#update-4598"><span class="linenos">4598</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
+</span><span id="update-4599"><a href="#update-4599"><span class="linenos">4599</span></a> <span class="p">[</span>
+</span><span id="update-4600"><a href="#update-4600"><span class="linenos">4600</span></a> <span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">k</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="o">**</span><span class="n">opts</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">convert</span><span class="p">(</span><span class="n">v</span><span class="p">))</span>
+</span><span id="update-4601"><a href="#update-4601"><span class="linenos">4601</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">properties</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="update-4602"><a href="#update-4602"><span class="linenos">4602</span></a> <span class="p">],</span>
+</span><span id="update-4603"><a href="#update-4603"><span class="linenos">4603</span></a> <span class="p">)</span>
+</span><span id="update-4604"><a href="#update-4604"><span class="linenos">4604</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="update-4605"><a href="#update-4605"><span class="linenos">4605</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="update-4606"><a href="#update-4606"><span class="linenos">4606</span></a> <span class="s2">&quot;from&quot;</span><span class="p">,</span>
+</span><span id="update-4607"><a href="#update-4607"><span class="linenos">4607</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">From</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">prefix</span><span class="o">=</span><span class="s2">&quot;FROM&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="update-4608"><a href="#update-4608"><span class="linenos">4608</span></a> <span class="p">)</span>
+</span><span id="update-4609"><a href="#update-4609"><span class="linenos">4609</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">Condition</span><span class="p">):</span>
+</span><span id="update-4610"><a href="#update-4610"><span class="linenos">4610</span></a> <span class="n">where</span> <span class="o">=</span> <span class="n">Where</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">where</span><span class="p">)</span>
+</span><span id="update-4611"><a href="#update-4611"><span class="linenos">4611</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="update-4612"><a href="#update-4612"><span class="linenos">4612</span></a> <span class="n">update_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="update-4613"><a href="#update-4613"><span class="linenos">4613</span></a> <span class="s2">&quot;where&quot;</span><span class="p">,</span>
+</span><span id="update-4614"><a href="#update-4614"><span class="linenos">4614</span></a> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">into</span><span class="o">=</span><span class="n">Where</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">prefix</span><span class="o">=</span><span class="s2">&quot;WHERE&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">),</span>
+</span><span id="update-4615"><a href="#update-4615"><span class="linenos">4615</span></a> <span class="p">)</span>
+</span><span id="update-4616"><a href="#update-4616"><span class="linenos">4616</span></a> <span class="k">return</span> <span class="n">update_expr</span>
</span></pre></div>
@@ -44560,35 +46890,35 @@ auto converted to sql objects eg None -> NULL</li>
</div>
<a class="headerlink" href="#delete"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="delete-4468"><a href="#delete-4468"><span class="linenos">4468</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
-</span><span id="delete-4469"><a href="#delete-4469"><span class="linenos">4469</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="delete-4470"><a href="#delete-4470"><span class="linenos">4470</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="delete-4471"><a href="#delete-4471"><span class="linenos">4471</span></a> <span class="n">returning</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="delete-4472"><a href="#delete-4472"><span class="linenos">4472</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="delete-4473"><a href="#delete-4473"><span class="linenos">4473</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="delete-4474"><a href="#delete-4474"><span class="linenos">4474</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
-</span><span id="delete-4475"><a href="#delete-4475"><span class="linenos">4475</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="delete-4476"><a href="#delete-4476"><span class="linenos">4476</span></a><span class="sd"> Builds a delete statement.</span>
-</span><span id="delete-4477"><a href="#delete-4477"><span class="linenos">4477</span></a>
-</span><span id="delete-4478"><a href="#delete-4478"><span class="linenos">4478</span></a><span class="sd"> Example:</span>
-</span><span id="delete-4479"><a href="#delete-4479"><span class="linenos">4479</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;my_table&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
-</span><span id="delete-4480"><a href="#delete-4480"><span class="linenos">4480</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</span>
-</span><span id="delete-4481"><a href="#delete-4481"><span class="linenos">4481</span></a>
-</span><span id="delete-4482"><a href="#delete-4482"><span class="linenos">4482</span></a><span class="sd"> Args:</span>
-</span><span id="delete-4483"><a href="#delete-4483"><span class="linenos">4483</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
-</span><span id="delete-4484"><a href="#delete-4484"><span class="linenos">4484</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
-</span><span id="delete-4485"><a href="#delete-4485"><span class="linenos">4485</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
-</span><span id="delete-4486"><a href="#delete-4486"><span class="linenos">4486</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="delete-4487"><a href="#delete-4487"><span class="linenos">4487</span></a>
-</span><span id="delete-4488"><a href="#delete-4488"><span class="linenos">4488</span></a><span class="sd"> Returns:</span>
-</span><span id="delete-4489"><a href="#delete-4489"><span class="linenos">4489</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
-</span><span id="delete-4490"><a href="#delete-4490"><span class="linenos">4490</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="delete-4491"><a href="#delete-4491"><span class="linenos">4491</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">Delete</span><span class="p">()</span><span class="o">.</span><span class="n">delete</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">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><span id="delete-4492"><a href="#delete-4492"><span class="linenos">4492</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
-</span><span id="delete-4493"><a href="#delete-4493"><span class="linenos">4493</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">where</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="delete-4494"><a href="#delete-4494"><span class="linenos">4494</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
-</span><span id="delete-4495"><a href="#delete-4495"><span class="linenos">4495</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">returning</span><span class="p">(</span><span class="n">returning</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="delete-4496"><a href="#delete-4496"><span class="linenos">4496</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="delete-4619"><a href="#delete-4619"><span class="linenos">4619</span></a><span class="k">def</span> <span class="nf">delete</span><span class="p">(</span>
+</span><span id="delete-4620"><a href="#delete-4620"><span class="linenos">4620</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="delete-4621"><a href="#delete-4621"><span class="linenos">4621</span></a> <span class="n">where</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="delete-4622"><a href="#delete-4622"><span class="linenos">4622</span></a> <span class="n">returning</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="delete-4623"><a href="#delete-4623"><span class="linenos">4623</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="delete-4624"><a href="#delete-4624"><span class="linenos">4624</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="delete-4625"><a href="#delete-4625"><span class="linenos">4625</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Delete</span><span class="p">:</span>
+</span><span id="delete-4626"><a href="#delete-4626"><span class="linenos">4626</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="delete-4627"><a href="#delete-4627"><span class="linenos">4627</span></a><span class="sd"> Builds a delete statement.</span>
+</span><span id="delete-4628"><a href="#delete-4628"><span class="linenos">4628</span></a>
+</span><span id="delete-4629"><a href="#delete-4629"><span class="linenos">4629</span></a><span class="sd"> Example:</span>
+</span><span id="delete-4630"><a href="#delete-4630"><span class="linenos">4630</span></a><span class="sd"> &gt;&gt;&gt; delete(&quot;my_table&quot;, where=&quot;id &gt; 1&quot;).sql()</span>
+</span><span id="delete-4631"><a href="#delete-4631"><span class="linenos">4631</span></a><span class="sd"> &#39;DELETE FROM my_table WHERE id &gt; 1&#39;</span>
+</span><span id="delete-4632"><a href="#delete-4632"><span class="linenos">4632</span></a>
+</span><span id="delete-4633"><a href="#delete-4633"><span class="linenos">4633</span></a><span class="sd"> Args:</span>
+</span><span id="delete-4634"><a href="#delete-4634"><span class="linenos">4634</span></a><span class="sd"> where: sql conditional parsed into a WHERE statement</span>
+</span><span id="delete-4635"><a href="#delete-4635"><span class="linenos">4635</span></a><span class="sd"> returning: sql conditional parsed into a RETURNING statement</span>
+</span><span id="delete-4636"><a href="#delete-4636"><span class="linenos">4636</span></a><span class="sd"> dialect: the dialect used to parse the input expressions.</span>
+</span><span id="delete-4637"><a href="#delete-4637"><span class="linenos">4637</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="delete-4638"><a href="#delete-4638"><span class="linenos">4638</span></a>
+</span><span id="delete-4639"><a href="#delete-4639"><span class="linenos">4639</span></a><span class="sd"> Returns:</span>
+</span><span id="delete-4640"><a href="#delete-4640"><span class="linenos">4640</span></a><span class="sd"> Delete: the syntax tree for the DELETE statement.</span>
+</span><span id="delete-4641"><a href="#delete-4641"><span class="linenos">4641</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="delete-4642"><a href="#delete-4642"><span class="linenos">4642</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">Delete</span><span class="p">()</span><span class="o">.</span><span class="n">delete</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">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><span id="delete-4643"><a href="#delete-4643"><span class="linenos">4643</span></a> <span class="k">if</span> <span class="n">where</span><span class="p">:</span>
+</span><span id="delete-4644"><a href="#delete-4644"><span class="linenos">4644</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">where</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="delete-4645"><a href="#delete-4645"><span class="linenos">4645</span></a> <span class="k">if</span> <span class="n">returning</span><span class="p">:</span>
+</span><span id="delete-4646"><a href="#delete-4646"><span class="linenos">4646</span></a> <span class="n">delete_expr</span> <span class="o">=</span> <span class="n">delete_expr</span><span class="o">.</span><span class="n">returning</span><span class="p">(</span><span class="n">returning</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="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="delete-4647"><a href="#delete-4647"><span class="linenos">4647</span></a> <span class="k">return</span> <span class="n">delete_expr</span>
</span></pre></div>
@@ -44627,43 +46957,45 @@ auto converted to sql objects eg None -> NULL</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">condition</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Condition">sqlglot.expressions.Condition</a></span>:</span></span>
+ <span class="name">condition</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span>,</span><span class="param"> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">copy</span><span class="o">=</span><span class="kc">True</span>,</span><span class="param"> <span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Condition">sqlglot.expressions.Condition</a></span>:</span></span>
<label class="view-source-button" for="condition-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#condition"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="condition-4499"><a href="#condition-4499"><span class="linenos">4499</span></a><span class="k">def</span> <span class="nf">condition</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="kc">None</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">Condition</span><span class="p">:</span>
-</span><span id="condition-4500"><a href="#condition-4500"><span class="linenos">4500</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="condition-4501"><a href="#condition-4501"><span class="linenos">4501</span></a><span class="sd"> Initialize a logical condition expression.</span>
-</span><span id="condition-4502"><a href="#condition-4502"><span class="linenos">4502</span></a>
-</span><span id="condition-4503"><a href="#condition-4503"><span class="linenos">4503</span></a><span class="sd"> Example:</span>
-</span><span id="condition-4504"><a href="#condition-4504"><span class="linenos">4504</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
-</span><span id="condition-4505"><a href="#condition-4505"><span class="linenos">4505</span></a><span class="sd"> &#39;x = 1&#39;</span>
-</span><span id="condition-4506"><a href="#condition-4506"><span class="linenos">4506</span></a>
-</span><span id="condition-4507"><a href="#condition-4507"><span class="linenos">4507</span></a><span class="sd"> This is helpful for composing larger logical syntax trees:</span>
-</span><span id="condition-4508"><a href="#condition-4508"><span class="linenos">4508</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
-</span><span id="condition-4509"><a href="#condition-4509"><span class="linenos">4509</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
-</span><span id="condition-4510"><a href="#condition-4510"><span class="linenos">4510</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
-</span><span id="condition-4511"><a href="#condition-4511"><span class="linenos">4511</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</span>
-</span><span id="condition-4512"><a href="#condition-4512"><span class="linenos">4512</span></a>
-</span><span id="condition-4513"><a href="#condition-4513"><span class="linenos">4513</span></a><span class="sd"> Args:</span>
-</span><span id="condition-4514"><a href="#condition-4514"><span class="linenos">4514</span></a><span class="sd"> *expression (str | Expression): the SQL code string to parse.</span>
-</span><span id="condition-4515"><a href="#condition-4515"><span class="linenos">4515</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="condition-4516"><a href="#condition-4516"><span class="linenos">4516</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
-</span><span id="condition-4517"><a href="#condition-4517"><span class="linenos">4517</span></a><span class="sd"> input expression is a SQL string).</span>
-</span><span id="condition-4518"><a href="#condition-4518"><span class="linenos">4518</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
-</span><span id="condition-4519"><a href="#condition-4519"><span class="linenos">4519</span></a><span class="sd"> that the input expression is a SQL string).</span>
-</span><span id="condition-4520"><a href="#condition-4520"><span class="linenos">4520</span></a>
-</span><span id="condition-4521"><a href="#condition-4521"><span class="linenos">4521</span></a><span class="sd"> Returns:</span>
-</span><span id="condition-4522"><a href="#condition-4522"><span class="linenos">4522</span></a><span class="sd"> Condition: the expression</span>
-</span><span id="condition-4523"><a href="#condition-4523"><span class="linenos">4523</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="condition-4524"><a href="#condition-4524"><span class="linenos">4524</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span> <span class="c1"># type: ignore</span>
-</span><span id="condition-4525"><a href="#condition-4525"><span class="linenos">4525</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="condition-4526"><a href="#condition-4526"><span class="linenos">4526</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
-</span><span id="condition-4527"><a href="#condition-4527"><span class="linenos">4527</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="condition-4528"><a href="#condition-4528"><span class="linenos">4528</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="condition-4529"><a href="#condition-4529"><span class="linenos">4529</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="condition-4650"><a href="#condition-4650"><span class="linenos">4650</span></a><span class="k">def</span> <span class="nf">condition</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Condition</span><span class="p">:</span>
+</span><span id="condition-4651"><a href="#condition-4651"><span class="linenos">4651</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="condition-4652"><a href="#condition-4652"><span class="linenos">4652</span></a><span class="sd"> Initialize a logical condition expression.</span>
+</span><span id="condition-4653"><a href="#condition-4653"><span class="linenos">4653</span></a>
+</span><span id="condition-4654"><a href="#condition-4654"><span class="linenos">4654</span></a><span class="sd"> Example:</span>
+</span><span id="condition-4655"><a href="#condition-4655"><span class="linenos">4655</span></a><span class="sd"> &gt;&gt;&gt; condition(&quot;x=1&quot;).sql()</span>
+</span><span id="condition-4656"><a href="#condition-4656"><span class="linenos">4656</span></a><span class="sd"> &#39;x = 1&#39;</span>
+</span><span id="condition-4657"><a href="#condition-4657"><span class="linenos">4657</span></a>
+</span><span id="condition-4658"><a href="#condition-4658"><span class="linenos">4658</span></a><span class="sd"> This is helpful for composing larger logical syntax trees:</span>
+</span><span id="condition-4659"><a href="#condition-4659"><span class="linenos">4659</span></a><span class="sd"> &gt;&gt;&gt; where = condition(&quot;x=1&quot;)</span>
+</span><span id="condition-4660"><a href="#condition-4660"><span class="linenos">4660</span></a><span class="sd"> &gt;&gt;&gt; where = where.and_(&quot;y=1&quot;)</span>
+</span><span id="condition-4661"><a href="#condition-4661"><span class="linenos">4661</span></a><span class="sd"> &gt;&gt;&gt; Select().from_(&quot;tbl&quot;).select(&quot;*&quot;).where(where).sql()</span>
+</span><span id="condition-4662"><a href="#condition-4662"><span class="linenos">4662</span></a><span class="sd"> &#39;SELECT * FROM tbl WHERE x = 1 AND y = 1&#39;</span>
+</span><span id="condition-4663"><a href="#condition-4663"><span class="linenos">4663</span></a>
+</span><span id="condition-4664"><a href="#condition-4664"><span class="linenos">4664</span></a><span class="sd"> Args:</span>
+</span><span id="condition-4665"><a href="#condition-4665"><span class="linenos">4665</span></a><span class="sd"> *expression (str | Expression): the SQL code string to parse.</span>
+</span><span id="condition-4666"><a href="#condition-4666"><span class="linenos">4666</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="condition-4667"><a href="#condition-4667"><span class="linenos">4667</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression (in the case that the</span>
+</span><span id="condition-4668"><a href="#condition-4668"><span class="linenos">4668</span></a><span class="sd"> input expression is a SQL string).</span>
+</span><span id="condition-4669"><a href="#condition-4669"><span class="linenos">4669</span></a><span class="sd"> copy (bool): Whether or not to copy `expression` (only applies to expressions).</span>
+</span><span id="condition-4670"><a href="#condition-4670"><span class="linenos">4670</span></a><span class="sd"> **opts: other options to use to parse the input expressions (again, in the case</span>
+</span><span id="condition-4671"><a href="#condition-4671"><span class="linenos">4671</span></a><span class="sd"> that the input expression is a SQL string).</span>
+</span><span id="condition-4672"><a href="#condition-4672"><span class="linenos">4672</span></a>
+</span><span id="condition-4673"><a href="#condition-4673"><span class="linenos">4673</span></a><span class="sd"> Returns:</span>
+</span><span id="condition-4674"><a href="#condition-4674"><span class="linenos">4674</span></a><span class="sd"> Condition: the expression</span>
+</span><span id="condition-4675"><a href="#condition-4675"><span class="linenos">4675</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="condition-4676"><a href="#condition-4676"><span class="linenos">4676</span></a> <span class="k">return</span> <span class="n">maybe_parse</span><span class="p">(</span> <span class="c1"># type: ignore</span>
+</span><span id="condition-4677"><a href="#condition-4677"><span class="linenos">4677</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="condition-4678"><a href="#condition-4678"><span class="linenos">4678</span></a> <span class="n">into</span><span class="o">=</span><span class="n">Condition</span><span class="p">,</span>
+</span><span id="condition-4679"><a href="#condition-4679"><span class="linenos">4679</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="condition-4680"><a href="#condition-4680"><span class="linenos">4680</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="condition-4681"><a href="#condition-4681"><span class="linenos">4681</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="condition-4682"><a href="#condition-4682"><span class="linenos">4682</span></a> <span class="p">)</span>
</span></pre></div>
@@ -44696,6 +47028,7 @@ auto converted to sql objects eg None -> NULL</li>
If an Expression instance is passed, this is used as-is.</li>
<li><strong>dialect (str):</strong> the dialect used to parse the input expression (in the case that the
input expression is a SQL string).</li>
+<li><strong>copy (bool):</strong> Whether or not to copy <code>expression</code> (only applies to expressions).</li>
<li><strong>**opts:</strong> other options to use to parse the input expressions (again, in the case
that the input expression is a SQL string).</li>
</ul>
@@ -44714,30 +47047,31 @@ that the input expression is a SQL string).</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">and_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#And">sqlglot.expressions.And</a></span>:</span></span>
+ <span class="name">and_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#And">sqlglot.expressions.And</a></span>:</span></span>
<label class="view-source-button" for="and_-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#and_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="and_-4532"><a href="#and_-4532"><span class="linenos">4532</span></a><span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">And</span><span class="p">:</span>
-</span><span id="and_-4533"><a href="#and_-4533"><span class="linenos">4533</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="and_-4534"><a href="#and_-4534"><span class="linenos">4534</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</span>
-</span><span id="and_-4535"><a href="#and_-4535"><span class="linenos">4535</span></a>
-</span><span id="and_-4536"><a href="#and_-4536"><span class="linenos">4536</span></a><span class="sd"> Example:</span>
-</span><span id="and_-4537"><a href="#and_-4537"><span class="linenos">4537</span></a><span class="sd"> &gt;&gt;&gt; and_(&quot;x=1&quot;, and_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
-</span><span id="and_-4538"><a href="#and_-4538"><span class="linenos">4538</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</span>
-</span><span id="and_-4539"><a href="#and_-4539"><span class="linenos">4539</span></a>
-</span><span id="and_-4540"><a href="#and_-4540"><span class="linenos">4540</span></a><span class="sd"> Args:</span>
-</span><span id="and_-4541"><a href="#and_-4541"><span class="linenos">4541</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="and_-4542"><a href="#and_-4542"><span class="linenos">4542</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="and_-4543"><a href="#and_-4543"><span class="linenos">4543</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="and_-4544"><a href="#and_-4544"><span class="linenos">4544</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="and_-4545"><a href="#and_-4545"><span class="linenos">4545</span></a>
-</span><span id="and_-4546"><a href="#and_-4546"><span class="linenos">4546</span></a><span class="sd"> Returns:</span>
-</span><span id="and_-4547"><a href="#and_-4547"><span class="linenos">4547</span></a><span class="sd"> And: the new condition</span>
-</span><span id="and_-4548"><a href="#and_-4548"><span class="linenos">4548</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="and_-4549"><a href="#and_-4549"><span class="linenos">4549</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">And</span><span class="p">,</span> <span class="n">dialect</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="and_-4685"><a href="#and_-4685"><span class="linenos">4685</span></a><span class="k">def</span> <span class="nf">and_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">And</span><span class="p">:</span>
+</span><span id="and_-4686"><a href="#and_-4686"><span class="linenos">4686</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="and_-4687"><a href="#and_-4687"><span class="linenos">4687</span></a><span class="sd"> Combine multiple conditions with an AND logical operator.</span>
+</span><span id="and_-4688"><a href="#and_-4688"><span class="linenos">4688</span></a>
+</span><span id="and_-4689"><a href="#and_-4689"><span class="linenos">4689</span></a><span class="sd"> Example:</span>
+</span><span id="and_-4690"><a href="#and_-4690"><span class="linenos">4690</span></a><span class="sd"> &gt;&gt;&gt; and_(&quot;x=1&quot;, and_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
+</span><span id="and_-4691"><a href="#and_-4691"><span class="linenos">4691</span></a><span class="sd"> &#39;x = 1 AND (y = 1 AND z = 1)&#39;</span>
+</span><span id="and_-4692"><a href="#and_-4692"><span class="linenos">4692</span></a>
+</span><span id="and_-4693"><a href="#and_-4693"><span class="linenos">4693</span></a><span class="sd"> Args:</span>
+</span><span id="and_-4694"><a href="#and_-4694"><span class="linenos">4694</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="and_-4695"><a href="#and_-4695"><span class="linenos">4695</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="and_-4696"><a href="#and_-4696"><span class="linenos">4696</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="and_-4697"><a href="#and_-4697"><span class="linenos">4697</span></a><span class="sd"> copy (bool): whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="and_-4698"><a href="#and_-4698"><span class="linenos">4698</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="and_-4699"><a href="#and_-4699"><span class="linenos">4699</span></a>
+</span><span id="and_-4700"><a href="#and_-4700"><span class="linenos">4700</span></a><span class="sd"> Returns:</span>
+</span><span id="and_-4701"><a href="#and_-4701"><span class="linenos">4701</span></a><span class="sd"> And: the new condition</span>
+</span><span id="and_-4702"><a href="#and_-4702"><span class="linenos">4702</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="and_-4703"><a href="#and_-4703"><span class="linenos">4703</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">And</span><span class="p">,</span> <span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -44759,6 +47093,7 @@ that the input expression is a SQL string).</li>
<li><strong>*expressions (str | Expression):</strong> the SQL code strings to parse.
If an Expression instance is passed, this is used as-is.</li>
<li><strong>dialect (str):</strong> the dialect used to parse the input expression.</li>
+<li><strong>copy (bool):</strong> whether or not to copy <code>expressions</code> (only applies to Expressions).</li>
<li><strong>**opts:</strong> other options to use to parse the input expressions.</li>
</ul>
@@ -44776,30 +47111,31 @@ If an Expression instance is passed, this is used as-is.</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">or_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Or">sqlglot.expressions.Or</a></span>:</span></span>
+ <span class="name">or_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="o">*</span><span class="n">expressions</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Or">sqlglot.expressions.Or</a></span>:</span></span>
<label class="view-source-button" for="or_-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#or_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="or_-4552"><a href="#or_-4552"><span class="linenos">4552</span></a><span class="k">def</span> <span class="nf">or_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</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">Or</span><span class="p">:</span>
-</span><span id="or_-4553"><a href="#or_-4553"><span class="linenos">4553</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="or_-4554"><a href="#or_-4554"><span class="linenos">4554</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
-</span><span id="or_-4555"><a href="#or_-4555"><span class="linenos">4555</span></a>
-</span><span id="or_-4556"><a href="#or_-4556"><span class="linenos">4556</span></a><span class="sd"> Example:</span>
-</span><span id="or_-4557"><a href="#or_-4557"><span class="linenos">4557</span></a><span class="sd"> &gt;&gt;&gt; or_(&quot;x=1&quot;, or_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
-</span><span id="or_-4558"><a href="#or_-4558"><span class="linenos">4558</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
-</span><span id="or_-4559"><a href="#or_-4559"><span class="linenos">4559</span></a>
-</span><span id="or_-4560"><a href="#or_-4560"><span class="linenos">4560</span></a><span class="sd"> Args:</span>
-</span><span id="or_-4561"><a href="#or_-4561"><span class="linenos">4561</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
-</span><span id="or_-4562"><a href="#or_-4562"><span class="linenos">4562</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="or_-4563"><a href="#or_-4563"><span class="linenos">4563</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="or_-4564"><a href="#or_-4564"><span class="linenos">4564</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="or_-4565"><a href="#or_-4565"><span class="linenos">4565</span></a>
-</span><span id="or_-4566"><a href="#or_-4566"><span class="linenos">4566</span></a><span class="sd"> Returns:</span>
-</span><span id="or_-4567"><a href="#or_-4567"><span class="linenos">4567</span></a><span class="sd"> Or: the new condition</span>
-</span><span id="or_-4568"><a href="#or_-4568"><span class="linenos">4568</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="or_-4569"><a href="#or_-4569"><span class="linenos">4569</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">Or</span><span class="p">,</span> <span class="n">dialect</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="or_-4706"><a href="#or_-4706"><span class="linenos">4706</span></a><span class="k">def</span> <span class="nf">or_</span><span class="p">(</span><span class="o">*</span><span class="n">expressions</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Or</span><span class="p">:</span>
+</span><span id="or_-4707"><a href="#or_-4707"><span class="linenos">4707</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="or_-4708"><a href="#or_-4708"><span class="linenos">4708</span></a><span class="sd"> Combine multiple conditions with an OR logical operator.</span>
+</span><span id="or_-4709"><a href="#or_-4709"><span class="linenos">4709</span></a>
+</span><span id="or_-4710"><a href="#or_-4710"><span class="linenos">4710</span></a><span class="sd"> Example:</span>
+</span><span id="or_-4711"><a href="#or_-4711"><span class="linenos">4711</span></a><span class="sd"> &gt;&gt;&gt; or_(&quot;x=1&quot;, or_(&quot;y=1&quot;, &quot;z=1&quot;)).sql()</span>
+</span><span id="or_-4712"><a href="#or_-4712"><span class="linenos">4712</span></a><span class="sd"> &#39;x = 1 OR (y = 1 OR z = 1)&#39;</span>
+</span><span id="or_-4713"><a href="#or_-4713"><span class="linenos">4713</span></a>
+</span><span id="or_-4714"><a href="#or_-4714"><span class="linenos">4714</span></a><span class="sd"> Args:</span>
+</span><span id="or_-4715"><a href="#or_-4715"><span class="linenos">4715</span></a><span class="sd"> *expressions (str | Expression): the SQL code strings to parse.</span>
+</span><span id="or_-4716"><a href="#or_-4716"><span class="linenos">4716</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="or_-4717"><a href="#or_-4717"><span class="linenos">4717</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="or_-4718"><a href="#or_-4718"><span class="linenos">4718</span></a><span class="sd"> copy (bool): whether or not to copy `expressions` (only applies to Expressions).</span>
+</span><span id="or_-4719"><a href="#or_-4719"><span class="linenos">4719</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="or_-4720"><a href="#or_-4720"><span class="linenos">4720</span></a>
+</span><span id="or_-4721"><a href="#or_-4721"><span class="linenos">4721</span></a><span class="sd"> Returns:</span>
+</span><span id="or_-4722"><a href="#or_-4722"><span class="linenos">4722</span></a><span class="sd"> Or: the new condition</span>
+</span><span id="or_-4723"><a href="#or_-4723"><span class="linenos">4723</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="or_-4724"><a href="#or_-4724"><span class="linenos">4724</span></a> <span class="k">return</span> <span class="n">_combine</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="n">Or</span><span class="p">,</span> <span class="n">dialect</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -44821,6 +47157,7 @@ If an Expression instance is passed, this is used as-is.</li>
<li><strong>*expressions (str | Expression):</strong> the SQL code strings to parse.
If an Expression instance is passed, this is used as-is.</li>
<li><strong>dialect (str):</strong> the dialect used to parse the input expression.</li>
+<li><strong>copy (bool):</strong> whether or not to copy <code>expressions</code> (only applies to Expressions).</li>
<li><strong>**opts:</strong> other options to use to parse the input expressions.</li>
</ul>
@@ -44838,35 +47175,36 @@ If an Expression instance is passed, this is used as-is.</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">not_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Not">sqlglot.expressions.Not</a></span>:</span></span>
+ <span class="name">not_</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">dialect</span><span class="o">=</span><span class="kc">None</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span>, </span><span class="param"><span class="o">**</span><span class="n">opts</span></span><span class="return-annotation">) -> <span class="n"><a href="#Not">sqlglot.expressions.Not</a></span>:</span></span>
<label class="view-source-button" for="not_-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#not_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="not_-4572"><a href="#not_-4572"><span class="linenos">4572</span></a><span class="k">def</span> <span class="nf">not_</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="kc">None</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">Not</span><span class="p">:</span>
-</span><span id="not_-4573"><a href="#not_-4573"><span class="linenos">4573</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="not_-4574"><a href="#not_-4574"><span class="linenos">4574</span></a><span class="sd"> Wrap a condition with a NOT operator.</span>
-</span><span id="not_-4575"><a href="#not_-4575"><span class="linenos">4575</span></a>
-</span><span id="not_-4576"><a href="#not_-4576"><span class="linenos">4576</span></a><span class="sd"> Example:</span>
-</span><span id="not_-4577"><a href="#not_-4577"><span class="linenos">4577</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
-</span><span id="not_-4578"><a href="#not_-4578"><span class="linenos">4578</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</span>
-</span><span id="not_-4579"><a href="#not_-4579"><span class="linenos">4579</span></a>
-</span><span id="not_-4580"><a href="#not_-4580"><span class="linenos">4580</span></a><span class="sd"> Args:</span>
-</span><span id="not_-4581"><a href="#not_-4581"><span class="linenos">4581</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
-</span><span id="not_-4582"><a href="#not_-4582"><span class="linenos">4582</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="not_-4583"><a href="#not_-4583"><span class="linenos">4583</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="not_-4584"><a href="#not_-4584"><span class="linenos">4584</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="not_-4585"><a href="#not_-4585"><span class="linenos">4585</span></a>
-</span><span id="not_-4586"><a href="#not_-4586"><span class="linenos">4586</span></a><span class="sd"> Returns:</span>
-</span><span id="not_-4587"><a href="#not_-4587"><span class="linenos">4587</span></a><span class="sd"> Not: the new condition</span>
-</span><span id="not_-4588"><a href="#not_-4588"><span class="linenos">4588</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="not_-4589"><a href="#not_-4589"><span class="linenos">4589</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
-</span><span id="not_-4590"><a href="#not_-4590"><span class="linenos">4590</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="not_-4591"><a href="#not_-4591"><span class="linenos">4591</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
-</span><span id="not_-4592"><a href="#not_-4592"><span class="linenos">4592</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="not_-4593"><a href="#not_-4593"><span class="linenos">4593</span></a> <span class="p">)</span>
-</span><span id="not_-4594"><a href="#not_-4594"><span class="linenos">4594</span></a> <span class="k">return</span> <span class="n">Not</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">_wrap_operator</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="not_-4727"><a href="#not_-4727"><span class="linenos">4727</span></a><span class="k">def</span> <span class="nf">not_</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="kc">None</span><span class="p">,</span> <span class="n">copy</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="n">Not</span><span class="p">:</span>
+</span><span id="not_-4728"><a href="#not_-4728"><span class="linenos">4728</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="not_-4729"><a href="#not_-4729"><span class="linenos">4729</span></a><span class="sd"> Wrap a condition with a NOT operator.</span>
+</span><span id="not_-4730"><a href="#not_-4730"><span class="linenos">4730</span></a>
+</span><span id="not_-4731"><a href="#not_-4731"><span class="linenos">4731</span></a><span class="sd"> Example:</span>
+</span><span id="not_-4732"><a href="#not_-4732"><span class="linenos">4732</span></a><span class="sd"> &gt;&gt;&gt; not_(&quot;this_suit=&#39;black&#39;&quot;).sql()</span>
+</span><span id="not_-4733"><a href="#not_-4733"><span class="linenos">4733</span></a><span class="sd"> &quot;NOT this_suit = &#39;black&#39;&quot;</span>
+</span><span id="not_-4734"><a href="#not_-4734"><span class="linenos">4734</span></a>
+</span><span id="not_-4735"><a href="#not_-4735"><span class="linenos">4735</span></a><span class="sd"> Args:</span>
+</span><span id="not_-4736"><a href="#not_-4736"><span class="linenos">4736</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
+</span><span id="not_-4737"><a href="#not_-4737"><span class="linenos">4737</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="not_-4738"><a href="#not_-4738"><span class="linenos">4738</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="not_-4739"><a href="#not_-4739"><span class="linenos">4739</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="not_-4740"><a href="#not_-4740"><span class="linenos">4740</span></a>
+</span><span id="not_-4741"><a href="#not_-4741"><span class="linenos">4741</span></a><span class="sd"> Returns:</span>
+</span><span id="not_-4742"><a href="#not_-4742"><span class="linenos">4742</span></a><span class="sd"> Not: the new condition</span>
+</span><span id="not_-4743"><a href="#not_-4743"><span class="linenos">4743</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="not_-4744"><a href="#not_-4744"><span class="linenos">4744</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">condition</span><span class="p">(</span>
+</span><span id="not_-4745"><a href="#not_-4745"><span class="linenos">4745</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="not_-4746"><a href="#not_-4746"><span class="linenos">4746</span></a> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
+</span><span id="not_-4747"><a href="#not_-4747"><span class="linenos">4747</span></a> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">,</span>
+</span><span id="not_-4748"><a href="#not_-4748"><span class="linenos">4748</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="not_-4749"><a href="#not_-4749"><span class="linenos">4749</span></a> <span class="p">)</span>
+</span><span id="not_-4750"><a href="#not_-4750"><span class="linenos">4750</span></a> <span class="k">return</span> <span class="n">Not</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">_wrap</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">Connector</span><span class="p">))</span>
</span></pre></div>
@@ -44905,14 +47243,14 @@ If an Expression instance is passed, this is used as-is.</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">paren</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span></span><span class="return-annotation">) -> <span class="n"><a href="#Paren">sqlglot.expressions.Paren</a></span>:</span></span>
+ <span class="name">paren</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">copy</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">) -> <span class="n"><a href="#Paren">sqlglot.expressions.Paren</a></span>:</span></span>
<label class="view-source-button" for="paren-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#paren"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="paren-4597"><a href="#paren-4597"><span class="linenos">4597</span></a><span class="k">def</span> <span class="nf">paren</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
-</span><span id="paren-4598"><a href="#paren-4598"><span class="linenos">4598</span></a> <span class="k">return</span> <span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="paren-4753"><a href="#paren-4753"><span class="linenos">4753</span></a><span class="k">def</span> <span class="nf">paren</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">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Paren</span><span class="p">:</span>
+</span><span id="paren-4754"><a href="#paren-4754"><span class="linenos">4754</span></a> <span class="k">return</span> <span class="n">Paren</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">_maybe_copy</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">copy</span><span class="p">))</span>
</span></pre></div>
@@ -44930,30 +47268,30 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#to_identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="to_identifier-4614"><a href="#to_identifier-4614"><span class="linenos">4614</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="to_identifier-4615"><a href="#to_identifier-4615"><span class="linenos">4615</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
-</span><span id="to_identifier-4616"><a href="#to_identifier-4616"><span class="linenos">4616</span></a>
-</span><span id="to_identifier-4617"><a href="#to_identifier-4617"><span class="linenos">4617</span></a><span class="sd"> Args:</span>
-</span><span id="to_identifier-4618"><a href="#to_identifier-4618"><span class="linenos">4618</span></a><span class="sd"> name: The name to turn into an identifier.</span>
-</span><span id="to_identifier-4619"><a href="#to_identifier-4619"><span class="linenos">4619</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
-</span><span id="to_identifier-4620"><a href="#to_identifier-4620"><span class="linenos">4620</span></a>
-</span><span id="to_identifier-4621"><a href="#to_identifier-4621"><span class="linenos">4621</span></a><span class="sd"> Returns:</span>
-</span><span id="to_identifier-4622"><a href="#to_identifier-4622"><span class="linenos">4622</span></a><span class="sd"> The identifier ast node.</span>
-</span><span id="to_identifier-4623"><a href="#to_identifier-4623"><span class="linenos">4623</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="to_identifier-4624"><a href="#to_identifier-4624"><span class="linenos">4624</span></a>
-</span><span id="to_identifier-4625"><a href="#to_identifier-4625"><span class="linenos">4625</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="to_identifier-4626"><a href="#to_identifier-4626"><span class="linenos">4626</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="to_identifier-4627"><a href="#to_identifier-4627"><span class="linenos">4627</span></a>
-</span><span id="to_identifier-4628"><a href="#to_identifier-4628"><span class="linenos">4628</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
-</span><span id="to_identifier-4629"><a href="#to_identifier-4629"><span class="linenos">4629</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">name</span>
-</span><span id="to_identifier-4630"><a href="#to_identifier-4630"><span class="linenos">4630</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="to_identifier-4631"><a href="#to_identifier-4631"><span class="linenos">4631</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">Identifier</span><span class="p">(</span>
-</span><span id="to_identifier-4632"><a href="#to_identifier-4632"><span class="linenos">4632</span></a> <span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
-</span><span id="to_identifier-4633"><a href="#to_identifier-4633"><span class="linenos">4633</span></a> <span class="n">quoted</span><span class="o">=</span><span class="ow">not</span> <span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">quoted</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">quoted</span><span class="p">,</span>
-</span><span id="to_identifier-4634"><a href="#to_identifier-4634"><span class="linenos">4634</span></a> <span class="p">)</span>
-</span><span id="to_identifier-4635"><a href="#to_identifier-4635"><span class="linenos">4635</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="to_identifier-4636"><a href="#to_identifier-4636"><span class="linenos">4636</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;Name needs to be a string or an Identifier, got: </span><span class="si">{</span><span class="n">name</span><span class="o">.</span><span class="vm">__class__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="to_identifier-4637"><a href="#to_identifier-4637"><span class="linenos">4637</span></a> <span class="k">return</span> <span class="n">identifier</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="to_identifier-4770"><a href="#to_identifier-4770"><span class="linenos">4770</span></a><span class="k">def</span> <span class="nf">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="to_identifier-4771"><a href="#to_identifier-4771"><span class="linenos">4771</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an identifier.</span>
+</span><span id="to_identifier-4772"><a href="#to_identifier-4772"><span class="linenos">4772</span></a>
+</span><span id="to_identifier-4773"><a href="#to_identifier-4773"><span class="linenos">4773</span></a><span class="sd"> Args:</span>
+</span><span id="to_identifier-4774"><a href="#to_identifier-4774"><span class="linenos">4774</span></a><span class="sd"> name: The name to turn into an identifier.</span>
+</span><span id="to_identifier-4775"><a href="#to_identifier-4775"><span class="linenos">4775</span></a><span class="sd"> quoted: Whether or not force quote the identifier.</span>
+</span><span id="to_identifier-4776"><a href="#to_identifier-4776"><span class="linenos">4776</span></a>
+</span><span id="to_identifier-4777"><a href="#to_identifier-4777"><span class="linenos">4777</span></a><span class="sd"> Returns:</span>
+</span><span id="to_identifier-4778"><a href="#to_identifier-4778"><span class="linenos">4778</span></a><span class="sd"> The identifier ast node.</span>
+</span><span id="to_identifier-4779"><a href="#to_identifier-4779"><span class="linenos">4779</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="to_identifier-4780"><a href="#to_identifier-4780"><span class="linenos">4780</span></a>
+</span><span id="to_identifier-4781"><a href="#to_identifier-4781"><span class="linenos">4781</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="to_identifier-4782"><a href="#to_identifier-4782"><span class="linenos">4782</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="to_identifier-4783"><a href="#to_identifier-4783"><span class="linenos">4783</span></a>
+</span><span id="to_identifier-4784"><a href="#to_identifier-4784"><span class="linenos">4784</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Identifier</span><span class="p">):</span>
+</span><span id="to_identifier-4785"><a href="#to_identifier-4785"><span class="linenos">4785</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">name</span>
+</span><span id="to_identifier-4786"><a href="#to_identifier-4786"><span class="linenos">4786</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="to_identifier-4787"><a href="#to_identifier-4787"><span class="linenos">4787</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">Identifier</span><span class="p">(</span>
+</span><span id="to_identifier-4788"><a href="#to_identifier-4788"><span class="linenos">4788</span></a> <span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
+</span><span id="to_identifier-4789"><a href="#to_identifier-4789"><span class="linenos">4789</span></a> <span class="n">quoted</span><span class="o">=</span><span class="ow">not</span> <span class="n">SAFE_IDENTIFIER_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">quoted</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">quoted</span><span class="p">,</span>
+</span><span id="to_identifier-4790"><a href="#to_identifier-4790"><span class="linenos">4790</span></a> <span class="p">)</span>
+</span><span id="to_identifier-4791"><a href="#to_identifier-4791"><span class="linenos">4791</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="to_identifier-4792"><a href="#to_identifier-4792"><span class="linenos">4792</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;Name needs to be a string or an Identifier, got: </span><span class="si">{</span><span class="n">name</span><span class="o">.</span><span class="vm">__class__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="to_identifier-4793"><a href="#to_identifier-4793"><span class="linenos">4793</span></a> <span class="k">return</span> <span class="n">identifier</span>
</span></pre></div>
@@ -44986,23 +47324,23 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#to_interval"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="to_interval-4643"><a href="#to_interval-4643"><span class="linenos">4643</span></a><span class="k">def</span> <span class="nf">to_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Interval</span><span class="p">:</span>
-</span><span id="to_interval-4644"><a href="#to_interval-4644"><span class="linenos">4644</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an interval expression from a string like &#39;1 day&#39; or &#39;5 months&#39;.&quot;&quot;&quot;</span>
-</span><span id="to_interval-4645"><a href="#to_interval-4645"><span class="linenos">4645</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</span><span class="p">,</span> <span class="n">Literal</span><span class="p">):</span>
-</span><span id="to_interval-4646"><a href="#to_interval-4646"><span class="linenos">4646</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="to_interval-4647"><a href="#to_interval-4647"><span class="linenos">4647</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</span><span class="p">)</span>
-</span><span id="to_interval-4648"><a href="#to_interval-4648"><span class="linenos">4648</span></a>
-</span><span id="to_interval-4649"><a href="#to_interval-4649"><span class="linenos">4649</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
-</span><span id="to_interval-4650"><a href="#to_interval-4650"><span class="linenos">4650</span></a>
-</span><span id="to_interval-4651"><a href="#to_interval-4651"><span class="linenos">4651</span></a> <span class="n">interval_parts</span> <span class="o">=</span> <span class="n">INTERVAL_STRING_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="to_interval-4652"><a href="#to_interval-4652"><span class="linenos">4652</span></a>
-</span><span id="to_interval-4653"><a href="#to_interval-4653"><span class="linenos">4653</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval_parts</span><span class="p">:</span>
-</span><span id="to_interval-4654"><a href="#to_interval-4654"><span class="linenos">4654</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</span><span class="p">)</span>
-</span><span id="to_interval-4655"><a href="#to_interval-4655"><span class="linenos">4655</span></a>
-</span><span id="to_interval-4656"><a href="#to_interval-4656"><span class="linenos">4656</span></a> <span class="k">return</span> <span class="n">Interval</span><span class="p">(</span>
-</span><span id="to_interval-4657"><a href="#to_interval-4657"><span class="linenos">4657</span></a> <span class="n">this</span><span class="o">=</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span>
-</span><span id="to_interval-4658"><a href="#to_interval-4658"><span class="linenos">4658</span></a> <span class="n">unit</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">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
-</span><span id="to_interval-4659"><a href="#to_interval-4659"><span class="linenos">4659</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="to_interval-4799"><a href="#to_interval-4799"><span class="linenos">4799</span></a><span class="k">def</span> <span class="nf">to_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Literal</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Interval</span><span class="p">:</span>
+</span><span id="to_interval-4800"><a href="#to_interval-4800"><span class="linenos">4800</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Builds an interval expression from a string like &#39;1 day&#39; or &#39;5 months&#39;.&quot;&quot;&quot;</span>
+</span><span id="to_interval-4801"><a href="#to_interval-4801"><span class="linenos">4801</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">interval</span><span class="p">,</span> <span class="n">Literal</span><span class="p">):</span>
+</span><span id="to_interval-4802"><a href="#to_interval-4802"><span class="linenos">4802</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="to_interval-4803"><a href="#to_interval-4803"><span class="linenos">4803</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</span><span class="p">)</span>
+</span><span id="to_interval-4804"><a href="#to_interval-4804"><span class="linenos">4804</span></a>
+</span><span id="to_interval-4805"><a href="#to_interval-4805"><span class="linenos">4805</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">this</span>
+</span><span id="to_interval-4806"><a href="#to_interval-4806"><span class="linenos">4806</span></a>
+</span><span id="to_interval-4807"><a href="#to_interval-4807"><span class="linenos">4807</span></a> <span class="n">interval_parts</span> <span class="o">=</span> <span class="n">INTERVAL_STRING_RE</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="to_interval-4808"><a href="#to_interval-4808"><span class="linenos">4808</span></a>
+</span><span id="to_interval-4809"><a href="#to_interval-4809"><span class="linenos">4809</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">interval_parts</span><span class="p">:</span>
+</span><span id="to_interval-4810"><a href="#to_interval-4810"><span class="linenos">4810</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Invalid interval string.&quot;</span><span class="p">)</span>
+</span><span id="to_interval-4811"><a href="#to_interval-4811"><span class="linenos">4811</span></a>
+</span><span id="to_interval-4812"><a href="#to_interval-4812"><span class="linenos">4812</span></a> <span class="k">return</span> <span class="n">Interval</span><span class="p">(</span>
+</span><span id="to_interval-4813"><a href="#to_interval-4813"><span class="linenos">4813</span></a> <span class="n">this</span><span class="o">=</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span>
+</span><span id="to_interval-4814"><a href="#to_interval-4814"><span class="linenos">4814</span></a> <span class="n">unit</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">interval_parts</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">)),</span>
+</span><span id="to_interval-4815"><a href="#to_interval-4815"><span class="linenos">4815</span></a> <span class="p">)</span>
</span></pre></div>
@@ -45022,24 +47360,24 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#to_table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="to_table-4672"><a href="#to_table-4672"><span class="linenos">4672</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_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="nb">str</span> <span class="o">|</span> <span class="n">Table</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Table</span><span class="p">]:</span>
-</span><span id="to_table-4673"><a href="#to_table-4673"><span class="linenos">4673</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="to_table-4674"><a href="#to_table-4674"><span class="linenos">4674</span></a><span class="sd"> Create a table expression from a `[catalog].[schema].[table]` sql path. Catalog and schema are optional.</span>
-</span><span id="to_table-4675"><a href="#to_table-4675"><span class="linenos">4675</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
-</span><span id="to_table-4676"><a href="#to_table-4676"><span class="linenos">4676</span></a>
-</span><span id="to_table-4677"><a href="#to_table-4677"><span class="linenos">4677</span></a><span class="sd"> Args:</span>
-</span><span id="to_table-4678"><a href="#to_table-4678"><span class="linenos">4678</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</span>
-</span><span id="to_table-4679"><a href="#to_table-4679"><span class="linenos">4679</span></a>
-</span><span id="to_table-4680"><a href="#to_table-4680"><span class="linenos">4680</span></a><span class="sd"> Returns:</span>
-</span><span id="to_table-4681"><a href="#to_table-4681"><span class="linenos">4681</span></a><span class="sd"> A table expression.</span>
-</span><span id="to_table-4682"><a href="#to_table-4682"><span class="linenos">4682</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="to_table-4683"><a href="#to_table-4683"><span class="linenos">4683</span></a> <span class="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
-</span><span id="to_table-4684"><a href="#to_table-4684"><span class="linenos">4684</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="to_table-4685"><a href="#to_table-4685"><span class="linenos">4685</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="to_table-4686"><a href="#to_table-4686"><span class="linenos">4686</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 type provided for a table: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="to_table-4687"><a href="#to_table-4687"><span class="linenos">4687</span></a>
-</span><span id="to_table-4688"><a href="#to_table-4688"><span class="linenos">4688</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">table_name</span> <span class="o">=</span> <span class="p">(</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">split_num_words</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
-</span><span id="to_table-4689"><a href="#to_table-4689"><span class="linenos">4689</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">table_name</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="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="to_table-4828"><a href="#to_table-4828"><span class="linenos">4828</span></a><span class="k">def</span> <span class="nf">to_table</span><span class="p">(</span><span class="n">sql_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="nb">str</span> <span class="o">|</span> <span class="n">Table</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">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Table</span><span class="p">]:</span>
+</span><span id="to_table-4829"><a href="#to_table-4829"><span class="linenos">4829</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="to_table-4830"><a href="#to_table-4830"><span class="linenos">4830</span></a><span class="sd"> Create a table expression from a `[catalog].[schema].[table]` sql path. Catalog and schema are optional.</span>
+</span><span id="to_table-4831"><a href="#to_table-4831"><span class="linenos">4831</span></a><span class="sd"> If a table is passed in then that table is returned.</span>
+</span><span id="to_table-4832"><a href="#to_table-4832"><span class="linenos">4832</span></a>
+</span><span id="to_table-4833"><a href="#to_table-4833"><span class="linenos">4833</span></a><span class="sd"> Args:</span>
+</span><span id="to_table-4834"><a href="#to_table-4834"><span class="linenos">4834</span></a><span class="sd"> sql_path: a `[catalog].[schema].[table]` string.</span>
+</span><span id="to_table-4835"><a href="#to_table-4835"><span class="linenos">4835</span></a>
+</span><span id="to_table-4836"><a href="#to_table-4836"><span class="linenos">4836</span></a><span class="sd"> Returns:</span>
+</span><span id="to_table-4837"><a href="#to_table-4837"><span class="linenos">4837</span></a><span class="sd"> A table expression.</span>
+</span><span id="to_table-4838"><a href="#to_table-4838"><span class="linenos">4838</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="to_table-4839"><a href="#to_table-4839"><span class="linenos">4839</span></a> <span class="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
+</span><span id="to_table-4840"><a href="#to_table-4840"><span class="linenos">4840</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="to_table-4841"><a href="#to_table-4841"><span class="linenos">4841</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="to_table-4842"><a href="#to_table-4842"><span class="linenos">4842</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 type provided for a table: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="to_table-4843"><a href="#to_table-4843"><span class="linenos">4843</span></a>
+</span><span id="to_table-4844"><a href="#to_table-4844"><span class="linenos">4844</span></a> <span class="n">catalog</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">table_name</span> <span class="o">=</span> <span class="p">(</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">split_num_words</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
+</span><span id="to_table-4845"><a href="#to_table-4845"><span class="linenos">4845</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">table_name</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="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span></pre></div>
@@ -45072,22 +47410,22 @@ If a table is passed in then that table is returned.</p>
</div>
<a class="headerlink" href="#to_column"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="to_column-4692"><a href="#to_column-4692"><span class="linenos">4692</span></a><span class="k">def</span> <span class="nf">to_column</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Column</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">Column</span><span class="p">:</span>
-</span><span id="to_column-4693"><a href="#to_column-4693"><span class="linenos">4693</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="to_column-4694"><a href="#to_column-4694"><span class="linenos">4694</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
-</span><span id="to_column-4695"><a href="#to_column-4695"><span class="linenos">4695</span></a>
-</span><span id="to_column-4696"><a href="#to_column-4696"><span class="linenos">4696</span></a><span class="sd"> If a column is passed in then that column is returned.</span>
-</span><span id="to_column-4697"><a href="#to_column-4697"><span class="linenos">4697</span></a>
-</span><span id="to_column-4698"><a href="#to_column-4698"><span class="linenos">4698</span></a><span class="sd"> Args:</span>
-</span><span id="to_column-4699"><a href="#to_column-4699"><span class="linenos">4699</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
-</span><span id="to_column-4700"><a href="#to_column-4700"><span class="linenos">4700</span></a><span class="sd"> Returns:</span>
-</span><span id="to_column-4701"><a href="#to_column-4701"><span class="linenos">4701</span></a><span class="sd"> Table: A column expression</span>
-</span><span id="to_column-4702"><a href="#to_column-4702"><span class="linenos">4702</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="to_column-4703"><a href="#to_column-4703"><span class="linenos">4703</span></a> <span class="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Column</span><span class="p">):</span>
-</span><span id="to_column-4704"><a href="#to_column-4704"><span class="linenos">4704</span></a> <span class="k">return</span> <span class="n">sql_path</span>
-</span><span id="to_column-4705"><a href="#to_column-4705"><span class="linenos">4705</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="to_column-4706"><a href="#to_column-4706"><span class="linenos">4706</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 type provided for column: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="to_column-4707"><a href="#to_column-4707"><span class="linenos">4707</span></a> <span class="k">return</span> <span class="n">column</span><span class="p">(</span><span class="o">*</span><span class="nb">reversed</span><span class="p">(</span><span class="n">sql_path</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="to_column-4848"><a href="#to_column-4848"><span class="linenos">4848</span></a><span class="k">def</span> <span class="nf">to_column</span><span class="p">(</span><span class="n">sql_path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Column</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">Column</span><span class="p">:</span>
+</span><span id="to_column-4849"><a href="#to_column-4849"><span class="linenos">4849</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="to_column-4850"><a href="#to_column-4850"><span class="linenos">4850</span></a><span class="sd"> Create a column from a `[table].[column]` sql path. Schema is optional.</span>
+</span><span id="to_column-4851"><a href="#to_column-4851"><span class="linenos">4851</span></a>
+</span><span id="to_column-4852"><a href="#to_column-4852"><span class="linenos">4852</span></a><span class="sd"> If a column is passed in then that column is returned.</span>
+</span><span id="to_column-4853"><a href="#to_column-4853"><span class="linenos">4853</span></a>
+</span><span id="to_column-4854"><a href="#to_column-4854"><span class="linenos">4854</span></a><span class="sd"> Args:</span>
+</span><span id="to_column-4855"><a href="#to_column-4855"><span class="linenos">4855</span></a><span class="sd"> sql_path: `[table].[column]` string</span>
+</span><span id="to_column-4856"><a href="#to_column-4856"><span class="linenos">4856</span></a><span class="sd"> Returns:</span>
+</span><span id="to_column-4857"><a href="#to_column-4857"><span class="linenos">4857</span></a><span class="sd"> Table: A column expression</span>
+</span><span id="to_column-4858"><a href="#to_column-4858"><span class="linenos">4858</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="to_column-4859"><a href="#to_column-4859"><span class="linenos">4859</span></a> <span class="k">if</span> <span class="n">sql_path</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="n">Column</span><span class="p">):</span>
+</span><span id="to_column-4860"><a href="#to_column-4860"><span class="linenos">4860</span></a> <span class="k">return</span> <span class="n">sql_path</span>
+</span><span id="to_column-4861"><a href="#to_column-4861"><span class="linenos">4861</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sql_path</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="to_column-4862"><a href="#to_column-4862"><span class="linenos">4862</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 type provided for column: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">sql_path</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="to_column-4863"><a href="#to_column-4863"><span class="linenos">4863</span></a> <span class="k">return</span> <span class="n">column</span><span class="p">(</span><span class="o">*</span><span class="nb">reversed</span><span class="p">(</span><span class="n">sql_path</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span></pre></div>
@@ -45121,62 +47459,62 @@ If a table is passed in then that table is returned.</p>
</div>
<a class="headerlink" href="#alias_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="alias_-4710"><a href="#alias_-4710"><span class="linenos">4710</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
-</span><span id="alias_-4711"><a href="#alias_-4711"><span class="linenos">4711</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
-</span><span id="alias_-4712"><a href="#alias_-4712"><span class="linenos">4712</span></a> <span class="n">alias</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
-</span><span id="alias_-4713"><a href="#alias_-4713"><span class="linenos">4713</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</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="o">|</span> <span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="alias_-4714"><a href="#alias_-4714"><span class="linenos">4714</span></a> <span class="n">quoted</span><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="alias_-4715"><a href="#alias_-4715"><span class="linenos">4715</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="alias_-4716"><a href="#alias_-4716"><span class="linenos">4716</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
-</span><span id="alias_-4717"><a href="#alias_-4717"><span class="linenos">4717</span></a><span class="p">):</span>
-</span><span id="alias_-4718"><a href="#alias_-4718"><span class="linenos">4718</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
-</span><span id="alias_-4719"><a href="#alias_-4719"><span class="linenos">4719</span></a>
-</span><span id="alias_-4720"><a href="#alias_-4720"><span class="linenos">4720</span></a><span class="sd"> Example:</span>
-</span><span id="alias_-4721"><a href="#alias_-4721"><span class="linenos">4721</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
-</span><span id="alias_-4722"><a href="#alias_-4722"><span class="linenos">4722</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
-</span><span id="alias_-4723"><a href="#alias_-4723"><span class="linenos">4723</span></a>
-</span><span id="alias_-4724"><a href="#alias_-4724"><span class="linenos">4724</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;(select 1, 2)&#39;, &#39;bar&#39;, table=[&#39;a&#39;, &#39;b&#39;]).sql()</span>
-</span><span id="alias_-4725"><a href="#alias_-4725"><span class="linenos">4725</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
-</span><span id="alias_-4726"><a href="#alias_-4726"><span class="linenos">4726</span></a>
-</span><span id="alias_-4727"><a href="#alias_-4727"><span class="linenos">4727</span></a><span class="sd"> Args:</span>
-</span><span id="alias_-4728"><a href="#alias_-4728"><span class="linenos">4728</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
-</span><span id="alias_-4729"><a href="#alias_-4729"><span class="linenos">4729</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="alias_-4730"><a href="#alias_-4730"><span class="linenos">4730</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
-</span><span id="alias_-4731"><a href="#alias_-4731"><span class="linenos">4731</span></a><span class="sd"> special characters it is quoted.</span>
-</span><span id="alias_-4732"><a href="#alias_-4732"><span class="linenos">4732</span></a><span class="sd"> table: Whether or not to create a table alias, can also be a list of columns.</span>
-</span><span id="alias_-4733"><a href="#alias_-4733"><span class="linenos">4733</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
-</span><span id="alias_-4734"><a href="#alias_-4734"><span class="linenos">4734</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
-</span><span id="alias_-4735"><a href="#alias_-4735"><span class="linenos">4735</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="alias_-4736"><a href="#alias_-4736"><span class="linenos">4736</span></a>
-</span><span id="alias_-4737"><a href="#alias_-4737"><span class="linenos">4737</span></a><span class="sd"> Returns:</span>
-</span><span id="alias_-4738"><a href="#alias_-4738"><span class="linenos">4738</span></a><span class="sd"> Alias: the aliased expression</span>
-</span><span id="alias_-4739"><a href="#alias_-4739"><span class="linenos">4739</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="alias_-4740"><a href="#alias_-4740"><span class="linenos">4740</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="alias_-4741"><a href="#alias_-4741"><span class="linenos">4741</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</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="alias_-4742"><a href="#alias_-4742"><span class="linenos">4742</span></a>
-</span><span id="alias_-4743"><a href="#alias_-4743"><span class="linenos">4743</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="alias_-4744"><a href="#alias_-4744"><span class="linenos">4744</span></a> <span class="n">table_alias</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">alias</span><span class="p">)</span>
-</span><span id="alias_-4745"><a href="#alias_-4745"><span class="linenos">4745</span></a>
-</span><span id="alias_-4746"><a href="#alias_-4746"><span class="linenos">4746</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span>
-</span><span id="alias_-4747"><a href="#alias_-4747"><span class="linenos">4747</span></a> <span class="n">exp</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">table_alias</span><span class="p">)</span>
-</span><span id="alias_-4748"><a href="#alias_-4748"><span class="linenos">4748</span></a>
-</span><span id="alias_-4749"><a href="#alias_-4749"><span class="linenos">4749</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
-</span><span id="alias_-4750"><a href="#alias_-4750"><span class="linenos">4750</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="alias_-4751"><a href="#alias_-4751"><span class="linenos">4751</span></a> <span class="n">table_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">to_identifier</span><span class="p">(</span><span class="n">column</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="alias_-4752"><a href="#alias_-4752"><span class="linenos">4752</span></a>
-</span><span id="alias_-4753"><a href="#alias_-4753"><span class="linenos">4753</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="alias_-4754"><a href="#alias_-4754"><span class="linenos">4754</span></a>
-</span><span id="alias_-4755"><a href="#alias_-4755"><span class="linenos">4755</span></a> <span class="c1"># We don&#39;t set the &quot;alias&quot; arg for Window expressions, because that would add an IDENTIFIER node in</span>
-</span><span id="alias_-4756"><a href="#alias_-4756"><span class="linenos">4756</span></a> <span class="c1"># the AST, representing a &quot;named_window&quot; [1] construct (eg. bigquery). What we want is an ALIAS node</span>
-</span><span id="alias_-4757"><a href="#alias_-4757"><span class="linenos">4757</span></a> <span class="c1"># for the complete Window expression.</span>
-</span><span id="alias_-4758"><a href="#alias_-4758"><span class="linenos">4758</span></a> <span class="c1">#</span>
-</span><span id="alias_-4759"><a href="#alias_-4759"><span class="linenos">4759</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</span>
-</span><span id="alias_-4760"><a href="#alias_-4760"><span class="linenos">4760</span></a>
-</span><span id="alias_-4761"><a href="#alias_-4761"><span class="linenos">4761</span></a> <span class="k">if</span> <span class="s2">&quot;alias&quot;</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">arg_types</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">exp</span><span class="p">,</span> <span class="n">Window</span><span class="p">):</span>
-</span><span id="alias_-4762"><a href="#alias_-4762"><span class="linenos">4762</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
-</span><span id="alias_-4763"><a href="#alias_-4763"><span class="linenos">4763</span></a> <span class="n">exp</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="alias_-4764"><a href="#alias_-4764"><span class="linenos">4764</span></a> <span class="k">return</span> <span class="n">exp</span>
-</span><span id="alias_-4765"><a href="#alias_-4765"><span class="linenos">4765</span></a> <span class="k">return</span> <span class="n">Alias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="alias_-4866"><a href="#alias_-4866"><span class="linenos">4866</span></a><span class="k">def</span> <span class="nf">alias_</span><span class="p">(</span>
+</span><span id="alias_-4867"><a href="#alias_-4867"><span class="linenos">4867</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span>
+</span><span id="alias_-4868"><a href="#alias_-4868"><span class="linenos">4868</span></a> <span class="n">alias</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
+</span><span id="alias_-4869"><a href="#alias_-4869"><span class="linenos">4869</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</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="o">|</span> <span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="alias_-4870"><a href="#alias_-4870"><span class="linenos">4870</span></a> <span class="n">quoted</span><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="alias_-4871"><a href="#alias_-4871"><span class="linenos">4871</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="alias_-4872"><a href="#alias_-4872"><span class="linenos">4872</span></a> <span class="o">**</span><span class="n">opts</span><span class="p">,</span>
+</span><span id="alias_-4873"><a href="#alias_-4873"><span class="linenos">4873</span></a><span class="p">):</span>
+</span><span id="alias_-4874"><a href="#alias_-4874"><span class="linenos">4874</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Create an Alias expression.</span>
+</span><span id="alias_-4875"><a href="#alias_-4875"><span class="linenos">4875</span></a>
+</span><span id="alias_-4876"><a href="#alias_-4876"><span class="linenos">4876</span></a><span class="sd"> Example:</span>
+</span><span id="alias_-4877"><a href="#alias_-4877"><span class="linenos">4877</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;foo&#39;, &#39;bar&#39;).sql()</span>
+</span><span id="alias_-4878"><a href="#alias_-4878"><span class="linenos">4878</span></a><span class="sd"> &#39;foo AS bar&#39;</span>
+</span><span id="alias_-4879"><a href="#alias_-4879"><span class="linenos">4879</span></a>
+</span><span id="alias_-4880"><a href="#alias_-4880"><span class="linenos">4880</span></a><span class="sd"> &gt;&gt;&gt; alias_(&#39;(select 1, 2)&#39;, &#39;bar&#39;, table=[&#39;a&#39;, &#39;b&#39;]).sql()</span>
+</span><span id="alias_-4881"><a href="#alias_-4881"><span class="linenos">4881</span></a><span class="sd"> &#39;(SELECT 1, 2) AS bar(a, b)&#39;</span>
+</span><span id="alias_-4882"><a href="#alias_-4882"><span class="linenos">4882</span></a>
+</span><span id="alias_-4883"><a href="#alias_-4883"><span class="linenos">4883</span></a><span class="sd"> Args:</span>
+</span><span id="alias_-4884"><a href="#alias_-4884"><span class="linenos">4884</span></a><span class="sd"> expression: the SQL code strings to parse.</span>
+</span><span id="alias_-4885"><a href="#alias_-4885"><span class="linenos">4885</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="alias_-4886"><a href="#alias_-4886"><span class="linenos">4886</span></a><span class="sd"> alias: the alias name to use. If the name has</span>
+</span><span id="alias_-4887"><a href="#alias_-4887"><span class="linenos">4887</span></a><span class="sd"> special characters it is quoted.</span>
+</span><span id="alias_-4888"><a href="#alias_-4888"><span class="linenos">4888</span></a><span class="sd"> table: Whether or not to create a table alias, can also be a list of columns.</span>
+</span><span id="alias_-4889"><a href="#alias_-4889"><span class="linenos">4889</span></a><span class="sd"> quoted: whether or not to quote the alias</span>
+</span><span id="alias_-4890"><a href="#alias_-4890"><span class="linenos">4890</span></a><span class="sd"> dialect: the dialect used to parse the input expression.</span>
+</span><span id="alias_-4891"><a href="#alias_-4891"><span class="linenos">4891</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="alias_-4892"><a href="#alias_-4892"><span class="linenos">4892</span></a>
+</span><span id="alias_-4893"><a href="#alias_-4893"><span class="linenos">4893</span></a><span class="sd"> Returns:</span>
+</span><span id="alias_-4894"><a href="#alias_-4894"><span class="linenos">4894</span></a><span class="sd"> Alias: the aliased expression</span>
+</span><span id="alias_-4895"><a href="#alias_-4895"><span class="linenos">4895</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="alias_-4896"><a href="#alias_-4896"><span class="linenos">4896</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="alias_-4897"><a href="#alias_-4897"><span class="linenos">4897</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</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="alias_-4898"><a href="#alias_-4898"><span class="linenos">4898</span></a>
+</span><span id="alias_-4899"><a href="#alias_-4899"><span class="linenos">4899</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="alias_-4900"><a href="#alias_-4900"><span class="linenos">4900</span></a> <span class="n">table_alias</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">alias</span><span class="p">)</span>
+</span><span id="alias_-4901"><a href="#alias_-4901"><span class="linenos">4901</span></a>
+</span><span id="alias_-4902"><a href="#alias_-4902"><span class="linenos">4902</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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">Expression</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span>
+</span><span id="alias_-4903"><a href="#alias_-4903"><span class="linenos">4903</span></a> <span class="n">exp</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">table_alias</span><span class="p">)</span>
+</span><span id="alias_-4904"><a href="#alias_-4904"><span class="linenos">4904</span></a>
+</span><span id="alias_-4905"><a href="#alias_-4905"><span class="linenos">4905</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span>
+</span><span id="alias_-4906"><a href="#alias_-4906"><span class="linenos">4906</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="alias_-4907"><a href="#alias_-4907"><span class="linenos">4907</span></a> <span class="n">table_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">to_identifier</span><span class="p">(</span><span class="n">column</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="alias_-4908"><a href="#alias_-4908"><span class="linenos">4908</span></a>
+</span><span id="alias_-4909"><a href="#alias_-4909"><span class="linenos">4909</span></a> <span class="k">return</span> <span class="n">exp</span>
+</span><span id="alias_-4910"><a href="#alias_-4910"><span class="linenos">4910</span></a>
+</span><span id="alias_-4911"><a href="#alias_-4911"><span class="linenos">4911</span></a> <span class="c1"># We don&#39;t set the &quot;alias&quot; arg for Window expressions, because that would add an IDENTIFIER node in</span>
+</span><span id="alias_-4912"><a href="#alias_-4912"><span class="linenos">4912</span></a> <span class="c1"># the AST, representing a &quot;named_window&quot; [1] construct (eg. bigquery). What we want is an ALIAS node</span>
+</span><span id="alias_-4913"><a href="#alias_-4913"><span class="linenos">4913</span></a> <span class="c1"># for the complete Window expression.</span>
+</span><span id="alias_-4914"><a href="#alias_-4914"><span class="linenos">4914</span></a> <span class="c1">#</span>
+</span><span id="alias_-4915"><a href="#alias_-4915"><span class="linenos">4915</span></a> <span class="c1"># [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls</span>
+</span><span id="alias_-4916"><a href="#alias_-4916"><span class="linenos">4916</span></a>
+</span><span id="alias_-4917"><a href="#alias_-4917"><span class="linenos">4917</span></a> <span class="k">if</span> <span class="s2">&quot;alias&quot;</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">arg_types</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">exp</span><span class="p">,</span> <span class="n">Window</span><span class="p">):</span>
+</span><span id="alias_-4918"><a href="#alias_-4918"><span class="linenos">4918</span></a> <span class="n">exp</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
+</span><span id="alias_-4919"><a href="#alias_-4919"><span class="linenos">4919</span></a> <span class="n">exp</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="alias_-4920"><a href="#alias_-4920"><span class="linenos">4920</span></a> <span class="k">return</span> <span class="n">exp</span>
+</span><span id="alias_-4921"><a href="#alias_-4921"><span class="linenos">4921</span></a> <span class="k">return</span> <span class="n">Alias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span></pre></div>
@@ -45231,27 +47569,27 @@ special characters it is quoted.</li>
</div>
<a class="headerlink" href="#subquery"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="subquery-4768"><a href="#subquery-4768"><span class="linenos">4768</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
-</span><span id="subquery-4769"><a href="#subquery-4769"><span class="linenos">4769</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="subquery-4770"><a href="#subquery-4770"><span class="linenos">4770</span></a><span class="sd"> Build a subquery expression.</span>
-</span><span id="subquery-4771"><a href="#subquery-4771"><span class="linenos">4771</span></a>
-</span><span id="subquery-4772"><a href="#subquery-4772"><span class="linenos">4772</span></a><span class="sd"> Example:</span>
-</span><span id="subquery-4773"><a href="#subquery-4773"><span class="linenos">4773</span></a><span class="sd"> &gt;&gt;&gt; subquery(&#39;select x from tbl&#39;, &#39;bar&#39;).select(&#39;x&#39;).sql()</span>
-</span><span id="subquery-4774"><a href="#subquery-4774"><span class="linenos">4774</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</span>
-</span><span id="subquery-4775"><a href="#subquery-4775"><span class="linenos">4775</span></a>
-</span><span id="subquery-4776"><a href="#subquery-4776"><span class="linenos">4776</span></a><span class="sd"> Args:</span>
-</span><span id="subquery-4777"><a href="#subquery-4777"><span class="linenos">4777</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
-</span><span id="subquery-4778"><a href="#subquery-4778"><span class="linenos">4778</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
-</span><span id="subquery-4779"><a href="#subquery-4779"><span class="linenos">4779</span></a><span class="sd"> alias (str | Expression): the alias name to use.</span>
-</span><span id="subquery-4780"><a href="#subquery-4780"><span class="linenos">4780</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
-</span><span id="subquery-4781"><a href="#subquery-4781"><span class="linenos">4781</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
-</span><span id="subquery-4782"><a href="#subquery-4782"><span class="linenos">4782</span></a>
-</span><span id="subquery-4783"><a href="#subquery-4783"><span class="linenos">4783</span></a><span class="sd"> Returns:</span>
-</span><span id="subquery-4784"><a href="#subquery-4784"><span class="linenos">4784</span></a><span class="sd"> Select: a new select with the subquery expression included</span>
-</span><span id="subquery-4785"><a href="#subquery-4785"><span class="linenos">4785</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="subquery-4786"><a href="#subquery-4786"><span class="linenos">4786</span></a>
-</span><span id="subquery-4787"><a href="#subquery-4787"><span class="linenos">4787</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</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">subquery</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="subquery-4788"><a href="#subquery-4788"><span class="linenos">4788</span></a> <span class="k">return</span> <span class="n">Select</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="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</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="subquery-4924"><a href="#subquery-4924"><span class="linenos">4924</span></a><span class="k">def</span> <span class="nf">subquery</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">):</span>
+</span><span id="subquery-4925"><a href="#subquery-4925"><span class="linenos">4925</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="subquery-4926"><a href="#subquery-4926"><span class="linenos">4926</span></a><span class="sd"> Build a subquery expression.</span>
+</span><span id="subquery-4927"><a href="#subquery-4927"><span class="linenos">4927</span></a>
+</span><span id="subquery-4928"><a href="#subquery-4928"><span class="linenos">4928</span></a><span class="sd"> Example:</span>
+</span><span id="subquery-4929"><a href="#subquery-4929"><span class="linenos">4929</span></a><span class="sd"> &gt;&gt;&gt; subquery(&#39;select x from tbl&#39;, &#39;bar&#39;).select(&#39;x&#39;).sql()</span>
+</span><span id="subquery-4930"><a href="#subquery-4930"><span class="linenos">4930</span></a><span class="sd"> &#39;SELECT x FROM (SELECT x FROM tbl) AS bar&#39;</span>
+</span><span id="subquery-4931"><a href="#subquery-4931"><span class="linenos">4931</span></a>
+</span><span id="subquery-4932"><a href="#subquery-4932"><span class="linenos">4932</span></a><span class="sd"> Args:</span>
+</span><span id="subquery-4933"><a href="#subquery-4933"><span class="linenos">4933</span></a><span class="sd"> expression (str | Expression): the SQL code strings to parse.</span>
+</span><span id="subquery-4934"><a href="#subquery-4934"><span class="linenos">4934</span></a><span class="sd"> If an Expression instance is passed, this is used as-is.</span>
+</span><span id="subquery-4935"><a href="#subquery-4935"><span class="linenos">4935</span></a><span class="sd"> alias (str | Expression): the alias name to use.</span>
+</span><span id="subquery-4936"><a href="#subquery-4936"><span class="linenos">4936</span></a><span class="sd"> dialect (str): the dialect used to parse the input expression.</span>
+</span><span id="subquery-4937"><a href="#subquery-4937"><span class="linenos">4937</span></a><span class="sd"> **opts: other options to use to parse the input expressions.</span>
+</span><span id="subquery-4938"><a href="#subquery-4938"><span class="linenos">4938</span></a>
+</span><span id="subquery-4939"><a href="#subquery-4939"><span class="linenos">4939</span></a><span class="sd"> Returns:</span>
+</span><span id="subquery-4940"><a href="#subquery-4940"><span class="linenos">4940</span></a><span class="sd"> Select: a new select with the subquery expression included</span>
+</span><span id="subquery-4941"><a href="#subquery-4941"><span class="linenos">4941</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="subquery-4942"><a href="#subquery-4942"><span class="linenos">4942</span></a>
+</span><span id="subquery-4943"><a href="#subquery-4943"><span class="linenos">4943</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</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="n">dialect</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">subquery</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="subquery-4944"><a href="#subquery-4944"><span class="linenos">4944</span></a> <span class="k">return</span> <span class="n">Select</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="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
</span></pre></div>
@@ -45297,31 +47635,31 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#column"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="column-4791"><a href="#column-4791"><span class="linenos">4791</span></a><span class="k">def</span> <span class="nf">column</span><span class="p">(</span>
-</span><span id="column-4792"><a href="#column-4792"><span class="linenos">4792</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
-</span><span id="column-4793"><a href="#column-4793"><span class="linenos">4793</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="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="column-4794"><a href="#column-4794"><span class="linenos">4794</span></a> <span class="n">db</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="column-4795"><a href="#column-4795"><span class="linenos">4795</span></a> <span class="n">catalog</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="column-4796"><a href="#column-4796"><span class="linenos">4796</span></a> <span class="n">quoted</span><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="column-4797"><a href="#column-4797"><span class="linenos">4797</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
-</span><span id="column-4798"><a href="#column-4798"><span class="linenos">4798</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="column-4799"><a href="#column-4799"><span class="linenos">4799</span></a><span class="sd"> Build a Column.</span>
-</span><span id="column-4800"><a href="#column-4800"><span class="linenos">4800</span></a>
-</span><span id="column-4801"><a href="#column-4801"><span class="linenos">4801</span></a><span class="sd"> Args:</span>
-</span><span id="column-4802"><a href="#column-4802"><span class="linenos">4802</span></a><span class="sd"> col: column name</span>
-</span><span id="column-4803"><a href="#column-4803"><span class="linenos">4803</span></a><span class="sd"> table: table name</span>
-</span><span id="column-4804"><a href="#column-4804"><span class="linenos">4804</span></a><span class="sd"> db: db name</span>
-</span><span id="column-4805"><a href="#column-4805"><span class="linenos">4805</span></a><span class="sd"> catalog: catalog name</span>
-</span><span id="column-4806"><a href="#column-4806"><span class="linenos">4806</span></a><span class="sd"> quoted: whether or not to force quote each part</span>
-</span><span id="column-4807"><a href="#column-4807"><span class="linenos">4807</span></a><span class="sd"> Returns:</span>
-</span><span id="column-4808"><a href="#column-4808"><span class="linenos">4808</span></a><span class="sd"> Column: column instance</span>
-</span><span id="column-4809"><a href="#column-4809"><span class="linenos">4809</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="column-4810"><a href="#column-4810"><span class="linenos">4810</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
-</span><span id="column-4811"><a href="#column-4811"><span class="linenos">4811</span></a> <span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">col</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="column-4812"><a href="#column-4812"><span class="linenos">4812</span></a> <span class="n">table</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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="column-4813"><a href="#column-4813"><span class="linenos">4813</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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="column-4814"><a href="#column-4814"><span class="linenos">4814</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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="column-4815"><a href="#column-4815"><span class="linenos">4815</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="column-4947"><a href="#column-4947"><span class="linenos">4947</span></a><span class="k">def</span> <span class="nf">column</span><span class="p">(</span>
+</span><span id="column-4948"><a href="#column-4948"><span class="linenos">4948</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">,</span>
+</span><span id="column-4949"><a href="#column-4949"><span class="linenos">4949</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="nb">str</span> <span class="o">|</span> <span class="n">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="column-4950"><a href="#column-4950"><span class="linenos">4950</span></a> <span class="n">db</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="column-4951"><a href="#column-4951"><span class="linenos">4951</span></a> <span class="n">catalog</span><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">Identifier</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="column-4952"><a href="#column-4952"><span class="linenos">4952</span></a> <span class="n">quoted</span><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="column-4953"><a href="#column-4953"><span class="linenos">4953</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Column</span><span class="p">:</span>
+</span><span id="column-4954"><a href="#column-4954"><span class="linenos">4954</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="column-4955"><a href="#column-4955"><span class="linenos">4955</span></a><span class="sd"> Build a Column.</span>
+</span><span id="column-4956"><a href="#column-4956"><span class="linenos">4956</span></a>
+</span><span id="column-4957"><a href="#column-4957"><span class="linenos">4957</span></a><span class="sd"> Args:</span>
+</span><span id="column-4958"><a href="#column-4958"><span class="linenos">4958</span></a><span class="sd"> col: column name</span>
+</span><span id="column-4959"><a href="#column-4959"><span class="linenos">4959</span></a><span class="sd"> table: table name</span>
+</span><span id="column-4960"><a href="#column-4960"><span class="linenos">4960</span></a><span class="sd"> db: db name</span>
+</span><span id="column-4961"><a href="#column-4961"><span class="linenos">4961</span></a><span class="sd"> catalog: catalog name</span>
+</span><span id="column-4962"><a href="#column-4962"><span class="linenos">4962</span></a><span class="sd"> quoted: whether or not to force quote each part</span>
+</span><span id="column-4963"><a href="#column-4963"><span class="linenos">4963</span></a><span class="sd"> Returns:</span>
+</span><span id="column-4964"><a href="#column-4964"><span class="linenos">4964</span></a><span class="sd"> Column: column instance</span>
+</span><span id="column-4965"><a href="#column-4965"><span class="linenos">4965</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="column-4966"><a href="#column-4966"><span class="linenos">4966</span></a> <span class="k">return</span> <span class="n">Column</span><span class="p">(</span>
+</span><span id="column-4967"><a href="#column-4967"><span class="linenos">4967</span></a> <span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">col</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="column-4968"><a href="#column-4968"><span class="linenos">4968</span></a> <span class="n">table</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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="column-4969"><a href="#column-4969"><span class="linenos">4969</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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="column-4970"><a href="#column-4970"><span class="linenos">4970</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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="column-4971"><a href="#column-4971"><span class="linenos">4971</span></a> <span class="p">)</span>
</span></pre></div>
@@ -45357,22 +47695,22 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#cast"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="cast-4818"><a href="#cast-4818"><span class="linenos">4818</span></a><span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Cast</span><span class="p">:</span>
-</span><span id="cast-4819"><a href="#cast-4819"><span class="linenos">4819</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</span>
-</span><span id="cast-4820"><a href="#cast-4820"><span class="linenos">4820</span></a>
-</span><span id="cast-4821"><a href="#cast-4821"><span class="linenos">4821</span></a><span class="sd"> Example:</span>
-</span><span id="cast-4822"><a href="#cast-4822"><span class="linenos">4822</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
-</span><span id="cast-4823"><a href="#cast-4823"><span class="linenos">4823</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
-</span><span id="cast-4824"><a href="#cast-4824"><span class="linenos">4824</span></a>
-</span><span id="cast-4825"><a href="#cast-4825"><span class="linenos">4825</span></a><span class="sd"> Args:</span>
-</span><span id="cast-4826"><a href="#cast-4826"><span class="linenos">4826</span></a><span class="sd"> expression: The expression to cast.</span>
-</span><span id="cast-4827"><a href="#cast-4827"><span class="linenos">4827</span></a><span class="sd"> to: The datatype to cast to.</span>
-</span><span id="cast-4828"><a href="#cast-4828"><span class="linenos">4828</span></a>
-</span><span id="cast-4829"><a href="#cast-4829"><span class="linenos">4829</span></a><span class="sd"> Returns:</span>
-</span><span id="cast-4830"><a href="#cast-4830"><span class="linenos">4830</span></a><span class="sd"> A cast node.</span>
-</span><span id="cast-4831"><a href="#cast-4831"><span class="linenos">4831</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="cast-4832"><a href="#cast-4832"><span class="linenos">4832</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
-</span><span id="cast-4833"><a href="#cast-4833"><span class="linenos">4833</span></a> <span class="k">return</span> <span class="n">Cast</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">to</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="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="cast-4974"><a href="#cast-4974"><span class="linenos">4974</span></a><span class="k">def</span> <span class="nf">cast</span><span class="p">(</span><span class="n">expression</span><span class="p">:</span> <span class="n">ExpOrStr</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">DataType</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="n">opts</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Cast</span><span class="p">:</span>
+</span><span id="cast-4975"><a href="#cast-4975"><span class="linenos">4975</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast an expression to a data type.</span>
+</span><span id="cast-4976"><a href="#cast-4976"><span class="linenos">4976</span></a>
+</span><span id="cast-4977"><a href="#cast-4977"><span class="linenos">4977</span></a><span class="sd"> Example:</span>
+</span><span id="cast-4978"><a href="#cast-4978"><span class="linenos">4978</span></a><span class="sd"> &gt;&gt;&gt; cast(&#39;x + 1&#39;, &#39;int&#39;).sql()</span>
+</span><span id="cast-4979"><a href="#cast-4979"><span class="linenos">4979</span></a><span class="sd"> &#39;CAST(x + 1 AS INT)&#39;</span>
+</span><span id="cast-4980"><a href="#cast-4980"><span class="linenos">4980</span></a>
+</span><span id="cast-4981"><a href="#cast-4981"><span class="linenos">4981</span></a><span class="sd"> Args:</span>
+</span><span id="cast-4982"><a href="#cast-4982"><span class="linenos">4982</span></a><span class="sd"> expression: The expression to cast.</span>
+</span><span id="cast-4983"><a href="#cast-4983"><span class="linenos">4983</span></a><span class="sd"> to: The datatype to cast to.</span>
+</span><span id="cast-4984"><a href="#cast-4984"><span class="linenos">4984</span></a>
+</span><span id="cast-4985"><a href="#cast-4985"><span class="linenos">4985</span></a><span class="sd"> Returns:</span>
+</span><span id="cast-4986"><a href="#cast-4986"><span class="linenos">4986</span></a><span class="sd"> A cast node.</span>
+</span><span id="cast-4987"><a href="#cast-4987"><span class="linenos">4987</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="cast-4988"><a href="#cast-4988"><span class="linenos">4988</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">maybe_parse</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">)</span>
+</span><span id="cast-4989"><a href="#cast-4989"><span class="linenos">4989</span></a> <span class="k">return</span> <span class="n">Cast</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">to</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="p">,</span> <span class="o">**</span><span class="n">opts</span><span class="p">))</span>
</span></pre></div>
@@ -45415,23 +47753,23 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#table_"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="table_-4836"><a href="#table_-4836"><span class="linenos">4836</span></a><span class="k">def</span> <span class="nf">table_</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
-</span><span id="table_-4837"><a href="#table_-4837"><span class="linenos">4837</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</span>
-</span><span id="table_-4838"><a href="#table_-4838"><span class="linenos">4838</span></a>
-</span><span id="table_-4839"><a href="#table_-4839"><span class="linenos">4839</span></a><span class="sd"> Args:</span>
-</span><span id="table_-4840"><a href="#table_-4840"><span class="linenos">4840</span></a><span class="sd"> table (str | Expression): column name</span>
-</span><span id="table_-4841"><a href="#table_-4841"><span class="linenos">4841</span></a><span class="sd"> db (str | Expression): db name</span>
-</span><span id="table_-4842"><a href="#table_-4842"><span class="linenos">4842</span></a><span class="sd"> catalog (str | Expression): catalog name</span>
-</span><span id="table_-4843"><a href="#table_-4843"><span class="linenos">4843</span></a>
-</span><span id="table_-4844"><a href="#table_-4844"><span class="linenos">4844</span></a><span class="sd"> Returns:</span>
-</span><span id="table_-4845"><a href="#table_-4845"><span class="linenos">4845</span></a><span class="sd"> Table: table instance</span>
-</span><span id="table_-4846"><a href="#table_-4846"><span class="linenos">4846</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="table_-4847"><a href="#table_-4847"><span class="linenos">4847</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
-</span><span id="table_-4848"><a href="#table_-4848"><span class="linenos">4848</span></a> <span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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="table_-4849"><a href="#table_-4849"><span class="linenos">4849</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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="table_-4850"><a href="#table_-4850"><span class="linenos">4850</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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="table_-4851"><a href="#table_-4851"><span class="linenos">4851</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="table_-4852"><a href="#table_-4852"><span class="linenos">4852</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="table_-4992"><a href="#table_-4992"><span class="linenos">4992</span></a><span class="k">def</span> <span class="nf">table_</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Table</span><span class="p">:</span>
+</span><span id="table_-4993"><a href="#table_-4993"><span class="linenos">4993</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a Table.</span>
+</span><span id="table_-4994"><a href="#table_-4994"><span class="linenos">4994</span></a>
+</span><span id="table_-4995"><a href="#table_-4995"><span class="linenos">4995</span></a><span class="sd"> Args:</span>
+</span><span id="table_-4996"><a href="#table_-4996"><span class="linenos">4996</span></a><span class="sd"> table (str | Expression): column name</span>
+</span><span id="table_-4997"><a href="#table_-4997"><span class="linenos">4997</span></a><span class="sd"> db (str | Expression): db name</span>
+</span><span id="table_-4998"><a href="#table_-4998"><span class="linenos">4998</span></a><span class="sd"> catalog (str | Expression): catalog name</span>
+</span><span id="table_-4999"><a href="#table_-4999"><span class="linenos">4999</span></a>
+</span><span id="table_-5000"><a href="#table_-5000"><span class="linenos">5000</span></a><span class="sd"> Returns:</span>
+</span><span id="table_-5001"><a href="#table_-5001"><span class="linenos">5001</span></a><span class="sd"> Table: table instance</span>
+</span><span id="table_-5002"><a href="#table_-5002"><span class="linenos">5002</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="table_-5003"><a href="#table_-5003"><span class="linenos">5003</span></a> <span class="k">return</span> <span class="n">Table</span><span class="p">(</span>
+</span><span id="table_-5004"><a href="#table_-5004"><span class="linenos">5004</span></a> <span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table</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="table_-5005"><a href="#table_-5005"><span class="linenos">5005</span></a> <span class="n">db</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">db</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="table_-5006"><a href="#table_-5006"><span class="linenos">5006</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">catalog</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="table_-5007"><a href="#table_-5007"><span class="linenos">5007</span></a> <span class="n">alias</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">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="table_-5008"><a href="#table_-5008"><span class="linenos">5008</span></a> <span class="p">)</span>
</span></pre></div>
@@ -45465,46 +47803,37 @@ If an Expression instance is passed, this is used as-is.</li>
</div>
<a class="headerlink" href="#values"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="values-4855"><a href="#values-4855"><span class="linenos">4855</span></a><span class="k">def</span> <span class="nf">values</span><span class="p">(</span>
-</span><span id="values-4856"><a href="#values-4856"><span class="linenos">4856</span></a> <span class="n">values</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="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">Any</span><span class="p">,</span> <span class="o">...</span><span class="p">]],</span>
-</span><span id="values-4857"><a href="#values-4857"><span class="linenos">4857</span></a> <span class="n">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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="values-4858"><a href="#values-4858"><span class="linenos">4858</span></a> <span class="n">columns</span><span 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">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</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">DataType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="values-4859"><a href="#values-4859"><span class="linenos">4859</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
-</span><span id="values-4860"><a href="#values-4860"><span class="linenos">4860</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
-</span><span id="values-4861"><a href="#values-4861"><span class="linenos">4861</span></a>
-</span><span id="values-4862"><a href="#values-4862"><span class="linenos">4862</span></a><span class="sd"> Example:</span>
-</span><span id="values-4863"><a href="#values-4863"><span class="linenos">4863</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
-</span><span id="values-4864"><a href="#values-4864"><span class="linenos">4864</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
-</span><span id="values-4865"><a href="#values-4865"><span class="linenos">4865</span></a>
-</span><span id="values-4866"><a href="#values-4866"><span class="linenos">4866</span></a><span class="sd"> Args:</span>
-</span><span id="values-4867"><a href="#values-4867"><span class="linenos">4867</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
-</span><span id="values-4868"><a href="#values-4868"><span class="linenos">4868</span></a><span class="sd"> alias: optional alias</span>
-</span><span id="values-4869"><a href="#values-4869"><span class="linenos">4869</span></a><span class="sd"> columns: Optional list of ordered column names or ordered dictionary of column names to types.</span>
-</span><span id="values-4870"><a href="#values-4870"><span class="linenos">4870</span></a><span class="sd"> If either are provided then an alias is also required.</span>
-</span><span id="values-4871"><a href="#values-4871"><span class="linenos">4871</span></a><span class="sd"> If a dictionary is provided then the first column of the values will be casted to the expected type</span>
-</span><span id="values-4872"><a href="#values-4872"><span class="linenos">4872</span></a><span class="sd"> in order to help with type inference.</span>
-</span><span id="values-4873"><a href="#values-4873"><span class="linenos">4873</span></a>
-</span><span id="values-4874"><a href="#values-4874"><span class="linenos">4874</span></a><span class="sd"> Returns:</span>
-</span><span id="values-4875"><a href="#values-4875"><span class="linenos">4875</span></a><span class="sd"> Values: the Values expression object</span>
-</span><span id="values-4876"><a href="#values-4876"><span class="linenos">4876</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="values-4877"><a href="#values-4877"><span class="linenos">4877</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="values-4878"><a href="#values-4878"><span class="linenos">4878</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Alias is required when providing columns&quot;</span><span class="p">)</span>
-</span><span id="values-4879"><a href="#values-4879"><span class="linenos">4879</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="values-4880"><a href="#values-4880"><span class="linenos">4880</span></a> <span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">])</span>
-</span><span id="values-4881"><a href="#values-4881"><span class="linenos">4881</span></a> <span class="k">if</span> <span class="n">columns</span>
-</span><span id="values-4882"><a href="#values-4882"><span class="linenos">4882</span></a> <span class="k">else</span> <span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="values-4883"><a href="#values-4883"><span class="linenos">4883</span></a> <span class="p">)</span>
-</span><span id="values-4884"><a href="#values-4884"><span class="linenos">4884</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
-</span><span id="values-4885"><a href="#values-4885"><span class="linenos">4885</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</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="values-4886"><a href="#values-4886"><span class="linenos">4886</span></a> <span class="n">types</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">columns</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
-</span><span id="values-4887"><a href="#values-4887"><span class="linenos">4887</span></a> <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">set</span><span class="p">(</span>
-</span><span id="values-4888"><a href="#values-4888"><span class="linenos">4888</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">,</span>
-</span><span id="values-4889"><a href="#values-4889"><span class="linenos">4889</span></a> <span class="p">[</span><span class="n">cast</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">types</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">x</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 class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">)],</span>
-</span><span id="values-4890"><a href="#values-4890"><span class="linenos">4890</span></a> <span class="p">)</span>
-</span><span id="values-4891"><a href="#values-4891"><span class="linenos">4891</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
-</span><span id="values-4892"><a href="#values-4892"><span class="linenos">4892</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="values-4893"><a href="#values-4893"><span class="linenos">4893</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
-</span><span id="values-4894"><a href="#values-4894"><span class="linenos">4894</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="values-5011"><a href="#values-5011"><span class="linenos">5011</span></a><span class="k">def</span> <span class="nf">values</span><span class="p">(</span>
+</span><span id="values-5012"><a href="#values-5012"><span class="linenos">5012</span></a> <span class="n">values</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="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">Any</span><span class="p">,</span> <span class="o">...</span><span class="p">]],</span>
+</span><span id="values-5013"><a href="#values-5013"><span class="linenos">5013</span></a> <span class="n">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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="values-5014"><a href="#values-5014"><span class="linenos">5014</span></a> <span class="n">columns</span><span 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">Iterable</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</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">DataType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="values-5015"><a href="#values-5015"><span class="linenos">5015</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Values</span><span class="p">:</span>
+</span><span id="values-5016"><a href="#values-5016"><span class="linenos">5016</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build VALUES statement.</span>
+</span><span id="values-5017"><a href="#values-5017"><span class="linenos">5017</span></a>
+</span><span id="values-5018"><a href="#values-5018"><span class="linenos">5018</span></a><span class="sd"> Example:</span>
+</span><span id="values-5019"><a href="#values-5019"><span class="linenos">5019</span></a><span class="sd"> &gt;&gt;&gt; values([(1, &#39;2&#39;)]).sql()</span>
+</span><span id="values-5020"><a href="#values-5020"><span class="linenos">5020</span></a><span class="sd"> &quot;VALUES (1, &#39;2&#39;)&quot;</span>
+</span><span id="values-5021"><a href="#values-5021"><span class="linenos">5021</span></a>
+</span><span id="values-5022"><a href="#values-5022"><span class="linenos">5022</span></a><span class="sd"> Args:</span>
+</span><span id="values-5023"><a href="#values-5023"><span class="linenos">5023</span></a><span class="sd"> values: values statements that will be converted to SQL</span>
+</span><span id="values-5024"><a href="#values-5024"><span class="linenos">5024</span></a><span class="sd"> alias: optional alias</span>
+</span><span id="values-5025"><a href="#values-5025"><span class="linenos">5025</span></a><span class="sd"> columns: Optional list of ordered column names or ordered dictionary of column names to types.</span>
+</span><span id="values-5026"><a href="#values-5026"><span class="linenos">5026</span></a><span class="sd"> If either are provided then an alias is also required.</span>
+</span><span id="values-5027"><a href="#values-5027"><span class="linenos">5027</span></a>
+</span><span id="values-5028"><a href="#values-5028"><span class="linenos">5028</span></a><span class="sd"> Returns:</span>
+</span><span id="values-5029"><a href="#values-5029"><span class="linenos">5029</span></a><span class="sd"> Values: the Values expression object</span>
+</span><span id="values-5030"><a href="#values-5030"><span class="linenos">5030</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="values-5031"><a href="#values-5031"><span class="linenos">5031</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="values-5032"><a href="#values-5032"><span class="linenos">5032</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Alias is required when providing columns&quot;</span><span class="p">)</span>
+</span><span id="values-5033"><a href="#values-5033"><span class="linenos">5033</span></a>
+</span><span id="values-5034"><a href="#values-5034"><span class="linenos">5034</span></a> <span class="k">return</span> <span class="n">Values</span><span class="p">(</span>
+</span><span id="values-5035"><a href="#values-5035"><span class="linenos">5035</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">values</span><span class="p">],</span>
+</span><span id="values-5036"><a href="#values-5036"><span class="linenos">5036</span></a> <span class="n">alias</span><span class="o">=</span><span class="p">(</span>
+</span><span id="values-5037"><a href="#values-5037"><span class="linenos">5037</span></a> <span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">])</span>
+</span><span id="values-5038"><a href="#values-5038"><span class="linenos">5038</span></a> <span class="k">if</span> <span class="n">columns</span>
+</span><span id="values-5039"><a href="#values-5039"><span class="linenos">5039</span></a> <span class="k">else</span> <span class="p">(</span><span class="n">TableAlias</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">alias</span><span class="p">))</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="values-5040"><a href="#values-5040"><span class="linenos">5040</span></a> <span class="p">),</span>
+</span><span id="values-5041"><a href="#values-5041"><span class="linenos">5041</span></a> <span class="p">)</span>
</span></pre></div>
@@ -45526,9 +47855,7 @@ If an Expression instance is passed, this is used as-is.</li>
<li><strong>values:</strong> values statements that will be converted to SQL</li>
<li><strong>alias:</strong> optional alias</li>
<li><strong>columns:</strong> Optional list of ordered column names or ordered dictionary of column names to types.
-If either are provided then an alias is also required.
-If a dictionary is provided then the first column of the values will be casted to the expected type
-in order to help with type inference.</li>
+If either are provided then an alias is also required.</li>
</ul>
<h6 id="returns">Returns:</h6>
@@ -45551,28 +47878,28 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#var"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="var-4897"><a href="#var-4897"><span class="linenos">4897</span></a><span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Var</span><span class="p">:</span>
-</span><span id="var-4898"><a href="#var-4898"><span class="linenos">4898</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</span>
-</span><span id="var-4899"><a href="#var-4899"><span class="linenos">4899</span></a>
-</span><span id="var-4900"><a href="#var-4900"><span class="linenos">4900</span></a><span class="sd"> Example:</span>
-</span><span id="var-4901"><a href="#var-4901"><span class="linenos">4901</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
-</span><span id="var-4902"><a href="#var-4902"><span class="linenos">4902</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
-</span><span id="var-4903"><a href="#var-4903"><span class="linenos">4903</span></a>
-</span><span id="var-4904"><a href="#var-4904"><span class="linenos">4904</span></a><span class="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
-</span><span id="var-4905"><a href="#var-4905"><span class="linenos">4905</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
-</span><span id="var-4906"><a href="#var-4906"><span class="linenos">4906</span></a>
-</span><span id="var-4907"><a href="#var-4907"><span class="linenos">4907</span></a><span class="sd"> Args:</span>
-</span><span id="var-4908"><a href="#var-4908"><span class="linenos">4908</span></a><span class="sd"> name: The name of the var or an expression who&#39;s name will become the var.</span>
-</span><span id="var-4909"><a href="#var-4909"><span class="linenos">4909</span></a>
-</span><span id="var-4910"><a href="#var-4910"><span class="linenos">4910</span></a><span class="sd"> Returns:</span>
-</span><span id="var-4911"><a href="#var-4911"><span class="linenos">4911</span></a><span class="sd"> The new variable node.</span>
-</span><span id="var-4912"><a href="#var-4912"><span class="linenos">4912</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="var-4913"><a href="#var-4913"><span class="linenos">4913</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
-</span><span id="var-4914"><a href="#var-4914"><span class="linenos">4914</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cannot convert empty name into var.&quot;</span><span class="p">)</span>
-</span><span id="var-4915"><a href="#var-4915"><span class="linenos">4915</span></a>
-</span><span id="var-4916"><a href="#var-4916"><span class="linenos">4916</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="var-4917"><a href="#var-4917"><span class="linenos">4917</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">name</span>
-</span><span id="var-4918"><a href="#var-4918"><span class="linenos">4918</span></a> <span class="k">return</span> <span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="var-5044"><a href="#var-5044"><span class="linenos">5044</span></a><span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ExpOrStr</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Var</span><span class="p">:</span>
+</span><span id="var-5045"><a href="#var-5045"><span class="linenos">5045</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build a SQL variable.</span>
+</span><span id="var-5046"><a href="#var-5046"><span class="linenos">5046</span></a>
+</span><span id="var-5047"><a href="#var-5047"><span class="linenos">5047</span></a><span class="sd"> Example:</span>
+</span><span id="var-5048"><a href="#var-5048"><span class="linenos">5048</span></a><span class="sd"> &gt;&gt;&gt; repr(var(&#39;x&#39;))</span>
+</span><span id="var-5049"><a href="#var-5049"><span class="linenos">5049</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
+</span><span id="var-5050"><a href="#var-5050"><span class="linenos">5050</span></a>
+</span><span id="var-5051"><a href="#var-5051"><span class="linenos">5051</span></a><span class="sd"> &gt;&gt;&gt; repr(var(column(&#39;x&#39;, table=&#39;y&#39;)))</span>
+</span><span id="var-5052"><a href="#var-5052"><span class="linenos">5052</span></a><span class="sd"> &#39;(VAR this: x)&#39;</span>
+</span><span id="var-5053"><a href="#var-5053"><span class="linenos">5053</span></a>
+</span><span id="var-5054"><a href="#var-5054"><span class="linenos">5054</span></a><span class="sd"> Args:</span>
+</span><span id="var-5055"><a href="#var-5055"><span class="linenos">5055</span></a><span class="sd"> name: The name of the var or an expression who&#39;s name will become the var.</span>
+</span><span id="var-5056"><a href="#var-5056"><span class="linenos">5056</span></a>
+</span><span id="var-5057"><a href="#var-5057"><span class="linenos">5057</span></a><span class="sd"> Returns:</span>
+</span><span id="var-5058"><a href="#var-5058"><span class="linenos">5058</span></a><span class="sd"> The new variable node.</span>
+</span><span id="var-5059"><a href="#var-5059"><span class="linenos">5059</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="var-5060"><a href="#var-5060"><span class="linenos">5060</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
+</span><span id="var-5061"><a href="#var-5061"><span class="linenos">5061</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Cannot convert empty name into var.&quot;</span><span class="p">)</span>
+</span><span id="var-5062"><a href="#var-5062"><span class="linenos">5062</span></a>
+</span><span id="var-5063"><a href="#var-5063"><span class="linenos">5063</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="var-5064"><a href="#var-5064"><span class="linenos">5064</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">name</span>
+</span><span id="var-5065"><a href="#var-5065"><span class="linenos">5065</span></a> <span class="k">return</span> <span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
</span></pre></div>
@@ -45620,24 +47947,24 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#rename_table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="rename_table-4921"><a href="#rename_table-4921"><span class="linenos">4921</span></a><span class="k">def</span> <span class="nf">rename_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span> <span class="n">new_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AlterTable</span><span class="p">:</span>
-</span><span id="rename_table-4922"><a href="#rename_table-4922"><span class="linenos">4922</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
-</span><span id="rename_table-4923"><a href="#rename_table-4923"><span class="linenos">4923</span></a>
-</span><span id="rename_table-4924"><a href="#rename_table-4924"><span class="linenos">4924</span></a><span class="sd"> Args:</span>
-</span><span id="rename_table-4925"><a href="#rename_table-4925"><span class="linenos">4925</span></a><span class="sd"> old_name: The old name of the table</span>
-</span><span id="rename_table-4926"><a href="#rename_table-4926"><span class="linenos">4926</span></a><span class="sd"> new_name: The new name of the table</span>
-</span><span id="rename_table-4927"><a href="#rename_table-4927"><span class="linenos">4927</span></a>
-</span><span id="rename_table-4928"><a href="#rename_table-4928"><span class="linenos">4928</span></a><span class="sd"> Returns:</span>
-</span><span id="rename_table-4929"><a href="#rename_table-4929"><span class="linenos">4929</span></a><span class="sd"> Alter table expression</span>
-</span><span id="rename_table-4930"><a href="#rename_table-4930"><span class="linenos">4930</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="rename_table-4931"><a href="#rename_table-4931"><span class="linenos">4931</span></a> <span class="n">old_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
-</span><span id="rename_table-4932"><a href="#rename_table-4932"><span class="linenos">4932</span></a> <span class="n">new_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
-</span><span id="rename_table-4933"><a href="#rename_table-4933"><span class="linenos">4933</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
-</span><span id="rename_table-4934"><a href="#rename_table-4934"><span class="linenos">4934</span></a> <span class="n">this</span><span class="o">=</span><span class="n">old_table</span><span class="p">,</span>
-</span><span id="rename_table-4935"><a href="#rename_table-4935"><span class="linenos">4935</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
-</span><span id="rename_table-4936"><a href="#rename_table-4936"><span class="linenos">4936</span></a> <span class="n">RenameTable</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">new_table</span><span class="p">),</span>
-</span><span id="rename_table-4937"><a href="#rename_table-4937"><span class="linenos">4937</span></a> <span class="p">],</span>
-</span><span id="rename_table-4938"><a href="#rename_table-4938"><span class="linenos">4938</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="rename_table-5068"><a href="#rename_table-5068"><span class="linenos">5068</span></a><span class="k">def</span> <span class="nf">rename_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">,</span> <span class="n">new_name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AlterTable</span><span class="p">:</span>
+</span><span id="rename_table-5069"><a href="#rename_table-5069"><span class="linenos">5069</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build ALTER TABLE... RENAME... expression</span>
+</span><span id="rename_table-5070"><a href="#rename_table-5070"><span class="linenos">5070</span></a>
+</span><span id="rename_table-5071"><a href="#rename_table-5071"><span class="linenos">5071</span></a><span class="sd"> Args:</span>
+</span><span id="rename_table-5072"><a href="#rename_table-5072"><span class="linenos">5072</span></a><span class="sd"> old_name: The old name of the table</span>
+</span><span id="rename_table-5073"><a href="#rename_table-5073"><span class="linenos">5073</span></a><span class="sd"> new_name: The new name of the table</span>
+</span><span id="rename_table-5074"><a href="#rename_table-5074"><span class="linenos">5074</span></a>
+</span><span id="rename_table-5075"><a href="#rename_table-5075"><span class="linenos">5075</span></a><span class="sd"> Returns:</span>
+</span><span id="rename_table-5076"><a href="#rename_table-5076"><span class="linenos">5076</span></a><span class="sd"> Alter table expression</span>
+</span><span id="rename_table-5077"><a href="#rename_table-5077"><span class="linenos">5077</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="rename_table-5078"><a href="#rename_table-5078"><span class="linenos">5078</span></a> <span class="n">old_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
+</span><span id="rename_table-5079"><a href="#rename_table-5079"><span class="linenos">5079</span></a> <span class="n">new_table</span> <span class="o">=</span> <span class="n">to_table</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
+</span><span id="rename_table-5080"><a href="#rename_table-5080"><span class="linenos">5080</span></a> <span class="k">return</span> <span class="n">AlterTable</span><span class="p">(</span>
+</span><span id="rename_table-5081"><a href="#rename_table-5081"><span class="linenos">5081</span></a> <span class="n">this</span><span class="o">=</span><span class="n">old_table</span><span class="p">,</span>
+</span><span id="rename_table-5082"><a href="#rename_table-5082"><span class="linenos">5082</span></a> <span class="n">actions</span><span class="o">=</span><span class="p">[</span>
+</span><span id="rename_table-5083"><a href="#rename_table-5083"><span class="linenos">5083</span></a> <span class="n">RenameTable</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">new_table</span><span class="p">),</span>
+</span><span id="rename_table-5084"><a href="#rename_table-5084"><span class="linenos">5084</span></a> <span class="p">],</span>
+</span><span id="rename_table-5085"><a href="#rename_table-5085"><span class="linenos">5085</span></a> <span class="p">)</span>
</span></pre></div>
@@ -45664,53 +47991,52 @@ in order to help with type inference.</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">convert</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">value</span></span><span class="return-annotation">) -> <span class="n"><a href="#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
+ <span class="name">convert</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">value</span><span class="p">:</span> <span class="n">Any</span>, </span><span class="param"><span class="n">copy</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="#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
<label class="view-source-button" for="convert-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#convert"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="convert-4941"><a href="#convert-4941"><span class="linenos">4941</span></a><span class="k">def</span> <span class="nf">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="convert-4942"><a href="#convert-4942"><span class="linenos">4942</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a python value into an expression object.</span>
-</span><span id="convert-4943"><a href="#convert-4943"><span class="linenos">4943</span></a>
-</span><span id="convert-4944"><a href="#convert-4944"><span class="linenos">4944</span></a><span class="sd"> Raises an error if a conversion is not possible.</span>
-</span><span id="convert-4945"><a href="#convert-4945"><span class="linenos">4945</span></a>
-</span><span id="convert-4946"><a href="#convert-4946"><span class="linenos">4946</span></a><span class="sd"> Args:</span>
-</span><span id="convert-4947"><a href="#convert-4947"><span class="linenos">4947</span></a><span class="sd"> value (Any): a python object</span>
-</span><span id="convert-4948"><a href="#convert-4948"><span class="linenos">4948</span></a>
-</span><span id="convert-4949"><a href="#convert-4949"><span class="linenos">4949</span></a><span class="sd"> Returns:</span>
-</span><span id="convert-4950"><a href="#convert-4950"><span class="linenos">4950</span></a><span class="sd"> Expression: the equivalent expression object</span>
-</span><span id="convert-4951"><a href="#convert-4951"><span class="linenos">4951</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="convert-4952"><a href="#convert-4952"><span class="linenos">4952</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">Expression</span><span class="p">):</span>
-</span><span id="convert-4953"><a href="#convert-4953"><span class="linenos">4953</span></a> <span class="k">return</span> <span class="n">value</span>
-</span><span id="convert-4954"><a href="#convert-4954"><span class="linenos">4954</span></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="convert-4955"><a href="#convert-4955"><span class="linenos">4955</span></a> <span class="k">return</span> <span class="n">NULL</span>
-</span><span id="convert-4956"><a href="#convert-4956"><span class="linenos">4956</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="nb">bool</span><span class="p">):</span>
-</span><span id="convert-4957"><a href="#convert-4957"><span class="linenos">4957</span></a> <span class="k">return</span> <span class="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
-</span><span id="convert-4958"><a href="#convert-4958"><span class="linenos">4958</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="nb">str</span><span class="p">):</span>
-</span><span id="convert-4959"><a href="#convert-4959"><span class="linenos">4959</span></a> <span class="k">return</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="convert-4960"><a href="#convert-4960"><span class="linenos">4960</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="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="n">math</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-</span><span id="convert-4961"><a href="#convert-4961"><span class="linenos">4961</span></a> <span class="k">return</span> <span class="n">NULL</span>
-</span><span id="convert-4962"><a href="#convert-4962"><span class="linenos">4962</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">numbers</span><span class="o">.</span><span class="n">Number</span><span class="p">):</span>
-</span><span id="convert-4963"><a href="#convert-4963"><span class="linenos">4963</span></a> <span class="k">return</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="convert-4964"><a href="#convert-4964"><span class="linenos">4964</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="nb">tuple</span><span class="p">):</span>
-</span><span id="convert-4965"><a href="#convert-4965"><span class="linenos">4965</span></a> <span class="k">return</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">convert</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">value</span><span class="p">])</span>
-</span><span id="convert-4966"><a href="#convert-4966"><span class="linenos">4966</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="nb">list</span><span class="p">):</span>
-</span><span id="convert-4967"><a href="#convert-4967"><span class="linenos">4967</span></a> <span class="k">return</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">convert</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">value</span><span class="p">])</span>
-</span><span id="convert-4968"><a href="#convert-4968"><span class="linenos">4968</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="nb">dict</span><span class="p">):</span>
-</span><span id="convert-4969"><a href="#convert-4969"><span class="linenos">4969</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
-</span><span id="convert-4970"><a href="#convert-4970"><span class="linenos">4970</span></a> <span class="n">keys</span><span class="o">=</span><span class="p">[</span><span class="n">convert</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="n">value</span><span class="p">],</span>
-</span><span id="convert-4971"><a href="#convert-4971"><span class="linenos">4971</span></a> <span class="n">values</span><span class="o">=</span><span class="p">[</span><span class="n">convert</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">value</span><span class="o">.</span><span class="n">values</span><span class="p">()],</span>
-</span><span id="convert-4972"><a href="#convert-4972"><span class="linenos">4972</span></a> <span class="p">)</span>
-</span><span id="convert-4973"><a href="#convert-4973"><span class="linenos">4973</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">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
-</span><span id="convert-4974"><a href="#convert-4974"><span class="linenos">4974</span></a> <span class="n">datetime_literal</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="convert-4975"><a href="#convert-4975"><span class="linenos">4975</span></a> <span class="p">(</span><span class="n">value</span> <span class="k">if</span> <span class="n">value</span><span class="o">.</span><span class="n">tzinfo</span> <span class="k">else</span> <span class="n">value</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">))</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
-</span><span id="convert-4976"><a href="#convert-4976"><span class="linenos">4976</span></a> <span class="p">)</span>
-</span><span id="convert-4977"><a href="#convert-4977"><span class="linenos">4977</span></a> <span class="k">return</span> <span class="n">TimeStrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">datetime_literal</span><span class="p">)</span>
-</span><span id="convert-4978"><a href="#convert-4978"><span class="linenos">4978</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">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
-</span><span id="convert-4979"><a href="#convert-4979"><span class="linenos">4979</span></a> <span class="n">date_literal</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="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">))</span>
-</span><span id="convert-4980"><a href="#convert-4980"><span class="linenos">4980</span></a> <span class="k">return</span> <span class="n">DateStrToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date_literal</span><span class="p">)</span>
-</span><span id="convert-4981"><a href="#convert-4981"><span class="linenos">4981</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;Cannot convert </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="convert-5088"><a href="#convert-5088"><span class="linenos">5088</span></a><span class="k">def</span> <span class="nf">convert</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="n">copy</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">Expression</span><span class="p">:</span>
+</span><span id="convert-5089"><a href="#convert-5089"><span class="linenos">5089</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert a python value into an expression object.</span>
+</span><span id="convert-5090"><a href="#convert-5090"><span class="linenos">5090</span></a>
+</span><span id="convert-5091"><a href="#convert-5091"><span class="linenos">5091</span></a><span class="sd"> Raises an error if a conversion is not possible.</span>
+</span><span id="convert-5092"><a href="#convert-5092"><span class="linenos">5092</span></a>
+</span><span id="convert-5093"><a href="#convert-5093"><span class="linenos">5093</span></a><span class="sd"> Args:</span>
+</span><span id="convert-5094"><a href="#convert-5094"><span class="linenos">5094</span></a><span class="sd"> value: A python object.</span>
+</span><span id="convert-5095"><a href="#convert-5095"><span class="linenos">5095</span></a><span class="sd"> copy: Whether or not to copy `value` (only applies to Expressions and collections).</span>
+</span><span id="convert-5096"><a href="#convert-5096"><span class="linenos">5096</span></a>
+</span><span id="convert-5097"><a href="#convert-5097"><span class="linenos">5097</span></a><span class="sd"> Returns:</span>
+</span><span id="convert-5098"><a href="#convert-5098"><span class="linenos">5098</span></a><span class="sd"> Expression: the equivalent expression object.</span>
+</span><span id="convert-5099"><a href="#convert-5099"><span class="linenos">5099</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="convert-5100"><a href="#convert-5100"><span class="linenos">5100</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">Expression</span><span class="p">):</span>
+</span><span id="convert-5101"><a href="#convert-5101"><span class="linenos">5101</span></a> <span class="k">return</span> <span class="n">_maybe_copy</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span>
+</span><span id="convert-5102"><a href="#convert-5102"><span class="linenos">5102</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="nb">str</span><span class="p">):</span>
+</span><span id="convert-5103"><a href="#convert-5103"><span class="linenos">5103</span></a> <span class="k">return</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="convert-5104"><a href="#convert-5104"><span class="linenos">5104</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="nb">bool</span><span class="p">):</span>
+</span><span id="convert-5105"><a href="#convert-5105"><span class="linenos">5105</span></a> <span class="k">return</span> <span class="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="convert-5106"><a href="#convert-5106"><span class="linenos">5106</span></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">float</span><span class="p">)</span> <span class="ow">and</span> <span class="n">math</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">value</span><span class="p">)):</span>
+</span><span id="convert-5107"><a href="#convert-5107"><span class="linenos">5107</span></a> <span class="k">return</span> <span class="n">NULL</span>
+</span><span id="convert-5108"><a href="#convert-5108"><span class="linenos">5108</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">numbers</span><span class="o">.</span><span class="n">Number</span><span class="p">):</span>
+</span><span id="convert-5109"><a href="#convert-5109"><span class="linenos">5109</span></a> <span class="k">return</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="convert-5110"><a href="#convert-5110"><span class="linenos">5110</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">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">):</span>
+</span><span id="convert-5111"><a href="#convert-5111"><span class="linenos">5111</span></a> <span class="n">datetime_literal</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="convert-5112"><a href="#convert-5112"><span class="linenos">5112</span></a> <span class="p">(</span><span class="n">value</span> <span class="k">if</span> <span class="n">value</span><span class="o">.</span><span class="n">tzinfo</span> <span class="k">else</span> <span class="n">value</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">tzinfo</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">))</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
+</span><span id="convert-5113"><a href="#convert-5113"><span class="linenos">5113</span></a> <span class="p">)</span>
+</span><span id="convert-5114"><a href="#convert-5114"><span class="linenos">5114</span></a> <span class="k">return</span> <span class="n">TimeStrToTime</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">datetime_literal</span><span class="p">)</span>
+</span><span id="convert-5115"><a href="#convert-5115"><span class="linenos">5115</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">datetime</span><span class="o">.</span><span class="n">date</span><span class="p">):</span>
+</span><span id="convert-5116"><a href="#convert-5116"><span class="linenos">5116</span></a> <span class="n">date_literal</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="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">))</span>
+</span><span id="convert-5117"><a href="#convert-5117"><span class="linenos">5117</span></a> <span class="k">return</span> <span class="n">DateStrToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">date_literal</span><span class="p">)</span>
+</span><span id="convert-5118"><a href="#convert-5118"><span class="linenos">5118</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="nb">tuple</span><span class="p">):</span>
+</span><span id="convert-5119"><a href="#convert-5119"><span class="linenos">5119</span></a> <span class="k">return</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">convert</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">])</span>
+</span><span id="convert-5120"><a href="#convert-5120"><span class="linenos">5120</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="nb">list</span><span class="p">):</span>
+</span><span id="convert-5121"><a href="#convert-5121"><span class="linenos">5121</span></a> <span class="k">return</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">convert</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">])</span>
+</span><span id="convert-5122"><a href="#convert-5122"><span class="linenos">5122</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="nb">dict</span><span class="p">):</span>
+</span><span id="convert-5123"><a href="#convert-5123"><span class="linenos">5123</span></a> <span class="k">return</span> <span class="n">Map</span><span class="p">(</span>
+</span><span id="convert-5124"><a href="#convert-5124"><span class="linenos">5124</span></a> <span class="n">keys</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">value</span><span class="p">],</span>
+</span><span id="convert-5125"><a href="#convert-5125"><span class="linenos">5125</span></a> <span class="n">values</span><span class="o">=</span><span class="p">[</span><span class="n">convert</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="o">.</span><span class="n">values</span><span class="p">()],</span>
+</span><span id="convert-5126"><a href="#convert-5126"><span class="linenos">5126</span></a> <span class="p">)</span>
+</span><span id="convert-5127"><a href="#convert-5127"><span class="linenos">5127</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;Cannot convert </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span></pre></div>
@@ -45721,13 +48047,14 @@ in order to help with type inference.</li>
<h6 id="arguments">Arguments:</h6>
<ul>
-<li><strong>value (Any):</strong> a python object</li>
+<li><strong>value:</strong> A python object.</li>
+<li><strong>copy:</strong> Whether or not to copy <code>value</code> (only applies to Expressions and collections).</li>
</ul>
<h6 id="returns">Returns:</h6>
<blockquote>
- <p>Expression: the equivalent expression object</p>
+ <p>Expression: the equivalent expression object.</p>
</blockquote>
</div>
@@ -45744,26 +48071,26 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#replace_children"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="replace_children-4984"><a href="#replace_children-4984"><span class="linenos">4984</span></a><span class="k">def</span> <span class="nf">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fun</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="replace_children-4985"><a href="#replace_children-4985"><span class="linenos">4985</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="replace_children-4986"><a href="#replace_children-4986"><span class="linenos">4986</span></a><span class="sd"> Replace children of an expression with the result of a lambda fun(child) -&gt; exp.</span>
-</span><span id="replace_children-4987"><a href="#replace_children-4987"><span class="linenos">4987</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="replace_children-4988"><a href="#replace_children-4988"><span class="linenos">4988</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">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="replace_children-4989"><a href="#replace_children-4989"><span class="linenos">4989</span></a> <span class="n">is_list_arg</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">list</span>
-</span><span id="replace_children-4990"><a href="#replace_children-4990"><span class="linenos">4990</span></a>
-</span><span id="replace_children-4991"><a href="#replace_children-4991"><span class="linenos">4991</span></a> <span class="n">child_nodes</span> <span class="o">=</span> <span class="n">v</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="p">[</span><span class="n">v</span><span class="p">]</span>
-</span><span id="replace_children-4992"><a href="#replace_children-4992"><span class="linenos">4992</span></a> <span class="n">new_child_nodes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="replace_children-4993"><a href="#replace_children-4993"><span class="linenos">4993</span></a>
-</span><span id="replace_children-4994"><a href="#replace_children-4994"><span class="linenos">4994</span></a> <span class="k">for</span> <span class="n">cn</span> <span class="ow">in</span> <span class="n">child_nodes</span><span class="p">:</span>
-</span><span id="replace_children-4995"><a href="#replace_children-4995"><span class="linenos">4995</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cn</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="replace_children-4996"><a href="#replace_children-4996"><span class="linenos">4996</span></a> <span class="k">for</span> <span class="n">child_node</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">fun</span><span class="p">(</span><span class="n">cn</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="replace_children-4997"><a href="#replace_children-4997"><span class="linenos">4997</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_node</span><span class="p">)</span>
-</span><span id="replace_children-4998"><a href="#replace_children-4998"><span class="linenos">4998</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="replace_children-4999"><a href="#replace_children-4999"><span class="linenos">4999</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">=</span> <span class="n">k</span>
-</span><span id="replace_children-5000"><a href="#replace_children-5000"><span class="linenos">5000</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="replace_children-5001"><a href="#replace_children-5001"><span class="linenos">5001</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cn</span><span class="p">)</span>
-</span><span id="replace_children-5002"><a href="#replace_children-5002"><span class="linenos">5002</span></a>
-</span><span id="replace_children-5003"><a href="#replace_children-5003"><span class="linenos">5003</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_child_nodes</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">new_child_nodes</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="replace_children-5130"><a href="#replace_children-5130"><span class="linenos">5130</span></a><span class="k">def</span> <span class="nf">replace_children</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">fun</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="replace_children-5131"><a href="#replace_children-5131"><span class="linenos">5131</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="replace_children-5132"><a href="#replace_children-5132"><span class="linenos">5132</span></a><span class="sd"> Replace children of an expression with the result of a lambda fun(child) -&gt; exp.</span>
+</span><span id="replace_children-5133"><a href="#replace_children-5133"><span class="linenos">5133</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="replace_children-5134"><a href="#replace_children-5134"><span class="linenos">5134</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">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="replace_children-5135"><a href="#replace_children-5135"><span class="linenos">5135</span></a> <span class="n">is_list_arg</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="ow">is</span> <span class="nb">list</span>
+</span><span id="replace_children-5136"><a href="#replace_children-5136"><span class="linenos">5136</span></a>
+</span><span id="replace_children-5137"><a href="#replace_children-5137"><span class="linenos">5137</span></a> <span class="n">child_nodes</span> <span class="o">=</span> <span class="n">v</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="p">[</span><span class="n">v</span><span class="p">]</span>
+</span><span id="replace_children-5138"><a href="#replace_children-5138"><span class="linenos">5138</span></a> <span class="n">new_child_nodes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="replace_children-5139"><a href="#replace_children-5139"><span class="linenos">5139</span></a>
+</span><span id="replace_children-5140"><a href="#replace_children-5140"><span class="linenos">5140</span></a> <span class="k">for</span> <span class="n">cn</span> <span class="ow">in</span> <span class="n">child_nodes</span><span class="p">:</span>
+</span><span id="replace_children-5141"><a href="#replace_children-5141"><span class="linenos">5141</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cn</span><span class="p">,</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="replace_children-5142"><a href="#replace_children-5142"><span class="linenos">5142</span></a> <span class="k">for</span> <span class="n">child_node</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">fun</span><span class="p">(</span><span class="n">cn</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="replace_children-5143"><a href="#replace_children-5143"><span class="linenos">5143</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child_node</span><span class="p">)</span>
+</span><span id="replace_children-5144"><a href="#replace_children-5144"><span class="linenos">5144</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">parent</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="replace_children-5145"><a href="#replace_children-5145"><span class="linenos">5145</span></a> <span class="n">child_node</span><span class="o">.</span><span class="n">arg_key</span> <span class="o">=</span> <span class="n">k</span>
+</span><span id="replace_children-5146"><a href="#replace_children-5146"><span class="linenos">5146</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="replace_children-5147"><a href="#replace_children-5147"><span class="linenos">5147</span></a> <span class="n">new_child_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cn</span><span class="p">)</span>
+</span><span id="replace_children-5148"><a href="#replace_children-5148"><span class="linenos">5148</span></a>
+</span><span id="replace_children-5149"><a href="#replace_children-5149"><span class="linenos">5149</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_child_nodes</span> <span class="k">if</span> <span class="n">is_list_arg</span> <span class="k">else</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">new_child_nodes</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</span></pre></div>
@@ -45783,22 +48110,22 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#column_table_names"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="column_table_names-5006"><a href="#column_table_names-5006"><span class="linenos">5006</span></a><span class="k">def</span> <span class="nf">column_table_names</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="column_table_names-5007"><a href="#column_table_names-5007"><span class="linenos">5007</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="column_table_names-5008"><a href="#column_table_names-5008"><span class="linenos">5008</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
-</span><span id="column_table_names-5009"><a href="#column_table_names-5009"><span class="linenos">5009</span></a>
-</span><span id="column_table_names-5010"><a href="#column_table_names-5010"><span class="linenos">5010</span></a><span class="sd"> Example:</span>
-</span><span id="column_table_names-5011"><a href="#column_table_names-5011"><span class="linenos">5011</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="column_table_names-5012"><a href="#column_table_names-5012"><span class="linenos">5012</span></a><span class="sd"> &gt;&gt;&gt; column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;))</span>
-</span><span id="column_table_names-5013"><a href="#column_table_names-5013"><span class="linenos">5013</span></a><span class="sd"> [&#39;c&#39;, &#39;a&#39;]</span>
-</span><span id="column_table_names-5014"><a href="#column_table_names-5014"><span class="linenos">5014</span></a>
-</span><span id="column_table_names-5015"><a href="#column_table_names-5015"><span class="linenos">5015</span></a><span class="sd"> Args:</span>
-</span><span id="column_table_names-5016"><a href="#column_table_names-5016"><span class="linenos">5016</span></a><span class="sd"> expression (sqlglot.Expression): expression to find table names</span>
-</span><span id="column_table_names-5017"><a href="#column_table_names-5017"><span class="linenos">5017</span></a>
-</span><span id="column_table_names-5018"><a href="#column_table_names-5018"><span class="linenos">5018</span></a><span class="sd"> Returns:</span>
-</span><span id="column_table_names-5019"><a href="#column_table_names-5019"><span class="linenos">5019</span></a><span class="sd"> list: A list of unique names</span>
-</span><span id="column_table_names-5020"><a href="#column_table_names-5020"><span class="linenos">5020</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="column_table_names-5021"><a href="#column_table_names-5021"><span class="linenos">5021</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">for</span> <span class="n">column</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">Column</span><span class="p">)))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="column_table_names-5152"><a href="#column_table_names-5152"><span class="linenos">5152</span></a><span class="k">def</span> <span class="nf">column_table_names</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="column_table_names-5153"><a href="#column_table_names-5153"><span class="linenos">5153</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="column_table_names-5154"><a href="#column_table_names-5154"><span class="linenos">5154</span></a><span class="sd"> Return all table names referenced through columns in an expression.</span>
+</span><span id="column_table_names-5155"><a href="#column_table_names-5155"><span class="linenos">5155</span></a>
+</span><span id="column_table_names-5156"><a href="#column_table_names-5156"><span class="linenos">5156</span></a><span class="sd"> Example:</span>
+</span><span id="column_table_names-5157"><a href="#column_table_names-5157"><span class="linenos">5157</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="column_table_names-5158"><a href="#column_table_names-5158"><span class="linenos">5158</span></a><span class="sd"> &gt;&gt;&gt; column_table_names(sqlglot.parse_one(&quot;a.b AND c.d AND c.e&quot;))</span>
+</span><span id="column_table_names-5159"><a href="#column_table_names-5159"><span class="linenos">5159</span></a><span class="sd"> [&#39;c&#39;, &#39;a&#39;]</span>
+</span><span id="column_table_names-5160"><a href="#column_table_names-5160"><span class="linenos">5160</span></a>
+</span><span id="column_table_names-5161"><a href="#column_table_names-5161"><span class="linenos">5161</span></a><span class="sd"> Args:</span>
+</span><span id="column_table_names-5162"><a href="#column_table_names-5162"><span class="linenos">5162</span></a><span class="sd"> expression (sqlglot.Expression): expression to find table names</span>
+</span><span id="column_table_names-5163"><a href="#column_table_names-5163"><span class="linenos">5163</span></a>
+</span><span id="column_table_names-5164"><a href="#column_table_names-5164"><span class="linenos">5164</span></a><span class="sd"> Returns:</span>
+</span><span id="column_table_names-5165"><a href="#column_table_names-5165"><span class="linenos">5165</span></a><span class="sd"> list: A list of unique names</span>
+</span><span id="column_table_names-5166"><a href="#column_table_names-5166"><span class="linenos">5166</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="column_table_names-5167"><a href="#column_table_names-5167"><span class="linenos">5167</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">for</span> <span class="n">column</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">Column</span><span class="p">)))</span>
</span></pre></div>
@@ -45841,35 +48168,35 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#table_name"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="table_name-5024"><a href="#table_name-5024"><span class="linenos">5024</span></a><span class="k">def</span> <span class="nf">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="table_name-5025"><a href="#table_name-5025"><span class="linenos">5025</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the full name of a table as a string.</span>
-</span><span id="table_name-5026"><a href="#table_name-5026"><span class="linenos">5026</span></a>
-</span><span id="table_name-5027"><a href="#table_name-5027"><span class="linenos">5027</span></a><span class="sd"> Args:</span>
-</span><span id="table_name-5028"><a href="#table_name-5028"><span class="linenos">5028</span></a><span class="sd"> table (exp.Table | str): table expression node or string.</span>
-</span><span id="table_name-5029"><a href="#table_name-5029"><span class="linenos">5029</span></a>
-</span><span id="table_name-5030"><a href="#table_name-5030"><span class="linenos">5030</span></a><span class="sd"> Examples:</span>
-</span><span id="table_name-5031"><a href="#table_name-5031"><span class="linenos">5031</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="table_name-5032"><a href="#table_name-5032"><span class="linenos">5032</span></a><span class="sd"> &gt;&gt;&gt; table_name(parse_one(&quot;select * from a.b.c&quot;).find(exp.Table))</span>
-</span><span id="table_name-5033"><a href="#table_name-5033"><span class="linenos">5033</span></a><span class="sd"> &#39;a.b.c&#39;</span>
-</span><span id="table_name-5034"><a href="#table_name-5034"><span class="linenos">5034</span></a>
-</span><span id="table_name-5035"><a href="#table_name-5035"><span class="linenos">5035</span></a><span class="sd"> Returns:</span>
-</span><span id="table_name-5036"><a href="#table_name-5036"><span class="linenos">5036</span></a><span class="sd"> The table name.</span>
-</span><span id="table_name-5037"><a href="#table_name-5037"><span class="linenos">5037</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="table_name-5038"><a href="#table_name-5038"><span class="linenos">5038</span></a>
-</span><span id="table_name-5039"><a href="#table_name-5039"><span class="linenos">5039</span></a> <span class="n">table</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">Table</span><span class="p">)</span>
-</span><span id="table_name-5040"><a href="#table_name-5040"><span class="linenos">5040</span></a>
-</span><span id="table_name-5041"><a href="#table_name-5041"><span class="linenos">5041</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="table_name-5042"><a href="#table_name-5042"><span class="linenos">5042</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;Cannot parse </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="table_name-5043"><a href="#table_name-5043"><span class="linenos">5043</span></a>
-</span><span id="table_name-5044"><a href="#table_name-5044"><span class="linenos">5044</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><span id="table_name-5045"><a href="#table_name-5045"><span class="linenos">5045</span></a> <span class="n">part</span>
-</span><span id="table_name-5046"><a href="#table_name-5046"><span class="linenos">5046</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="table_name-5047"><a href="#table_name-5047"><span class="linenos">5047</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
-</span><span id="table_name-5048"><a href="#table_name-5048"><span class="linenos">5048</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
-</span><span id="table_name-5049"><a href="#table_name-5049"><span class="linenos">5049</span></a> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="table_name-5050"><a href="#table_name-5050"><span class="linenos">5050</span></a> <span class="p">)</span>
-</span><span id="table_name-5051"><a href="#table_name-5051"><span class="linenos">5051</span></a> <span class="k">if</span> <span class="n">part</span>
-</span><span id="table_name-5052"><a href="#table_name-5052"><span class="linenos">5052</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="table_name-5170"><a href="#table_name-5170"><span class="linenos">5170</span></a><span class="k">def</span> <span class="nf">table_name</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="table_name-5171"><a href="#table_name-5171"><span class="linenos">5171</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Get the full name of a table as a string.</span>
+</span><span id="table_name-5172"><a href="#table_name-5172"><span class="linenos">5172</span></a>
+</span><span id="table_name-5173"><a href="#table_name-5173"><span class="linenos">5173</span></a><span class="sd"> Args:</span>
+</span><span id="table_name-5174"><a href="#table_name-5174"><span class="linenos">5174</span></a><span class="sd"> table (exp.Table | str): table expression node or string.</span>
+</span><span id="table_name-5175"><a href="#table_name-5175"><span class="linenos">5175</span></a>
+</span><span id="table_name-5176"><a href="#table_name-5176"><span class="linenos">5176</span></a><span class="sd"> Examples:</span>
+</span><span id="table_name-5177"><a href="#table_name-5177"><span class="linenos">5177</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="table_name-5178"><a href="#table_name-5178"><span class="linenos">5178</span></a><span class="sd"> &gt;&gt;&gt; table_name(parse_one(&quot;select * from a.b.c&quot;).find(exp.Table))</span>
+</span><span id="table_name-5179"><a href="#table_name-5179"><span class="linenos">5179</span></a><span class="sd"> &#39;a.b.c&#39;</span>
+</span><span id="table_name-5180"><a href="#table_name-5180"><span class="linenos">5180</span></a>
+</span><span id="table_name-5181"><a href="#table_name-5181"><span class="linenos">5181</span></a><span class="sd"> Returns:</span>
+</span><span id="table_name-5182"><a href="#table_name-5182"><span class="linenos">5182</span></a><span class="sd"> The table name.</span>
+</span><span id="table_name-5183"><a href="#table_name-5183"><span class="linenos">5183</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="table_name-5184"><a href="#table_name-5184"><span class="linenos">5184</span></a>
+</span><span id="table_name-5185"><a href="#table_name-5185"><span class="linenos">5185</span></a> <span class="n">table</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">Table</span><span class="p">)</span>
+</span><span id="table_name-5186"><a href="#table_name-5186"><span class="linenos">5186</span></a>
+</span><span id="table_name-5187"><a href="#table_name-5187"><span class="linenos">5187</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="table_name-5188"><a href="#table_name-5188"><span class="linenos">5188</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;Cannot parse </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="table_name-5189"><a href="#table_name-5189"><span class="linenos">5189</span></a>
+</span><span id="table_name-5190"><a href="#table_name-5190"><span class="linenos">5190</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><span id="table_name-5191"><a href="#table_name-5191"><span class="linenos">5191</span></a> <span class="n">part</span>
+</span><span id="table_name-5192"><a href="#table_name-5192"><span class="linenos">5192</span></a> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="table_name-5193"><a href="#table_name-5193"><span class="linenos">5193</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">),</span>
+</span><span id="table_name-5194"><a href="#table_name-5194"><span class="linenos">5194</span></a> <span class="n">table</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
+</span><span id="table_name-5195"><a href="#table_name-5195"><span class="linenos">5195</span></a> <span class="n">table</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="table_name-5196"><a href="#table_name-5196"><span class="linenos">5196</span></a> <span class="p">)</span>
+</span><span id="table_name-5197"><a href="#table_name-5197"><span class="linenos">5197</span></a> <span class="k">if</span> <span class="n">part</span>
+</span><span id="table_name-5198"><a href="#table_name-5198"><span class="linenos">5198</span></a> <span class="p">)</span>
</span></pre></div>
@@ -45912,33 +48239,33 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#replace_tables"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="replace_tables-5055"><a href="#replace_tables-5055"><span class="linenos">5055</span></a><span class="k">def</span> <span class="nf">replace_tables</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">mapping</span><span class="p">):</span>
-</span><span id="replace_tables-5056"><a href="#replace_tables-5056"><span class="linenos">5056</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace all tables in expression according to the mapping.</span>
-</span><span id="replace_tables-5057"><a href="#replace_tables-5057"><span class="linenos">5057</span></a>
-</span><span id="replace_tables-5058"><a href="#replace_tables-5058"><span class="linenos">5058</span></a><span class="sd"> Args:</span>
-</span><span id="replace_tables-5059"><a href="#replace_tables-5059"><span class="linenos">5059</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
-</span><span id="replace_tables-5060"><a href="#replace_tables-5060"><span class="linenos">5060</span></a><span class="sd"> mapping (Dict[str, str]): mapping of table names.</span>
-</span><span id="replace_tables-5061"><a href="#replace_tables-5061"><span class="linenos">5061</span></a>
-</span><span id="replace_tables-5062"><a href="#replace_tables-5062"><span class="linenos">5062</span></a><span class="sd"> Examples:</span>
-</span><span id="replace_tables-5063"><a href="#replace_tables-5063"><span class="linenos">5063</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="replace_tables-5064"><a href="#replace_tables-5064"><span class="linenos">5064</span></a><span class="sd"> &gt;&gt;&gt; replace_tables(parse_one(&quot;select * from a.b&quot;), {&quot;a.b&quot;: &quot;c&quot;}).sql()</span>
-</span><span id="replace_tables-5065"><a href="#replace_tables-5065"><span class="linenos">5065</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</span>
-</span><span id="replace_tables-5066"><a href="#replace_tables-5066"><span class="linenos">5066</span></a>
-</span><span id="replace_tables-5067"><a href="#replace_tables-5067"><span class="linenos">5067</span></a><span class="sd"> Returns:</span>
-</span><span id="replace_tables-5068"><a href="#replace_tables-5068"><span class="linenos">5068</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="replace_tables-5069"><a href="#replace_tables-5069"><span class="linenos">5069</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="replace_tables-5070"><a href="#replace_tables-5070"><span class="linenos">5070</span></a>
-</span><span id="replace_tables-5071"><a href="#replace_tables-5071"><span class="linenos">5071</span></a> <span class="k">def</span> <span class="nf">_replace_tables</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
-</span><span id="replace_tables-5072"><a href="#replace_tables-5072"><span class="linenos">5072</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
-</span><span id="replace_tables-5073"><a href="#replace_tables-5073"><span class="linenos">5073</span></a> <span class="n">new_name</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">))</span>
-</span><span id="replace_tables-5074"><a href="#replace_tables-5074"><span class="linenos">5074</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="replace_tables-5075"><a href="#replace_tables-5075"><span class="linenos">5075</span></a> <span class="k">return</span> <span class="n">to_table</span><span class="p">(</span>
-</span><span id="replace_tables-5076"><a href="#replace_tables-5076"><span class="linenos">5076</span></a> <span class="n">new_name</span><span class="p">,</span>
-</span><span id="replace_tables-5077"><a href="#replace_tables-5077"><span class="linenos">5077</span></a> <span class="o">**</span><span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</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">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">)},</span>
-</span><span id="replace_tables-5078"><a href="#replace_tables-5078"><span class="linenos">5078</span></a> <span class="p">)</span>
-</span><span id="replace_tables-5079"><a href="#replace_tables-5079"><span class="linenos">5079</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="replace_tables-5080"><a href="#replace_tables-5080"><span class="linenos">5080</span></a>
-</span><span id="replace_tables-5081"><a href="#replace_tables-5081"><span class="linenos">5081</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_tables</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="replace_tables-5201"><a href="#replace_tables-5201"><span class="linenos">5201</span></a><span class="k">def</span> <span class="nf">replace_tables</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">mapping</span><span class="p">):</span>
+</span><span id="replace_tables-5202"><a href="#replace_tables-5202"><span class="linenos">5202</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace all tables in expression according to the mapping.</span>
+</span><span id="replace_tables-5203"><a href="#replace_tables-5203"><span class="linenos">5203</span></a>
+</span><span id="replace_tables-5204"><a href="#replace_tables-5204"><span class="linenos">5204</span></a><span class="sd"> Args:</span>
+</span><span id="replace_tables-5205"><a href="#replace_tables-5205"><span class="linenos">5205</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
+</span><span id="replace_tables-5206"><a href="#replace_tables-5206"><span class="linenos">5206</span></a><span class="sd"> mapping (Dict[str, str]): mapping of table names.</span>
+</span><span id="replace_tables-5207"><a href="#replace_tables-5207"><span class="linenos">5207</span></a>
+</span><span id="replace_tables-5208"><a href="#replace_tables-5208"><span class="linenos">5208</span></a><span class="sd"> Examples:</span>
+</span><span id="replace_tables-5209"><a href="#replace_tables-5209"><span class="linenos">5209</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="replace_tables-5210"><a href="#replace_tables-5210"><span class="linenos">5210</span></a><span class="sd"> &gt;&gt;&gt; replace_tables(parse_one(&quot;select * from a.b&quot;), {&quot;a.b&quot;: &quot;c&quot;}).sql()</span>
+</span><span id="replace_tables-5211"><a href="#replace_tables-5211"><span class="linenos">5211</span></a><span class="sd"> &#39;SELECT * FROM c&#39;</span>
+</span><span id="replace_tables-5212"><a href="#replace_tables-5212"><span class="linenos">5212</span></a>
+</span><span id="replace_tables-5213"><a href="#replace_tables-5213"><span class="linenos">5213</span></a><span class="sd"> Returns:</span>
+</span><span id="replace_tables-5214"><a href="#replace_tables-5214"><span class="linenos">5214</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="replace_tables-5215"><a href="#replace_tables-5215"><span class="linenos">5215</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="replace_tables-5216"><a href="#replace_tables-5216"><span class="linenos">5216</span></a>
+</span><span id="replace_tables-5217"><a href="#replace_tables-5217"><span class="linenos">5217</span></a> <span class="k">def</span> <span class="nf">_replace_tables</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
+</span><span id="replace_tables-5218"><a href="#replace_tables-5218"><span class="linenos">5218</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
+</span><span id="replace_tables-5219"><a href="#replace_tables-5219"><span class="linenos">5219</span></a> <span class="n">new_name</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">))</span>
+</span><span id="replace_tables-5220"><a href="#replace_tables-5220"><span class="linenos">5220</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
+</span><span id="replace_tables-5221"><a href="#replace_tables-5221"><span class="linenos">5221</span></a> <span class="k">return</span> <span class="n">to_table</span><span class="p">(</span>
+</span><span id="replace_tables-5222"><a href="#replace_tables-5222"><span class="linenos">5222</span></a> <span class="n">new_name</span><span class="p">,</span>
+</span><span id="replace_tables-5223"><a href="#replace_tables-5223"><span class="linenos">5223</span></a> <span class="o">**</span><span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</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">node</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;db&quot;</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">)},</span>
+</span><span id="replace_tables-5224"><a href="#replace_tables-5224"><span class="linenos">5224</span></a> <span class="p">)</span>
+</span><span id="replace_tables-5225"><a href="#replace_tables-5225"><span class="linenos">5225</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="replace_tables-5226"><a href="#replace_tables-5226"><span class="linenos">5226</span></a>
+</span><span id="replace_tables-5227"><a href="#replace_tables-5227"><span class="linenos">5227</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_tables</span><span class="p">)</span>
</span></pre></div>
@@ -45982,40 +48309,40 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#replace_placeholders"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="replace_placeholders-5084"><a href="#replace_placeholders-5084"><span class="linenos">5084</span></a><span class="k">def</span> <span class="nf">replace_placeholders</span><span class="p">(</span><span class="n">expression</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="replace_placeholders-5085"><a href="#replace_placeholders-5085"><span class="linenos">5085</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
-</span><span id="replace_placeholders-5086"><a href="#replace_placeholders-5086"><span class="linenos">5086</span></a>
-</span><span id="replace_placeholders-5087"><a href="#replace_placeholders-5087"><span class="linenos">5087</span></a><span class="sd"> Args:</span>
-</span><span id="replace_placeholders-5088"><a href="#replace_placeholders-5088"><span class="linenos">5088</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
-</span><span id="replace_placeholders-5089"><a href="#replace_placeholders-5089"><span class="linenos">5089</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
-</span><span id="replace_placeholders-5090"><a href="#replace_placeholders-5090"><span class="linenos">5090</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</span>
-</span><span id="replace_placeholders-5091"><a href="#replace_placeholders-5091"><span class="linenos">5091</span></a>
-</span><span id="replace_placeholders-5092"><a href="#replace_placeholders-5092"><span class="linenos">5092</span></a><span class="sd"> Examples:</span>
-</span><span id="replace_placeholders-5093"><a href="#replace_placeholders-5093"><span class="linenos">5093</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
-</span><span id="replace_placeholders-5094"><a href="#replace_placeholders-5094"><span class="linenos">5094</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
-</span><span id="replace_placeholders-5095"><a href="#replace_placeholders-5095"><span class="linenos">5095</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
-</span><span id="replace_placeholders-5096"><a href="#replace_placeholders-5096"><span class="linenos">5096</span></a><span class="sd"> ... exp.to_identifier(&quot;str_col&quot;), &quot;b&quot;, tbl=exp.to_identifier(&quot;foo&quot;)</span>
-</span><span id="replace_placeholders-5097"><a href="#replace_placeholders-5097"><span class="linenos">5097</span></a><span class="sd"> ... ).sql()</span>
-</span><span id="replace_placeholders-5098"><a href="#replace_placeholders-5098"><span class="linenos">5098</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</span>
-</span><span id="replace_placeholders-5099"><a href="#replace_placeholders-5099"><span class="linenos">5099</span></a>
-</span><span id="replace_placeholders-5100"><a href="#replace_placeholders-5100"><span class="linenos">5100</span></a><span class="sd"> Returns:</span>
-</span><span id="replace_placeholders-5101"><a href="#replace_placeholders-5101"><span class="linenos">5101</span></a><span class="sd"> The mapped expression.</span>
-</span><span id="replace_placeholders-5102"><a href="#replace_placeholders-5102"><span class="linenos">5102</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="replace_placeholders-5103"><a href="#replace_placeholders-5103"><span class="linenos">5103</span></a>
-</span><span id="replace_placeholders-5104"><a href="#replace_placeholders-5104"><span class="linenos">5104</span></a> <span class="k">def</span> <span class="nf">_replace_placeholders</span><span class="p">(</span><span class="n">node</span><span class="p">,</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="replace_placeholders-5105"><a href="#replace_placeholders-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Placeholder</span><span class="p">):</span>
-</span><span id="replace_placeholders-5106"><a href="#replace_placeholders-5106"><span class="linenos">5106</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
-</span><span id="replace_placeholders-5107"><a href="#replace_placeholders-5107"><span class="linenos">5107</span></a> <span class="n">new_name</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="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="replace_placeholders-5108"><a href="#replace_placeholders-5108"><span class="linenos">5108</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
-</span><span id="replace_placeholders-5109"><a href="#replace_placeholders-5109"><span class="linenos">5109</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
-</span><span id="replace_placeholders-5110"><a href="#replace_placeholders-5110"><span class="linenos">5110</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="replace_placeholders-5111"><a href="#replace_placeholders-5111"><span class="linenos">5111</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="replace_placeholders-5112"><a href="#replace_placeholders-5112"><span class="linenos">5112</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
-</span><span id="replace_placeholders-5113"><a href="#replace_placeholders-5113"><span class="linenos">5113</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
-</span><span id="replace_placeholders-5114"><a href="#replace_placeholders-5114"><span class="linenos">5114</span></a> <span class="k">pass</span>
-</span><span id="replace_placeholders-5115"><a href="#replace_placeholders-5115"><span class="linenos">5115</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="replace_placeholders-5116"><a href="#replace_placeholders-5116"><span class="linenos">5116</span></a>
-</span><span id="replace_placeholders-5117"><a href="#replace_placeholders-5117"><span class="linenos">5117</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_placeholders</span><span class="p">,</span> <span class="nb">iter</span><span class="p">(</span><span class="n">args</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="replace_placeholders-5230"><a href="#replace_placeholders-5230"><span class="linenos">5230</span></a><span class="k">def</span> <span class="nf">replace_placeholders</span><span class="p">(</span><span class="n">expression</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="replace_placeholders-5231"><a href="#replace_placeholders-5231"><span class="linenos">5231</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Replace placeholders in an expression.</span>
+</span><span id="replace_placeholders-5232"><a href="#replace_placeholders-5232"><span class="linenos">5232</span></a>
+</span><span id="replace_placeholders-5233"><a href="#replace_placeholders-5233"><span class="linenos">5233</span></a><span class="sd"> Args:</span>
+</span><span id="replace_placeholders-5234"><a href="#replace_placeholders-5234"><span class="linenos">5234</span></a><span class="sd"> expression (sqlglot.Expression): expression node to be transformed and replaced.</span>
+</span><span id="replace_placeholders-5235"><a href="#replace_placeholders-5235"><span class="linenos">5235</span></a><span class="sd"> args: positional names that will substitute unnamed placeholders in the given order.</span>
+</span><span id="replace_placeholders-5236"><a href="#replace_placeholders-5236"><span class="linenos">5236</span></a><span class="sd"> kwargs: keyword arguments that will substitute named placeholders.</span>
+</span><span id="replace_placeholders-5237"><a href="#replace_placeholders-5237"><span class="linenos">5237</span></a>
+</span><span id="replace_placeholders-5238"><a href="#replace_placeholders-5238"><span class="linenos">5238</span></a><span class="sd"> Examples:</span>
+</span><span id="replace_placeholders-5239"><a href="#replace_placeholders-5239"><span class="linenos">5239</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import exp, parse_one</span>
+</span><span id="replace_placeholders-5240"><a href="#replace_placeholders-5240"><span class="linenos">5240</span></a><span class="sd"> &gt;&gt;&gt; replace_placeholders(</span>
+</span><span id="replace_placeholders-5241"><a href="#replace_placeholders-5241"><span class="linenos">5241</span></a><span class="sd"> ... parse_one(&quot;select * from :tbl where ? = ?&quot;),</span>
+</span><span id="replace_placeholders-5242"><a href="#replace_placeholders-5242"><span class="linenos">5242</span></a><span class="sd"> ... exp.to_identifier(&quot;str_col&quot;), &quot;b&quot;, tbl=exp.to_identifier(&quot;foo&quot;)</span>
+</span><span id="replace_placeholders-5243"><a href="#replace_placeholders-5243"><span class="linenos">5243</span></a><span class="sd"> ... ).sql()</span>
+</span><span id="replace_placeholders-5244"><a href="#replace_placeholders-5244"><span class="linenos">5244</span></a><span class="sd"> &quot;SELECT * FROM foo WHERE str_col = &#39;b&#39;&quot;</span>
+</span><span id="replace_placeholders-5245"><a href="#replace_placeholders-5245"><span class="linenos">5245</span></a>
+</span><span id="replace_placeholders-5246"><a href="#replace_placeholders-5246"><span class="linenos">5246</span></a><span class="sd"> Returns:</span>
+</span><span id="replace_placeholders-5247"><a href="#replace_placeholders-5247"><span class="linenos">5247</span></a><span class="sd"> The mapped expression.</span>
+</span><span id="replace_placeholders-5248"><a href="#replace_placeholders-5248"><span class="linenos">5248</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="replace_placeholders-5249"><a href="#replace_placeholders-5249"><span class="linenos">5249</span></a>
+</span><span id="replace_placeholders-5250"><a href="#replace_placeholders-5250"><span class="linenos">5250</span></a> <span class="k">def</span> <span class="nf">_replace_placeholders</span><span class="p">(</span><span class="n">node</span><span class="p">,</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="replace_placeholders-5251"><a href="#replace_placeholders-5251"><span class="linenos">5251</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Placeholder</span><span class="p">):</span>
+</span><span id="replace_placeholders-5252"><a href="#replace_placeholders-5252"><span class="linenos">5252</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+</span><span id="replace_placeholders-5253"><a href="#replace_placeholders-5253"><span class="linenos">5253</span></a> <span class="n">new_name</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="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="replace_placeholders-5254"><a href="#replace_placeholders-5254"><span class="linenos">5254</span></a> <span class="k">if</span> <span class="n">new_name</span><span class="p">:</span>
+</span><span id="replace_placeholders-5255"><a href="#replace_placeholders-5255"><span class="linenos">5255</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
+</span><span id="replace_placeholders-5256"><a href="#replace_placeholders-5256"><span class="linenos">5256</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="replace_placeholders-5257"><a href="#replace_placeholders-5257"><span class="linenos">5257</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="replace_placeholders-5258"><a href="#replace_placeholders-5258"><span class="linenos">5258</span></a> <span class="k">return</span> <span class="n">convert</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
+</span><span id="replace_placeholders-5259"><a href="#replace_placeholders-5259"><span class="linenos">5259</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="replace_placeholders-5260"><a href="#replace_placeholders-5260"><span class="linenos">5260</span></a> <span class="k">pass</span>
+</span><span id="replace_placeholders-5261"><a href="#replace_placeholders-5261"><span class="linenos">5261</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="replace_placeholders-5262"><a href="#replace_placeholders-5262"><span class="linenos">5262</span></a>
+</span><span id="replace_placeholders-5263"><a href="#replace_placeholders-5263"><span class="linenos">5263</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_replace_placeholders</span><span class="p">,</span> <span class="nb">iter</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span></pre></div>
@@ -46063,39 +48390,39 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#expand"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="expand-5120"><a href="#expand-5120"><span class="linenos">5120</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
-</span><span id="expand-5121"><a href="#expand-5121"><span class="linenos">5121</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">Expression</span><span class="p">,</span> <span class="n">sources</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">Subqueryable</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><span id="expand-5122"><a href="#expand-5122"><span class="linenos">5122</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
-</span><span id="expand-5123"><a href="#expand-5123"><span class="linenos">5123</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Transforms an expression by expanding all referenced sources into subqueries.</span>
-</span><span id="expand-5124"><a href="#expand-5124"><span class="linenos">5124</span></a>
-</span><span id="expand-5125"><a href="#expand-5125"><span class="linenos">5125</span></a><span class="sd"> Examples:</span>
-</span><span id="expand-5126"><a href="#expand-5126"><span class="linenos">5126</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
-</span><span id="expand-5127"><a href="#expand-5127"><span class="linenos">5127</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;)}).sql()</span>
-</span><span id="expand-5128"><a href="#expand-5128"><span class="linenos">5128</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
-</span><span id="expand-5129"><a href="#expand-5129"><span class="linenos">5129</span></a>
-</span><span id="expand-5130"><a href="#expand-5130"><span class="linenos">5130</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;), &quot;y&quot;: parse_one(&quot;select * from z&quot;)}).sql()</span>
-</span><span id="expand-5131"><a href="#expand-5131"><span class="linenos">5131</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM (SELECT * FROM z) AS y /* source: y */) AS z /* source: x */&#39;</span>
-</span><span id="expand-5132"><a href="#expand-5132"><span class="linenos">5132</span></a>
-</span><span id="expand-5133"><a href="#expand-5133"><span class="linenos">5133</span></a><span class="sd"> Args:</span>
-</span><span id="expand-5134"><a href="#expand-5134"><span class="linenos">5134</span></a><span class="sd"> expression: The expression to expand.</span>
-</span><span id="expand-5135"><a href="#expand-5135"><span class="linenos">5135</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
-</span><span id="expand-5136"><a href="#expand-5136"><span class="linenos">5136</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
-</span><span id="expand-5137"><a href="#expand-5137"><span class="linenos">5137</span></a>
-</span><span id="expand-5138"><a href="#expand-5138"><span class="linenos">5138</span></a><span class="sd"> Returns:</span>
-</span><span id="expand-5139"><a href="#expand-5139"><span class="linenos">5139</span></a><span class="sd"> The transformed expression.</span>
-</span><span id="expand-5140"><a href="#expand-5140"><span class="linenos">5140</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="expand-5141"><a href="#expand-5141"><span class="linenos">5141</span></a>
-</span><span id="expand-5142"><a href="#expand-5142"><span class="linenos">5142</span></a> <span class="k">def</span> <span class="nf">_expand</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Expression</span><span class="p">):</span>
-</span><span id="expand-5143"><a href="#expand-5143"><span class="linenos">5143</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
-</span><span id="expand-5144"><a href="#expand-5144"><span class="linenos">5144</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
-</span><span id="expand-5145"><a href="#expand-5145"><span class="linenos">5145</span></a> <span class="n">source</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">name</span><span class="p">)</span>
-</span><span id="expand-5146"><a href="#expand-5146"><span class="linenos">5146</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
-</span><span id="expand-5147"><a href="#expand-5147"><span class="linenos">5147</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="ow">or</span> <span class="n">name</span><span class="p">)</span>
-</span><span id="expand-5148"><a href="#expand-5148"><span class="linenos">5148</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;source: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">]</span>
-</span><span id="expand-5149"><a href="#expand-5149"><span class="linenos">5149</span></a> <span class="k">return</span> <span class="n">subquery</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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="expand-5150"><a href="#expand-5150"><span class="linenos">5150</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="expand-5151"><a href="#expand-5151"><span class="linenos">5151</span></a>
-</span><span id="expand-5152"><a href="#expand-5152"><span class="linenos">5152</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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="expand-5266"><a href="#expand-5266"><span class="linenos">5266</span></a><span class="k">def</span> <span class="nf">expand</span><span class="p">(</span>
+</span><span id="expand-5267"><a href="#expand-5267"><span class="linenos">5267</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">Expression</span><span class="p">,</span> <span class="n">sources</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">Subqueryable</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><span id="expand-5268"><a href="#expand-5268"><span class="linenos">5268</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
+</span><span id="expand-5269"><a href="#expand-5269"><span class="linenos">5269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Transforms an expression by expanding all referenced sources into subqueries.</span>
+</span><span id="expand-5270"><a href="#expand-5270"><span class="linenos">5270</span></a>
+</span><span id="expand-5271"><a href="#expand-5271"><span class="linenos">5271</span></a><span class="sd"> Examples:</span>
+</span><span id="expand-5272"><a href="#expand-5272"><span class="linenos">5272</span></a><span class="sd"> &gt;&gt;&gt; from sqlglot import parse_one</span>
+</span><span id="expand-5273"><a href="#expand-5273"><span class="linenos">5273</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;)}).sql()</span>
+</span><span id="expand-5274"><a href="#expand-5274"><span class="linenos">5274</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM y) AS z /* source: x */&#39;</span>
+</span><span id="expand-5275"><a href="#expand-5275"><span class="linenos">5275</span></a>
+</span><span id="expand-5276"><a href="#expand-5276"><span class="linenos">5276</span></a><span class="sd"> &gt;&gt;&gt; expand(parse_one(&quot;select * from x AS z&quot;), {&quot;x&quot;: parse_one(&quot;select * from y&quot;), &quot;y&quot;: parse_one(&quot;select * from z&quot;)}).sql()</span>
+</span><span id="expand-5277"><a href="#expand-5277"><span class="linenos">5277</span></a><span class="sd"> &#39;SELECT * FROM (SELECT * FROM (SELECT * FROM z) AS y /* source: y */) AS z /* source: x */&#39;</span>
+</span><span id="expand-5278"><a href="#expand-5278"><span class="linenos">5278</span></a>
+</span><span id="expand-5279"><a href="#expand-5279"><span class="linenos">5279</span></a><span class="sd"> Args:</span>
+</span><span id="expand-5280"><a href="#expand-5280"><span class="linenos">5280</span></a><span class="sd"> expression: The expression to expand.</span>
+</span><span id="expand-5281"><a href="#expand-5281"><span class="linenos">5281</span></a><span class="sd"> sources: A dictionary of name to Subqueryables.</span>
+</span><span id="expand-5282"><a href="#expand-5282"><span class="linenos">5282</span></a><span class="sd"> copy: Whether or not to copy the expression during transformation. Defaults to True.</span>
+</span><span id="expand-5283"><a href="#expand-5283"><span class="linenos">5283</span></a>
+</span><span id="expand-5284"><a href="#expand-5284"><span class="linenos">5284</span></a><span class="sd"> Returns:</span>
+</span><span id="expand-5285"><a href="#expand-5285"><span class="linenos">5285</span></a><span class="sd"> The transformed expression.</span>
+</span><span id="expand-5286"><a href="#expand-5286"><span class="linenos">5286</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="expand-5287"><a href="#expand-5287"><span class="linenos">5287</span></a>
+</span><span id="expand-5288"><a href="#expand-5288"><span class="linenos">5288</span></a> <span class="k">def</span> <span class="nf">_expand</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Expression</span><span class="p">):</span>
+</span><span id="expand-5289"><a href="#expand-5289"><span class="linenos">5289</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span>
+</span><span id="expand-5290"><a href="#expand-5290"><span class="linenos">5290</span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">table_name</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+</span><span id="expand-5291"><a href="#expand-5291"><span class="linenos">5291</span></a> <span class="n">source</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">name</span><span class="p">)</span>
+</span><span id="expand-5292"><a href="#expand-5292"><span class="linenos">5292</span></a> <span class="k">if</span> <span class="n">source</span><span class="p">:</span>
+</span><span id="expand-5293"><a href="#expand-5293"><span class="linenos">5293</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="ow">or</span> <span class="n">name</span><span class="p">)</span>
+</span><span id="expand-5294"><a href="#expand-5294"><span class="linenos">5294</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;source: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">]</span>
+</span><span id="expand-5295"><a href="#expand-5295"><span class="linenos">5295</span></a> <span class="k">return</span> <span class="n">subquery</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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="expand-5296"><a href="#expand-5296"><span class="linenos">5296</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="expand-5297"><a href="#expand-5297"><span class="linenos">5297</span></a>
+</span><span id="expand-5298"><a href="#expand-5298"><span class="linenos">5298</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">_expand</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>
@@ -46146,51 +48473,51 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="func-5155"><a href="#func-5155"><span class="linenos">5155</span></a><span class="k">def</span> <span class="nf">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">*</span><span class="n">args</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Func</span><span class="p">:</span>
-</span><span id="func-5156"><a href="#func-5156"><span class="linenos">5156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="func-5157"><a href="#func-5157"><span class="linenos">5157</span></a><span class="sd"> Returns a Func expression.</span>
-</span><span id="func-5158"><a href="#func-5158"><span class="linenos">5158</span></a>
-</span><span id="func-5159"><a href="#func-5159"><span class="linenos">5159</span></a><span class="sd"> Examples:</span>
-</span><span id="func-5160"><a href="#func-5160"><span class="linenos">5160</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
-</span><span id="func-5161"><a href="#func-5161"><span class="linenos">5161</span></a><span class="sd"> &#39;ABS(5)&#39;</span>
-</span><span id="func-5162"><a href="#func-5162"><span class="linenos">5162</span></a>
-</span><span id="func-5163"><a href="#func-5163"><span class="linenos">5163</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;cast&quot;, this=5, to=DataType.build(&quot;DOUBLE&quot;)).sql()</span>
-</span><span id="func-5164"><a href="#func-5164"><span class="linenos">5164</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</span>
-</span><span id="func-5165"><a href="#func-5165"><span class="linenos">5165</span></a>
-</span><span id="func-5166"><a href="#func-5166"><span class="linenos">5166</span></a><span class="sd"> Args:</span>
-</span><span id="func-5167"><a href="#func-5167"><span class="linenos">5167</span></a><span class="sd"> name: the name of the function to build.</span>
-</span><span id="func-5168"><a href="#func-5168"><span class="linenos">5168</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
-</span><span id="func-5169"><a href="#func-5169"><span class="linenos">5169</span></a><span class="sd"> dialect: the source dialect.</span>
-</span><span id="func-5170"><a href="#func-5170"><span class="linenos">5170</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</span>
-</span><span id="func-5171"><a href="#func-5171"><span class="linenos">5171</span></a>
-</span><span id="func-5172"><a href="#func-5172"><span class="linenos">5172</span></a><span class="sd"> Note:</span>
-</span><span id="func-5173"><a href="#func-5173"><span class="linenos">5173</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</span>
-</span><span id="func-5174"><a href="#func-5174"><span class="linenos">5174</span></a>
-</span><span id="func-5175"><a href="#func-5175"><span class="linenos">5175</span></a><span class="sd"> Returns:</span>
-</span><span id="func-5176"><a href="#func-5176"><span class="linenos">5176</span></a><span class="sd"> An instance of the function of interest, or an anonymous function, if `name` doesn&#39;t</span>
-</span><span id="func-5177"><a href="#func-5177"><span class="linenos">5177</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
-</span><span id="func-5178"><a href="#func-5178"><span class="linenos">5178</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="func-5179"><a href="#func-5179"><span class="linenos">5179</span></a> <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">:</span>
-</span><span id="func-5180"><a href="#func-5180"><span class="linenos">5180</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Can&#39;t use both args and kwargs to instantiate a function.&quot;</span><span class="p">)</span>
-</span><span id="func-5181"><a href="#func-5181"><span class="linenos">5181</span></a>
-</span><span id="func-5182"><a href="#func-5182"><span class="linenos">5182</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">Dialect</span>
-</span><span id="func-5183"><a href="#func-5183"><span class="linenos">5183</span></a>
-</span><span id="func-5184"><a href="#func-5184"><span class="linenos">5184</span></a> <span class="n">converted</span> <span class="o">=</span> <span class="p">[</span><span class="n">convert</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="func-5185"><a href="#func-5185"><span class="linenos">5185</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">convert</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
-</span><span id="func-5186"><a href="#func-5186"><span class="linenos">5186</span></a>
-</span><span id="func-5187"><a href="#func-5187"><span class="linenos">5187</span></a> <span class="n">parser</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">parser</span><span class="p">()</span>
-</span><span id="func-5188"><a href="#func-5188"><span class="linenos">5188</span></a> <span class="n">from_args_list</span> <span class="o">=</span> <span class="n">parser</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">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="func-5189"><a href="#func-5189"><span class="linenos">5189</span></a>
-</span><span id="func-5190"><a href="#func-5190"><span class="linenos">5190</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
-</span><span id="func-5191"><a href="#func-5191"><span class="linenos">5191</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">from_args_list</span><span class="p">(</span><span class="n">converted</span><span class="p">)</span> <span class="k">if</span> <span class="n">converted</span> <span class="k">else</span> <span class="n">from_args_list</span><span class="o">.</span><span class="vm">__self__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="func-5192"><a href="#func-5192"><span class="linenos">5192</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="func-5193"><a href="#func-5193"><span class="linenos">5193</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span> <span class="ow">or</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">converted</span><span class="p">}</span>
-</span><span id="func-5194"><a href="#func-5194"><span class="linenos">5194</span></a> <span class="n">function</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">name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="func-5195"><a href="#func-5195"><span class="linenos">5195</span></a>
-</span><span id="func-5196"><a href="#func-5196"><span class="linenos">5196</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">converted</span><span class="p">):</span>
-</span><span id="func-5197"><a href="#func-5197"><span class="linenos">5197</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
-</span><span id="func-5198"><a href="#func-5198"><span class="linenos">5198</span></a>
-</span><span id="func-5199"><a href="#func-5199"><span class="linenos">5199</span></a> <span class="k">return</span> <span class="n">function</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="func-5301"><a href="#func-5301"><span class="linenos">5301</span></a><span class="k">def</span> <span class="nf">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">*</span><span class="n">args</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Func</span><span class="p">:</span>
+</span><span id="func-5302"><a href="#func-5302"><span class="linenos">5302</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="func-5303"><a href="#func-5303"><span class="linenos">5303</span></a><span class="sd"> Returns a Func expression.</span>
+</span><span id="func-5304"><a href="#func-5304"><span class="linenos">5304</span></a>
+</span><span id="func-5305"><a href="#func-5305"><span class="linenos">5305</span></a><span class="sd"> Examples:</span>
+</span><span id="func-5306"><a href="#func-5306"><span class="linenos">5306</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;abs&quot;, 5).sql()</span>
+</span><span id="func-5307"><a href="#func-5307"><span class="linenos">5307</span></a><span class="sd"> &#39;ABS(5)&#39;</span>
+</span><span id="func-5308"><a href="#func-5308"><span class="linenos">5308</span></a>
+</span><span id="func-5309"><a href="#func-5309"><span class="linenos">5309</span></a><span class="sd"> &gt;&gt;&gt; func(&quot;cast&quot;, this=5, to=DataType.build(&quot;DOUBLE&quot;)).sql()</span>
+</span><span id="func-5310"><a href="#func-5310"><span class="linenos">5310</span></a><span class="sd"> &#39;CAST(5 AS DOUBLE)&#39;</span>
+</span><span id="func-5311"><a href="#func-5311"><span class="linenos">5311</span></a>
+</span><span id="func-5312"><a href="#func-5312"><span class="linenos">5312</span></a><span class="sd"> Args:</span>
+</span><span id="func-5313"><a href="#func-5313"><span class="linenos">5313</span></a><span class="sd"> name: the name of the function to build.</span>
+</span><span id="func-5314"><a href="#func-5314"><span class="linenos">5314</span></a><span class="sd"> args: the args used to instantiate the function of interest.</span>
+</span><span id="func-5315"><a href="#func-5315"><span class="linenos">5315</span></a><span class="sd"> dialect: the source dialect.</span>
+</span><span id="func-5316"><a href="#func-5316"><span class="linenos">5316</span></a><span class="sd"> kwargs: the kwargs used to instantiate the function of interest.</span>
+</span><span id="func-5317"><a href="#func-5317"><span class="linenos">5317</span></a>
+</span><span id="func-5318"><a href="#func-5318"><span class="linenos">5318</span></a><span class="sd"> Note:</span>
+</span><span id="func-5319"><a href="#func-5319"><span class="linenos">5319</span></a><span class="sd"> The arguments `args` and `kwargs` are mutually exclusive.</span>
+</span><span id="func-5320"><a href="#func-5320"><span class="linenos">5320</span></a>
+</span><span id="func-5321"><a href="#func-5321"><span class="linenos">5321</span></a><span class="sd"> Returns:</span>
+</span><span id="func-5322"><a href="#func-5322"><span class="linenos">5322</span></a><span class="sd"> An instance of the function of interest, or an anonymous function, if `name` doesn&#39;t</span>
+</span><span id="func-5323"><a href="#func-5323"><span class="linenos">5323</span></a><span class="sd"> correspond to an existing `sqlglot.expressions.Func` class.</span>
+</span><span id="func-5324"><a href="#func-5324"><span class="linenos">5324</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="func-5325"><a href="#func-5325"><span class="linenos">5325</span></a> <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">:</span>
+</span><span id="func-5326"><a href="#func-5326"><span class="linenos">5326</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Can&#39;t use both args and kwargs to instantiate a function.&quot;</span><span class="p">)</span>
+</span><span id="func-5327"><a href="#func-5327"><span class="linenos">5327</span></a>
+</span><span id="func-5328"><a href="#func-5328"><span class="linenos">5328</span></a> <span class="kn">from</span> <span class="nn">sqlglot.dialects.dialect</span> <span class="kn">import</span> <span class="n">Dialect</span>
+</span><span id="func-5329"><a href="#func-5329"><span class="linenos">5329</span></a>
+</span><span id="func-5330"><a href="#func-5330"><span class="linenos">5330</span></a> <span class="n">converted</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">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">maybe_parse</span><span class="p">(</span><span class="n">arg</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="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="func-5331"><a href="#func-5331"><span class="linenos">5331</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">maybe_parse</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="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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
+</span><span id="func-5332"><a href="#func-5332"><span class="linenos">5332</span></a>
+</span><span id="func-5333"><a href="#func-5333"><span class="linenos">5333</span></a> <span class="n">parser</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">parser</span><span class="p">()</span>
+</span><span id="func-5334"><a href="#func-5334"><span class="linenos">5334</span></a> <span class="n">from_args_list</span> <span class="o">=</span> <span class="n">parser</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">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="func-5335"><a href="#func-5335"><span class="linenos">5335</span></a>
+</span><span id="func-5336"><a href="#func-5336"><span class="linenos">5336</span></a> <span class="k">if</span> <span class="n">from_args_list</span><span class="p">:</span>
+</span><span id="func-5337"><a href="#func-5337"><span class="linenos">5337</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">from_args_list</span><span class="p">(</span><span class="n">converted</span><span class="p">)</span> <span class="k">if</span> <span class="n">converted</span> <span class="k">else</span> <span class="n">from_args_list</span><span class="o">.</span><span class="vm">__self__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="func-5338"><a href="#func-5338"><span class="linenos">5338</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="func-5339"><a href="#func-5339"><span class="linenos">5339</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span> <span class="ow">or</span> <span class="p">{</span><span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">converted</span><span class="p">}</span>
+</span><span id="func-5340"><a href="#func-5340"><span class="linenos">5340</span></a> <span class="n">function</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">name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="func-5341"><a href="#func-5341"><span class="linenos">5341</span></a>
+</span><span id="func-5342"><a href="#func-5342"><span class="linenos">5342</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">converted</span><span class="p">):</span>
+</span><span id="func-5343"><a href="#func-5343"><span class="linenos">5343</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
+</span><span id="func-5344"><a href="#func-5344"><span class="linenos">5344</span></a>
+</span><span id="func-5345"><a href="#func-5345"><span class="linenos">5345</span></a> <span class="k">return</span> <span class="n">function</span>
</span></pre></div>
@@ -46248,11 +48575,11 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#true"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="true-5202"><a href="#true-5202"><span class="linenos">5202</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">():</span>
-</span><span id="true-5203"><a href="#true-5203"><span class="linenos">5203</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="true-5204"><a href="#true-5204"><span class="linenos">5204</span></a><span class="sd"> Returns a true Boolean expression.</span>
-</span><span id="true-5205"><a href="#true-5205"><span class="linenos">5205</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="true-5206"><a href="#true-5206"><span class="linenos">5206</span></a> <span class="k">return</span> <span class="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="true-5348"><a href="#true-5348"><span class="linenos">5348</span></a><span class="k">def</span> <span class="nf">true</span><span class="p">():</span>
+</span><span id="true-5349"><a href="#true-5349"><span class="linenos">5349</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="true-5350"><a href="#true-5350"><span class="linenos">5350</span></a><span class="sd"> Returns a true Boolean expression.</span>
+</span><span id="true-5351"><a href="#true-5351"><span class="linenos">5351</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="true-5352"><a href="#true-5352"><span class="linenos">5352</span></a> <span class="k">return</span> <span class="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></pre></div>
@@ -46272,11 +48599,11 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#false"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="false-5209"><a href="#false-5209"><span class="linenos">5209</span></a><span class="k">def</span> <span class="nf">false</span><span class="p">():</span>
-</span><span id="false-5210"><a href="#false-5210"><span class="linenos">5210</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="false-5211"><a href="#false-5211"><span class="linenos">5211</span></a><span class="sd"> Returns a false Boolean expression.</span>
-</span><span id="false-5212"><a href="#false-5212"><span class="linenos">5212</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="false-5213"><a href="#false-5213"><span class="linenos">5213</span></a> <span class="k">return</span> <span class="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="false-5355"><a href="#false-5355"><span class="linenos">5355</span></a><span class="k">def</span> <span class="nf">false</span><span class="p">():</span>
+</span><span id="false-5356"><a href="#false-5356"><span class="linenos">5356</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="false-5357"><a href="#false-5357"><span class="linenos">5357</span></a><span class="sd"> Returns a false Boolean expression.</span>
+</span><span id="false-5358"><a href="#false-5358"><span class="linenos">5358</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="false-5359"><a href="#false-5359"><span class="linenos">5359</span></a> <span class="k">return</span> <span class="n">Boolean</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span></pre></div>
@@ -46296,11 +48623,11 @@ in order to help with type inference.</li>
</div>
<a class="headerlink" href="#null"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="null-5216"><a href="#null-5216"><span class="linenos">5216</span></a><span class="k">def</span> <span class="nf">null</span><span class="p">():</span>
-</span><span id="null-5217"><a href="#null-5217"><span class="linenos">5217</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="null-5218"><a href="#null-5218"><span class="linenos">5218</span></a><span class="sd"> Returns a Null expression.</span>
-</span><span id="null-5219"><a href="#null-5219"><span class="linenos">5219</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="null-5220"><a href="#null-5220"><span class="linenos">5220</span></a> <span class="k">return</span> <span class="n">Null</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="null-5362"><a href="#null-5362"><span class="linenos">5362</span></a><span class="k">def</span> <span class="nf">null</span><span class="p">():</span>
+</span><span id="null-5363"><a href="#null-5363"><span class="linenos">5363</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="null-5364"><a href="#null-5364"><span class="linenos">5364</span></a><span class="sd"> Returns a Null expression.</span>
+</span><span id="null-5365"><a href="#null-5365"><span class="linenos">5365</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="null-5366"><a href="#null-5366"><span class="linenos">5366</span></a> <span class="k">return</span> <span class="n">Null</span><span class="p">()</span>
</span></pre></div>
diff --git a/docs/sqlglot/generator.html b/docs/sqlglot/generator.html
index 8287b3f..652f77d 100644
--- a/docs/sqlglot/generator.html
+++ b/docs/sqlglot/generator.html
@@ -394,7 +394,7 @@
<a class="function" href="#Generator.partition_by_sql">partition_by_sql</a>
</li>
<li>
- <a class="function" href="#Generator.window_spec_sql">window_spec_sql</a>
+ <a class="function" href="#Generator.windowspec_sql">windowspec_sql</a>
</li>
<li>
<a class="function" href="#Generator.withingroup_sql">withingroup_sql</a>
@@ -421,6 +421,9 @@
<a class="function" href="#Generator.constraint_sql">constraint_sql</a>
</li>
<li>
+ <a class="function" href="#Generator.nextvaluefor_sql">nextvaluefor_sql</a>
+ </li>
+ <li>
<a class="function" href="#Generator.extract_sql">extract_sql</a>
</li>
<li>
@@ -1257,7 +1260,7 @@
</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">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-526"><a href="#L-526"><span class="linenos"> 526</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-527"><a href="#L-527"><span class="linenos"> 527</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><span id="L-527"><a href="#L-527"><span class="linenos"> 527</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-528"><a href="#L-528"><span class="linenos"> 528</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-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">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>
@@ -1848,1056 +1851,1069 @@
</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a>
</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</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">system_time</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">laterals</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</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">tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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 class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</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">if</span> <span class="bp">self</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="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="n">this</span> <span class="o">=</span> <span 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-1121"><a href="#L-1121"><span class="linenos">1121</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">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-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</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-1126"><a href="#L-1126"><span class="linenos">1126</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="o">.</span><span class="n">upper</span><span class="p">()</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-1127"><a href="#L-1127"><span class="linenos">1127</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-1128"><a href="#L-1128"><span class="linenos">1128</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-1129"><a href="#L-1129"><span class="linenos">1129</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-1130"><a href="#L-1130"><span class="linenos">1130</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-1131"><a href="#L-1131"><span class="linenos">1131</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-1132"><a href="#L-1132"><span class="linenos">1132</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-1133"><a href="#L-1133"><span class="linenos">1133</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 class="k">if</span> <span class="n">percent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</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-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rows</span><span class="si">}</span><span class="s2"> ROWS&quot;</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-1136"><a href="#L-1136"><span class="linenos">1136</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-1137"><a href="#L-1137"><span class="linenos">1137</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_PERCENT</span><span class="p">:</span>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</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"> PERCENT&quot;</span>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</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-1140"><a href="#L-1140"><span class="linenos">1140</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="n">seed_prefix</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-1141"><a href="#L-1141"><span class="linenos">1141</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 class="s2">&quot;TABLESAMPLE&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="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">method</span><span class="si">}</span><span class="s2">(</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">rows</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">)</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-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">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-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1146"><a href="#L-1146"><span class="linenos">1146</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-1147"><a href="#L-1147"><span class="linenos">1147</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-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unpivot&quot;</span><span class="p">)</span>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</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">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
-</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</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><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</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-1152"><a href="#L-1152"><span class="linenos">1152</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">direction</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-1153"><a href="#L-1153"><span class="linenos">1153</span></a>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</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-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="k">return</span> <span class="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-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">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-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1159"><a href="#L-1159"><span class="linenos">1159</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-1160"><a href="#L-1160"><span class="linenos">1160</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-1161"><a href="#L-1161"><span class="linenos">1161</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-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</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">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-1164"><a href="#L-1164"><span class="linenos">1164</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-1165"><a href="#L-1165"><span class="linenos">1165</span></a>
-</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</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-1167"><a href="#L-1167"><span class="linenos">1167</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-1168"><a href="#L-1168"><span class="linenos">1168</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-1169"><a href="#L-1169"><span class="linenos">1169</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-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</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-1172"><a href="#L-1172"><span class="linenos">1172</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-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="p">)</span>
-</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</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-1176"><a href="#L-1176"><span class="linenos">1176</span></a>
-</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</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-1178"><a href="#L-1178"><span class="linenos">1178</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-1179"><a href="#L-1179"><span class="linenos">1179</span></a>
-</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</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-1181"><a href="#L-1181"><span class="linenos">1181</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-1182"><a href="#L-1182"><span class="linenos">1182</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-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="k">return</span> <span class="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-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">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-1186"><a href="#L-1186"><span class="linenos">1186</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-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="k">return</span> <span class="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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</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-1190"><a href="#L-1190"><span class="linenos">1190</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-1191"><a href="#L-1191"><span class="linenos">1191</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-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</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-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <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="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-1197"><a href="#L-1197"><span class="linenos">1197</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-1198"><a href="#L-1198"><span class="linenos">1198</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-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</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-1201"><a href="#L-1201"><span class="linenos">1201</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-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="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-1204"><a href="#L-1204"><span class="linenos">1204</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-1205"><a href="#L-1205"><span class="linenos">1205</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-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</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-1208"><a href="#L-1208"><span class="linenos">1208</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-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="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">,</span> <span class="n">cube_sql</span><span class="p">,</span> <span class="n">rollup_sql</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-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</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">TableSample</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; AS &quot;</span>
+</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</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">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="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="n">this</span> <span class="o">=</span> <span 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-1123"><a href="#L-1123"><span class="linenos">1123</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-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</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-1128"><a href="#L-1128"><span class="linenos">1128</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="o">.</span><span class="n">upper</span><span class="p">()</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-1129"><a href="#L-1129"><span class="linenos">1129</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-1130"><a href="#L-1130"><span class="linenos">1130</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-1131"><a href="#L-1131"><span class="linenos">1131</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-1132"><a href="#L-1132"><span class="linenos">1132</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-1133"><a href="#L-1133"><span class="linenos">1133</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-1134"><a href="#L-1134"><span class="linenos">1134</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-1135"><a href="#L-1135"><span class="linenos">1135</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 class="k">if</span> <span class="n">percent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</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-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rows</span><span class="si">}</span><span class="s2"> ROWS&quot;</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-1138"><a href="#L-1138"><span class="linenos">1138</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-1139"><a href="#L-1139"><span class="linenos">1139</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_PERCENT</span><span class="p">:</span>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</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"> PERCENT&quot;</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</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-1142"><a href="#L-1142"><span class="linenos">1142</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="n">seed_prefix</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-1143"><a href="#L-1143"><span class="linenos">1143</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 class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">)</span>
+</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="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">method</span><span class="si">}</span><span class="s2">(</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">rows</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">)</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-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">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-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1148"><a href="#L-1148"><span class="linenos">1148</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-1149"><a href="#L-1149"><span class="linenos">1149</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-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unpivot&quot;</span><span class="p">)</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</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">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</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><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</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-1154"><a href="#L-1154"><span class="linenos">1154</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">direction</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-1155"><a href="#L-1155"><span class="linenos">1155</span></a>
+</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</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-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="k">return</span> <span class="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-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">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-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1161"><a href="#L-1161"><span class="linenos">1161</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-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</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-1164"><a href="#L-1164"><span class="linenos">1164</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-1165"><a href="#L-1165"><span class="linenos">1165</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">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-1166"><a href="#L-1166"><span class="linenos">1166</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-1167"><a href="#L-1167"><span class="linenos">1167</span></a>
+</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</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-1169"><a href="#L-1169"><span class="linenos">1169</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-1170"><a href="#L-1170"><span class="linenos">1170</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-1171"><a href="#L-1171"><span class="linenos">1171</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-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</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-1174"><a href="#L-1174"><span class="linenos">1174</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-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="k">else</span> <span class="n">values</span>
+</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="p">)</span>
+</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</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-1178"><a href="#L-1178"><span class="linenos">1178</span></a>
+</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</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-1180"><a href="#L-1180"><span class="linenos">1180</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-1181"><a href="#L-1181"><span class="linenos">1181</span></a>
+</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</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-1183"><a href="#L-1183"><span class="linenos">1183</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-1184"><a href="#L-1184"><span class="linenos">1184</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-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="k">return</span> <span class="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-1186"><a href="#L-1186"><span class="linenos">1186</span></a>
+</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</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-1188"><a href="#L-1188"><span class="linenos">1188</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-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="k">return</span> <span class="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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a>
+</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</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-1192"><a href="#L-1192"><span class="linenos">1192</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-1193"><a href="#L-1193"><span class="linenos">1193</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-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</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-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="p">)</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="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-1199"><a href="#L-1199"><span class="linenos">1199</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-1200"><a href="#L-1200"><span class="linenos">1200</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-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</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-1203"><a href="#L-1203"><span class="linenos">1203</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-1204"><a href="#L-1204"><span class="linenos">1204</span></a>
+</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</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-1206"><a href="#L-1206"><span class="linenos">1206</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-1207"><a href="#L-1207"><span class="linenos">1207</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-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</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-1210"><a href="#L-1210"><span class="linenos">1210</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-1211"><a href="#L-1211"><span class="linenos">1211</span></a>
-</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</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-1213"><a href="#L-1213"><span class="linenos">1213</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="s2">,&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">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-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">,</span> <span class="n">cube_sql</span><span class="p">,</span> <span class="n">rollup_sql</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><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</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-1215"><a href="#L-1215"><span class="linenos">1215</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="s2">,&quot;</span>
</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</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-1218"><a href="#L-1218"><span class="linenos">1218</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-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="k">return</span> <span class="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-1220"><a href="#L-1220"><span class="linenos">1220</span></a>
-</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</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-1222"><a href="#L-1222"><span class="linenos">1222</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><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a> <span class="n">op</span>
-</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</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-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="s2">&quot;NATURAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">)</span> <span class="k">else</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="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</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-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">,</span>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="p">)</span>
-</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="k">if</span> <span class="n">op</span>
-</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="p">)</span>
-</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="p">)</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</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-1236"><a href="#L-1236"><span class="linenos">1236</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-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">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-1239"><a href="#L-1239"><span class="linenos">1239</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-1240"><a href="#L-1240"><span class="linenos">1240</span></a>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</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-1243"><a href="#L-1243"><span class="linenos">1243</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-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</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-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</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-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="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-1250"><a href="#L-1250"><span class="linenos">1250</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-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;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">op_sql</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-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">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-1254"><a href="#L-1254"><span class="linenos">1254</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-1255"><a href="#L-1255"><span class="linenos">1255</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-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="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-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">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-1259"><a href="#L-1259"><span class="linenos">1259</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-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="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">Subquery</span><span class="p">):</span>
-</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;LATERAL </span><span class="si">{</span><span class="n">this</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">if</span> <span class="n">expression</span><span class="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-1265"><a href="#L-1265"><span class="linenos">1265</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-1266"><a href="#L-1266"><span class="linenos">1266</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-1267"><a href="#L-1267"><span class="linenos">1267</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-1268"><a href="#L-1268"><span class="linenos">1268</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-1269"><a href="#L-1269"><span class="linenos">1269</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-1270"><a href="#L-1270"><span class="linenos">1270</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-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="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-1273"><a href="#L-1273"><span class="linenos">1273</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-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </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-1275"><a href="#L-1275"><span class="linenos">1275</span></a>
-</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1278"><a href="#L-1278"><span class="linenos">1278</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;LIMIT&#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-1279"><a href="#L-1279"><span class="linenos">1279</span></a>
-</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</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-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1282"><a href="#L-1282"><span class="linenos">1282</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="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-1283"><a href="#L-1283"><span class="linenos">1283</span></a>
-</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</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-1285"><a href="#L-1285"><span class="linenos">1285</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-1286"><a href="#L-1286"><span class="linenos">1286</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-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1288"><a href="#L-1288"><span class="linenos">1288</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-1289"><a href="#L-1289"><span class="linenos">1289</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-1290"><a href="#L-1290"><span class="linenos">1290</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-1291"><a href="#L-1291"><span class="linenos">1291</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-1292"><a href="#L-1292"><span class="linenos">1292</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-1293"><a href="#L-1293"><span class="linenos">1293</span></a>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</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-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</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-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="p">)</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;SET</span><span class="si">{</span><span class="n">expressions</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">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-1301"><a href="#L-1301"><span class="linenos">1301</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-1302"><a href="#L-1302"><span class="linenos">1302</span></a>
-</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</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-1304"><a href="#L-1304"><span class="linenos">1304</span></a> <span class="k">if</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-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;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;SHARE&quot;</span>
-</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="k">return</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;FOR </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a>
-</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">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-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="k">return</span> <span class="s2">&quot;&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="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-1312"><a href="#L-1312"><span class="linenos">1312</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-1313"><a href="#L-1313"><span class="linenos">1313</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-1314"><a href="#L-1314"><span class="linenos">1314</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">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-1315"><a href="#L-1315"><span class="linenos">1315</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-1316"><a href="#L-1316"><span class="linenos">1316</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-1317"><a href="#L-1317"><span class="linenos">1317</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">quote_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">quote_end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="k">return</span> <span class="n">text</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">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-1321"><a href="#L-1321"><span class="linenos">1321</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-1322"><a href="#L-1322"><span class="linenos">1322</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-1323"><a href="#L-1323"><span class="linenos">1323</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-1324"><a href="#L-1324"><span class="linenos">1324</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-1325"><a href="#L-1325"><span class="linenos">1325</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-1326"><a href="#L-1326"><span class="linenos">1326</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-1327"><a href="#L-1327"><span class="linenos">1327</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-1328"><a href="#L-1328"><span class="linenos">1328</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-1329"><a href="#L-1329"><span class="linenos">1329</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-1330"><a href="#L-1330"><span class="linenos">1330</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-1331"><a href="#L-1331"><span class="linenos">1331</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-1332"><a href="#L-1332"><span class="linenos">1332</span></a>
-</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</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-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
-</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a>
-</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</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-1337"><a href="#L-1337"><span class="linenos">1337</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-1338"><a href="#L-1338"><span class="linenos">1338</span></a>
-</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</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-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1341"><a href="#L-1341"><span class="linenos">1341</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-1342"><a href="#L-1342"><span class="linenos">1342</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="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 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-1343"><a href="#L-1343"><span class="linenos">1343</span></a>
-</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</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-1345"><a href="#L-1345"><span class="linenos">1345</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-1346"><a href="#L-1346"><span class="linenos">1346</span></a>
-</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</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-1348"><a href="#L-1348"><span class="linenos">1348</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-1349"><a href="#L-1349"><span class="linenos">1349</span></a>
-</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</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-1351"><a href="#L-1351"><span class="linenos">1351</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-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">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-1354"><a href="#L-1354"><span class="linenos">1354</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-1355"><a href="#L-1355"><span class="linenos">1355</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-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="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-1358"><a href="#L-1358"><span class="linenos">1358</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-1359"><a href="#L-1359"><span class="linenos">1359</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a>
-</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</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="s2">&quot;&quot;</span>
-</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</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-1366"><a href="#L-1366"><span class="linenos">1366</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-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <span class="p">):</span>
-</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</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-1369"><a href="#L-1369"><span class="linenos">1369</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a> <span class="n">nulls_last</span>
-</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</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-1372"><a href="#L-1372"><span class="linenos">1372</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
-</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a> <span class="p">):</span>
-</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</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-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">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-1377"><a href="#L-1377"><span class="linenos">1377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a> <span class="s2">&quot;Sorting in an ORDER BY on NULLS FIRST/NULLS LAST is not supported by this dialect&quot;</span>
-</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a> <span class="p">)</span>
-</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a> <span class="k">return</span> <span class="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">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</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-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">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-1220"><a href="#L-1220"><span class="linenos">1220</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-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="k">return</span> <span class="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-1222"><a href="#L-1222"><span class="linenos">1222</span></a>
+</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</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-1224"><a href="#L-1224"><span class="linenos">1224</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><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a> <span class="n">op</span>
+</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</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-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="s2">&quot;NATURAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
+</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</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-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">,</span>
+</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="p">)</span>
+</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="p">)</span>
+</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="p">)</span>
+</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</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-1238"><a href="#L-1238"><span class="linenos">1238</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-1239"><a href="#L-1239"><span class="linenos">1239</span></a>
+</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</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-1241"><a href="#L-1241"><span class="linenos">1241</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-1242"><a href="#L-1242"><span class="linenos">1242</span></a>
+</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</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-1245"><a href="#L-1245"><span class="linenos">1245</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-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</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-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</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-1250"><a href="#L-1250"><span class="linenos">1250</span></a>
+</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</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-1252"><a href="#L-1252"><span class="linenos">1252</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-1253"><a href="#L-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="n">expression_sql</span><span class="si">}{</span><span class="n">op_sql</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-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">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-1256"><a href="#L-1256"><span class="linenos">1256</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-1257"><a href="#L-1257"><span class="linenos">1257</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-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">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-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">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-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1262"><a href="#L-1262"><span class="linenos">1262</span></a>
+</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</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">Subquery</span><span class="p">):</span>
+</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a>
+</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</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-1267"><a href="#L-1267"><span class="linenos">1267</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-1268"><a href="#L-1268"><span class="linenos">1268</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-1269"><a href="#L-1269"><span class="linenos">1269</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-1270"><a href="#L-1270"><span class="linenos">1270</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-1271"><a href="#L-1271"><span class="linenos">1271</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-1272"><a href="#L-1272"><span class="linenos">1272</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-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">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-1275"><a href="#L-1275"><span class="linenos">1275</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-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </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-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="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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-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">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;LIMIT&#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-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">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-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-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">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="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-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">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-1287"><a href="#L-1287"><span class="linenos">1287</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-1288"><a href="#L-1288"><span class="linenos">1288</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-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1290"><a href="#L-1290"><span class="linenos">1290</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-1291"><a href="#L-1291"><span class="linenos">1291</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-1292"><a href="#L-1292"><span class="linenos">1292</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-1293"><a href="#L-1293"><span class="linenos">1293</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-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;</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-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">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-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</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-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="p">)</span>
+</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SET</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a>
+</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</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-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;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-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">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-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="k">if</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-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;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;SHARE&quot;</span>
+</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a> <span class="k">return</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;FOR </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a>
+</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</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-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a>
+</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</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-1314"><a href="#L-1314"><span class="linenos">1314</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-1315"><a href="#L-1315"><span class="linenos">1315</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-1316"><a href="#L-1316"><span class="linenos">1316</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">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-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">pretty</span><span class="p">:</span>
+</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</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-1319"><a href="#L-1319"><span class="linenos">1319</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">quote_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">quote_end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a>
+</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</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-1323"><a href="#L-1323"><span class="linenos">1323</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-1324"><a href="#L-1324"><span class="linenos">1324</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-1325"><a href="#L-1325"><span class="linenos">1325</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-1326"><a href="#L-1326"><span class="linenos">1326</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-1327"><a href="#L-1327"><span class="linenos">1327</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-1328"><a href="#L-1328"><span class="linenos">1328</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-1329"><a href="#L-1329"><span class="linenos">1329</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-1330"><a href="#L-1330"><span class="linenos">1330</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-1331"><a href="#L-1331"><span class="linenos">1331</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-1332"><a href="#L-1332"><span class="linenos">1332</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-1333"><a href="#L-1333"><span class="linenos">1333</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-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">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-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a>
+</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</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-1339"><a href="#L-1339"><span class="linenos">1339</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-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">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-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1343"><a href="#L-1343"><span class="linenos">1343</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-1344"><a href="#L-1344"><span class="linenos">1344</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="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 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-1345"><a href="#L-1345"><span class="linenos">1345</span></a>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</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-1347"><a href="#L-1347"><span class="linenos">1347</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-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">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-1350"><a href="#L-1350"><span class="linenos">1350</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-1351"><a href="#L-1351"><span class="linenos">1351</span></a>
+</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</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-1353"><a href="#L-1353"><span class="linenos">1353</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-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">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-1356"><a href="#L-1356"><span class="linenos">1356</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-1357"><a href="#L-1357"><span class="linenos">1357</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-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">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-1360"><a href="#L-1360"><span class="linenos">1360</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-1361"><a href="#L-1361"><span class="linenos">1361</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a>
+</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</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="s2">&quot;&quot;</span>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&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">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</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-1369"><a href="#L-1369"><span class="linenos">1369</span></a> <span class="p">):</span>
+</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</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-1371"><a href="#L-1371"><span class="linenos">1371</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a> <span class="n">nulls_last</span>
+</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</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-1374"><a href="#L-1374"><span class="linenos">1374</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
+</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a> <span class="p">):</span>
+</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</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-1377"><a href="#L-1377"><span class="linenos">1377</span></a>
+</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</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-1379"><a href="#L-1379"><span class="linenos">1379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <span class="s2">&quot;Sorting in an ORDER BY on NULLS FIRST/NULLS LAST is not supported by this dialect&quot;</span>
+</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a> <span class="p">)</span>
+</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a>
-</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</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-1385"><a href="#L-1385"><span class="linenos">1385</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-1386"><a href="#L-1386"><span class="linenos">1386</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-1387"><a href="#L-1387"><span class="linenos">1387</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-1388"><a href="#L-1388"><span class="linenos">1388</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-1389"><a href="#L-1389"><span class="linenos">1389</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-1390"><a href="#L-1390"><span class="linenos">1390</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-1391"><a href="#L-1391"><span class="linenos">1391</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-1392"><a href="#L-1392"><span class="linenos">1392</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-1393"><a href="#L-1393"><span class="linenos">1393</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-1394"><a href="#L-1394"><span class="linenos">1394</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-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</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-1397"><a href="#L-1397"><span class="linenos">1397</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-1398"><a href="#L-1398"><span class="linenos">1398</span></a> <span class="p">]</span>
-</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</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-1400"><a href="#L-1400"><span class="linenos">1400</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-1401"><a href="#L-1401"><span class="linenos">1401</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-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="p">(</span>
-</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="p">)</span>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="p">)</span>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</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-1413"><a href="#L-1413"><span class="linenos">1413</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-1414"><a href="#L-1414"><span class="linenos">1414</span></a> <span class="k">return</span> <span class="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-1415"><a href="#L-1415"><span class="linenos">1415</span></a>
-</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</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-1417"><a href="#L-1417"><span class="linenos">1417</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-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">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-1420"><a href="#L-1420"><span class="linenos">1420</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">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-1421"><a href="#L-1421"><span class="linenos">1421</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-1422"><a href="#L-1422"><span class="linenos">1422</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">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a>
-</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</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-1384"><a href="#L-1384"><span class="linenos">1384</span></a> <span class="k">return</span> <span class="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">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a>
+</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</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-1387"><a href="#L-1387"><span class="linenos">1387</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-1388"><a href="#L-1388"><span class="linenos">1388</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-1389"><a href="#L-1389"><span class="linenos">1389</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-1390"><a href="#L-1390"><span class="linenos">1390</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-1391"><a href="#L-1391"><span class="linenos">1391</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-1392"><a href="#L-1392"><span class="linenos">1392</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-1393"><a href="#L-1393"><span class="linenos">1393</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-1394"><a href="#L-1394"><span class="linenos">1394</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-1395"><a href="#L-1395"><span class="linenos">1395</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-1396"><a href="#L-1396"><span class="linenos">1396</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-1397"><a href="#L-1397"><span class="linenos">1397</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</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-1399"><a href="#L-1399"><span class="linenos">1399</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-1400"><a href="#L-1400"><span class="linenos">1400</span></a> <span class="p">]</span>
+</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</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-1402"><a href="#L-1402"><span class="linenos">1402</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-1403"><a href="#L-1403"><span class="linenos">1403</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-1404"><a href="#L-1404"><span class="linenos">1404</span></a> <span class="p">(</span>
+</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="n">partition</span><span class="p">,</span>
+</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a> <span class="p">)</span>
+</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</span></a> <span class="p">)</span>
+</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</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-1415"><a href="#L-1415"><span class="linenos">1415</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-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <span class="k">return</span> <span class="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-1417"><a href="#L-1417"><span class="linenos">1417</span></a>
+</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</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-1419"><a href="#L-1419"><span class="linenos">1419</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-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">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-1422"><a href="#L-1422"><span class="linenos">1422</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">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-1423"><a href="#L-1423"><span class="linenos">1423</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-1424"><a href="#L-1424"><span class="linenos">1424</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">limit</span><span class="o">.</span><span class="n">expression</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">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1429"><a href="#L-1429"><span class="linenos">1429</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-1430"><a href="#L-1430"><span class="linenos">1430</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1431"><a href="#L-1431"><span class="linenos">1431</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-1432"><a href="#L-1432"><span class="linenos">1432</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-1433"><a href="#L-1433"><span class="linenos">1433</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-1434"><a href="#L-1434"><span class="linenos">1434</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-1435"><a href="#L-1435"><span class="linenos">1435</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-1436"><a href="#L-1436"><span class="linenos">1436</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-1437"><a href="#L-1437"><span class="linenos">1437</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</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-1439"><a href="#L-1439"><span class="linenos">1439</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-1440"><a href="#L-1440"><span class="linenos">1440</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-1441"><a href="#L-1441"><span class="linenos">1441</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-1442"><a href="#L-1442"><span class="linenos">1442</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-1443"><a href="#L-1443"><span class="linenos">1443</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-1444"><a href="#L-1444"><span class="linenos">1444</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;lock&quot;</span><span class="p">),</span>
-</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</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;sample&quot;</span><span class="p">),</span>
-</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</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-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="p">)</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="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-1450"><a href="#L-1450"><span class="linenos">1450</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-1451"><a href="#L-1451"><span class="linenos">1451</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 class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</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-1453"><a href="#L-1453"><span class="linenos">1453</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-1454"><a href="#L-1454"><span class="linenos">1454</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-1455"><a href="#L-1455"><span class="linenos">1455</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-1456"><a href="#L-1456"><span class="linenos">1456</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-1457"><a href="#L-1457"><span class="linenos">1457</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-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="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">kind</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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</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-1461"><a href="#L-1461"><span class="linenos">1461</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-1462"><a href="#L-1462"><span class="linenos">1462</span></a> <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="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-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">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-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1467"><a href="#L-1467"><span class="linenos">1467</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-1468"><a href="#L-1468"><span class="linenos">1468</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="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-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;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sql</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">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-1472"><a href="#L-1472"><span class="linenos">1472</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-1473"><a href="#L-1473"><span class="linenos">1473</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-1474"><a href="#L-1474"><span class="linenos">1474</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-1475"><a href="#L-1475"><span class="linenos">1475</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-1476"><a href="#L-1476"><span class="linenos">1476</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-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">structkwarg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</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="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-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">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-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="se">}}</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;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">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="k">return</span> <span class="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-1485"><a href="#L-1485"><span class="linenos">1485</span></a>
-</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</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-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1488"><a href="#L-1488"><span class="linenos">1488</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-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-1490"><a href="#L-1490"><span class="linenos">1490</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-1491"><a href="#L-1491"><span class="linenos">1491</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-1492"><a href="#L-1492"><span class="linenos">1492</span></a>
-</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</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-1494"><a href="#L-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="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-1495"><a href="#L-1495"><span class="linenos">1495</span></a>
-</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</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-1497"><a href="#L-1497"><span class="linenos">1497</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-1498"><a href="#L-1498"><span class="linenos">1498</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-1499"><a href="#L-1499"><span class="linenos">1499</span></a>
-</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</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-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a> <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-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <span class="bp">self</span><span 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><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <span class="p">)</span>
-</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a>
-</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</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-1426"><a href="#L-1426"><span class="linenos">1426</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-1427"><a href="#L-1427"><span class="linenos">1427</span></a>
+</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1431"><a href="#L-1431"><span class="linenos">1431</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-1432"><a href="#L-1432"><span class="linenos">1432</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1433"><a href="#L-1433"><span class="linenos">1433</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-1434"><a href="#L-1434"><span class="linenos">1434</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-1435"><a href="#L-1435"><span class="linenos">1435</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-1436"><a href="#L-1436"><span class="linenos">1436</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-1437"><a href="#L-1437"><span class="linenos">1437</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-1438"><a href="#L-1438"><span class="linenos">1438</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-1439"><a href="#L-1439"><span class="linenos">1439</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</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-1441"><a href="#L-1441"><span class="linenos">1441</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-1442"><a href="#L-1442"><span class="linenos">1442</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-1443"><a href="#L-1443"><span class="linenos">1443</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-1444"><a href="#L-1444"><span class="linenos">1444</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-1445"><a href="#L-1445"><span class="linenos">1445</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-1446"><a href="#L-1446"><span class="linenos">1446</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;lock&quot;</span><span class="p">),</span>
+</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</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;sample&quot;</span><span class="p">),</span>
+</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</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-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="p">)</span>
+</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a>
+</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</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-1452"><a href="#L-1452"><span class="linenos">1452</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-1453"><a href="#L-1453"><span class="linenos">1453</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 class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</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-1455"><a href="#L-1455"><span class="linenos">1455</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-1456"><a href="#L-1456"><span class="linenos">1456</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-1457"><a href="#L-1457"><span class="linenos">1457</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-1458"><a href="#L-1458"><span class="linenos">1458</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-1459"><a href="#L-1459"><span class="linenos">1459</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-1460"><a href="#L-1460"><span class="linenos">1460</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">kind</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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</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-1463"><a href="#L-1463"><span class="linenos">1463</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-1464"><a href="#L-1464"><span class="linenos">1464</span></a> <span class="p">)</span>
+</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</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-1466"><a href="#L-1466"><span class="linenos">1466</span></a>
+</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</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-1468"><a href="#L-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="L-1469"><a href="#L-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="L-1470"><a href="#L-1470"><span class="linenos">1470</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="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-1471"><a href="#L-1471"><span class="linenos">1471</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">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a>
+</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</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-1474"><a href="#L-1474"><span class="linenos">1474</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-1475"><a href="#L-1475"><span class="linenos">1475</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-1476"><a href="#L-1476"><span class="linenos">1476</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-1477"><a href="#L-1477"><span class="linenos">1477</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-1478"><a href="#L-1478"><span class="linenos">1478</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-1479"><a href="#L-1479"><span class="linenos">1479</span></a>
+</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a> <span class="k">def</span> <span class="nf">structkwarg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="k">return</span> <span class="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-1482"><a href="#L-1482"><span class="linenos">1482</span></a>
+</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</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-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="se">}}</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;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">this</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="k">return</span> <span class="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-1487"><a href="#L-1487"><span class="linenos">1487</span></a>
+</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</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-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1490"><a href="#L-1490"><span class="linenos">1490</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-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</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-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="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-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">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-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="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-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">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-1499"><a href="#L-1499"><span class="linenos">1499</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-1500"><a href="#L-1500"><span class="linenos">1500</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-1501"><a href="#L-1501"><span class="linenos">1501</span></a>
+</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</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-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a> <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-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a> <span class="bp">self</span><span 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><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</span></a> <span class="p">)</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">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-1510"><a href="#L-1510"><span class="linenos">1510</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-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;</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-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">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-1514"><a href="#L-1514"><span class="linenos">1514</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-1515"><a href="#L-1515"><span class="linenos">1515</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</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-1517"><a href="#L-1517"><span class="linenos">1517</span></a> <span class="p">)</span>
-</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</span></a>
-</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</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-1520"><a href="#L-1520"><span class="linenos">1520</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-1521"><a href="#L-1521"><span class="linenos">1521</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-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;UNION</span><span class="si">{</span><span class="n">kind</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">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-1525"><a href="#L-1525"><span class="linenos">1525</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-1526"><a href="#L-1526"><span class="linenos">1526</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-1527"><a href="#L-1527"><span class="linenos">1527</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">unnest_column_only</span><span class="p">:</span>
-</span><span id="L-1528"><a href="#L-1528"><span class="linenos">1528</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-1529"><a href="#L-1529"><span class="linenos">1529</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-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</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-1532"><a href="#L-1532"><span class="linenos">1532</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-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="s2">&quot; WITH ORDINALITY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</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-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; 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 class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</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">ordinality</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">offset</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a>
-</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</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-1539"><a href="#L-1539"><span class="linenos">1539</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-1540"><a href="#L-1540"><span class="linenos">1540</span></a> <span class="k">return</span> <span class="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-1541"><a href="#L-1541"><span class="linenos">1541</span></a>
-</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</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-1543"><a href="#L-1543"><span class="linenos">1543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1544"><a href="#L-1544"><span class="linenos">1544</span></a>
-</span><span id="L-1545"><a href="#L-1545"><span class="linenos">1545</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-1509"><a href="#L-1509"><span class="linenos">1509</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-1510"><a href="#L-1510"><span class="linenos">1510</span></a>
+</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</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-1512"><a href="#L-1512"><span class="linenos">1512</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-1513"><a href="#L-1513"><span class="linenos">1513</span></a> <span class="k">return</span> <span class="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-1514"><a href="#L-1514"><span class="linenos">1514</span></a>
+</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</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-1516"><a href="#L-1516"><span class="linenos">1516</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-1517"><a href="#L-1517"><span class="linenos">1517</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</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-1519"><a href="#L-1519"><span class="linenos">1519</span></a> <span class="p">)</span>
+</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a>
+</span><span id="L-1521"><a href="#L-1521"><span class="linenos">1521</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-1522"><a href="#L-1522"><span class="linenos">1522</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-1523"><a href="#L-1523"><span class="linenos">1523</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-1524"><a href="#L-1524"><span class="linenos">1524</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="s2">&quot;</span>
+</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</span></a>
+</span><span id="L-1526"><a href="#L-1526"><span class="linenos">1526</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-1527"><a href="#L-1527"><span class="linenos">1527</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-1528"><a href="#L-1528"><span class="linenos">1528</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-1529"><a href="#L-1529"><span class="linenos">1529</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">unnest_column_only</span><span class="p">:</span>
+</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</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-1531"><a href="#L-1531"><span class="linenos">1531</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-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</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-1534"><a href="#L-1534"><span class="linenos">1534</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-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="s2">&quot; WITH ORDINALITY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</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-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; 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 class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</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">ordinality</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">offset</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1539"><a href="#L-1539"><span class="linenos">1539</span></a>
+</span><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</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-1541"><a href="#L-1541"><span class="linenos">1541</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-1542"><a href="#L-1542"><span class="linenos">1542</span></a> <span class="k">return</span> <span class="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-1543"><a href="#L-1543"><span class="linenos">1543</span></a>
+</span><span id="L-1544"><a href="#L-1544"><span class="linenos">1544</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-1545"><a href="#L-1545"><span class="linenos">1545</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1546"><a href="#L-1546"><span class="linenos">1546</span></a>
-</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</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-1548"><a href="#L-1548"><span class="linenos">1548</span></a> <span class="n">order_sql</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-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">partition_sql</span> <span class="o">=</span> <span class="n">partition</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="ow">and</span> <span class="n">order</span> <span class="k">else</span> <span class="n">partition</span>
+</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</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-1548"><a href="#L-1548"><span class="linenos">1548</span></a>
+</span><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</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-1550"><a href="#L-1550"><span class="linenos">1550</span></a> <span class="n">order_sql</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-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">spec</span> <span class="o">=</span> <span class="n">expression</span><span class="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-1553"><a href="#L-1553"><span class="linenos">1553</span></a> <span class="n">spec_sql</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">window_spec_sql</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">spec</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><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="bp">self</span><span class="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-1556"><a href="#L-1556"><span class="linenos">1556</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="s1">&#39;OVER&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a>
-</span><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</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-1559"><a href="#L-1559"><span class="linenos">1559</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-1552"><a href="#L-1552"><span class="linenos">1552</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="n">partition</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="ow">and</span> <span class="n">order</span> <span class="k">else</span> <span class="n">partition</span>
+</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a>
+</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="n">expression</span><span class="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-1555"><a href="#L-1555"><span class="linenos">1555</span></a> <span class="n">spec_sql</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">windowspec_sql</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">spec</span> <span class="k">else</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">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-1558"><a href="#L-1558"><span class="linenos">1558</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-1559"><a href="#L-1559"><span class="linenos">1559</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-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="n">window_args</span> <span class="o">=</span> <span class="n">alias</span> <span class="o">+</span> <span class="n">partition_sql</span> <span class="o">+</span> <span class="n">order_sql</span> <span class="o">+</span> <span class="n">spec_sql</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">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">window_args</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-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">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-1566"><a href="#L-1566"><span class="linenos">1566</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-1567"><a href="#L-1567"><span class="linenos">1567</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-1561"><a href="#L-1561"><span class="linenos">1561</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-1562"><a href="#L-1562"><span class="linenos">1562</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1563"><a href="#L-1563"><span class="linenos">1563</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-1564"><a href="#L-1564"><span class="linenos">1564</span></a> <span class="n">first</span> <span class="o">=</span> <span class="n">first</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1565"><a href="#L-1565"><span class="linenos">1565</span></a>
+</span><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</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-1567"><a href="#L-1567"><span class="linenos">1567</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-1568"><a href="#L-1568"><span class="linenos">1568</span></a>
-</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="k">def</span> <span class="nf">window_spec_sql</span><span class="p">(</span><span class="bp">self</span><span 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-1570"><a href="#L-1570"><span class="linenos">1570</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-1571"><a href="#L-1571"><span class="linenos">1571</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-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</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-1574"><a href="#L-1574"><span class="linenos">1574</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="L-1575"><a href="#L-1575"><span class="linenos">1575</span></a> <span class="p">)</span>
-</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</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-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="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-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">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-1581"><a href="#L-1581"><span class="linenos">1581</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-1582"><a href="#L-1582"><span class="linenos">1582</span></a>
-</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</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-1584"><a href="#L-1584"><span class="linenos">1584</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1585"><a href="#L-1585"><span class="linenos">1585</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-1586"><a href="#L-1586"><span class="linenos">1586</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-1587"><a href="#L-1587"><span class="linenos">1587</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-1588"><a href="#L-1588"><span class="linenos">1588</span></a>
-</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</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-1590"><a href="#L-1590"><span class="linenos">1590</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">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">expressions</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">)</span>
-</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</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-1592"><a href="#L-1592"><span class="linenos">1592</span></a>
-</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="k">return</span> <span class="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-1594"><a href="#L-1594"><span class="linenos">1594</span></a>
-</span><span id="L-1595"><a href="#L-1595"><span class="linenos">1595</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-1596"><a href="#L-1596"><span class="linenos">1596</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-1597"><a href="#L-1597"><span class="linenos">1597</span></a>
-</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</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-1599"><a href="#L-1599"><span class="linenos">1599</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1600"><a href="#L-1600"><span class="linenos">1600</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-1601"><a href="#L-1601"><span class="linenos">1601</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-1602"><a href="#L-1602"><span class="linenos">1602</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-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">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-1605"><a href="#L-1605"><span class="linenos">1605</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-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">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-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="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-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">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-1612"><a href="#L-1612"><span class="linenos">1612</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-1613"><a href="#L-1613"><span class="linenos">1613</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-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="n">window_args</span> <span class="o">=</span> <span class="n">alias</span> <span class="o">+</span> <span class="n">first</span> <span class="o">+</span> <span class="n">partition_sql</span> <span class="o">+</span> <span class="n">order_sql</span> <span class="o">+</span> <span class="n">spec_sql</span>
+</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a>
+</span><span id="L-1571"><a href="#L-1571"><span class="linenos">1571</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">window_args</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-1572"><a href="#L-1572"><span class="linenos">1572</span></a>
+</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</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-1574"><a href="#L-1574"><span class="linenos">1574</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-1575"><a href="#L-1575"><span class="linenos">1575</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-1576"><a href="#L-1576"><span class="linenos">1576</span></a>
+</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</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-1578"><a href="#L-1578"><span class="linenos">1578</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-1579"><a href="#L-1579"><span class="linenos">1579</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-1580"><a href="#L-1580"><span class="linenos">1580</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</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-1582"><a href="#L-1582"><span class="linenos">1582</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</span></a> <span class="p">)</span>
+</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</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-1585"><a href="#L-1585"><span class="linenos">1585</span></a>
+</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</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-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1588"><a href="#L-1588"><span class="linenos">1588</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-1589"><a href="#L-1589"><span class="linenos">1589</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-1590"><a href="#L-1590"><span class="linenos">1590</span></a>
+</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</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-1592"><a href="#L-1592"><span class="linenos">1592</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1593"><a href="#L-1593"><span class="linenos">1593</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-1594"><a href="#L-1594"><span class="linenos">1594</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-1595"><a href="#L-1595"><span class="linenos">1595</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-1596"><a href="#L-1596"><span class="linenos">1596</span></a>
+</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</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-1598"><a href="#L-1598"><span class="linenos">1598</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">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">expressions</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">)</span>
+</span><span id="L-1599"><a href="#L-1599"><span class="linenos">1599</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-1600"><a href="#L-1600"><span class="linenos">1600</span></a>
+</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="k">return</span> <span class="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-1602"><a href="#L-1602"><span class="linenos">1602</span></a>
+</span><span id="L-1603"><a href="#L-1603"><span class="linenos">1603</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-1604"><a href="#L-1604"><span class="linenos">1604</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-1605"><a href="#L-1605"><span class="linenos">1605</span></a>
+</span><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</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-1607"><a href="#L-1607"><span class="linenos">1607</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1608"><a href="#L-1608"><span class="linenos">1608</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-1609"><a href="#L-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">wrap</span><span class="p">(</span><span class="n">this</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;ANY </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="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-1613"><a href="#L-1613"><span class="linenos">1613</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-1614"><a href="#L-1614"><span class="linenos">1614</span></a>
-</span><span id="L-1615"><a href="#L-1615"><span class="linenos">1615</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-1616"><a href="#L-1616"><span class="linenos">1616</span></a>
-</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</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-1619"><a href="#L-1619"><span class="linenos">1619</span></a>
-</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</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-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="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-1623"><a href="#L-1623"><span class="linenos">1623</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-1615"><a href="#L-1615"><span class="linenos">1615</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-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1617"><a href="#L-1617"><span class="linenos">1617</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-1618"><a href="#L-1618"><span class="linenos">1618</span></a>
+</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</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-1620"><a href="#L-1620"><span class="linenos">1620</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-1621"><a href="#L-1621"><span class="linenos">1621</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-1622"><a href="#L-1622"><span class="linenos">1622</span></a>
+</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</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-1624"><a href="#L-1624"><span class="linenos">1624</span></a>
-</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</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-1626"><a href="#L-1626"><span class="linenos">1626</span></a>
-</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</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-1628"><a href="#L-1628"><span class="linenos">1628</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1629"><a href="#L-1629"><span class="linenos">1629</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-1630"><a href="#L-1630"><span class="linenos">1630</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-1631"><a href="#L-1631"><span class="linenos">1631</span></a>
-</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</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-1633"><a href="#L-1633"><span class="linenos">1633</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1634"><a href="#L-1634"><span class="linenos">1634</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-1635"><a href="#L-1635"><span class="linenos">1635</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-1636"><a href="#L-1636"><span class="linenos">1636</span></a>
-</span><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</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-1638"><a href="#L-1638"><span class="linenos">1638</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-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</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-1627"><a href="#L-1627"><span class="linenos">1627</span></a>
+</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</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-1629"><a href="#L-1629"><span class="linenos">1629</span></a>
+</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</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-1631"><a href="#L-1631"><span class="linenos">1631</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-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">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-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">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-1636"><a href="#L-1636"><span class="linenos">1636</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1637"><a href="#L-1637"><span class="linenos">1637</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-1638"><a href="#L-1638"><span class="linenos">1638</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-1639"><a href="#L-1639"><span class="linenos">1639</span></a>
-</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</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-1641"><a href="#L-1641"><span class="linenos">1641</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-1642"><a href="#L-1642"><span class="linenos">1642</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-1643"><a href="#L-1643"><span class="linenos">1643</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-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</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-1646"><a href="#L-1646"><span class="linenos">1646</span></a>
-</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</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-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</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="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</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-1651"><a href="#L-1651"><span class="linenos">1651</span></a>
-</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</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-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1654"><a href="#L-1654"><span class="linenos">1654</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-1655"><a href="#L-1655"><span class="linenos">1655</span></a>
-</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</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-1657"><a href="#L-1657"><span class="linenos">1657</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-1658"><a href="#L-1658"><span class="linenos">1658</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-1659"><a href="#L-1659"><span class="linenos">1659</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-1660"><a href="#L-1660"><span class="linenos">1660</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-1661"><a href="#L-1661"><span class="linenos">1661</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-1662"><a href="#L-1662"><span class="linenos">1662</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-1663"><a href="#L-1663"><span class="linenos">1663</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-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;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-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="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-1667"><a href="#L-1667"><span class="linenos">1667</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-1668"><a href="#L-1668"><span class="linenos">1668</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-1669"><a href="#L-1669"><span class="linenos">1669</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-1670"><a href="#L-1670"><span class="linenos">1670</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-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">def</span> <span class="nf">unique_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unique</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</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;expressions&quot;</span><span class="p">)</span>
-</span><span id="L-1674"><a href="#L-1674"><span class="linenos">1674</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">columns</span><span class="si">}</span><span class="s2">)&quot;</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">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-1677"><a href="#L-1677"><span class="linenos">1677</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><span id="L-1678"><a href="#L-1678"><span class="linenos">1678</span></a> <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="o">.</span><span class="n">copy</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-1679"><a href="#L-1679"><span class="linenos">1679</span></a> <span class="p">)</span>
-</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a>
-</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</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-1682"><a href="#L-1682"><span class="linenos">1682</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-1683"><a href="#L-1683"><span class="linenos">1683</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-1684"><a href="#L-1684"><span class="linenos">1684</span></a> <span class="k">return</span> <span class="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-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">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-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="k">return</span> <span class="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-1640"><a href="#L-1640"><span class="linenos">1640</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-1641"><a href="#L-1641"><span class="linenos">1641</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-1642"><a href="#L-1642"><span class="linenos">1642</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-1643"><a href="#L-1643"><span class="linenos">1643</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-1644"><a href="#L-1644"><span class="linenos">1644</span></a>
+</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</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-1646"><a href="#L-1646"><span class="linenos">1646</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1647"><a href="#L-1647"><span class="linenos">1647</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-1648"><a href="#L-1648"><span class="linenos">1648</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-1649"><a href="#L-1649"><span class="linenos">1649</span></a>
+</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</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-1651"><a href="#L-1651"><span class="linenos">1651</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-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">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-1654"><a href="#L-1654"><span class="linenos">1654</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-1655"><a href="#L-1655"><span class="linenos">1655</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-1656"><a href="#L-1656"><span class="linenos">1656</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-1657"><a href="#L-1657"><span class="linenos">1657</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1658"><a href="#L-1658"><span class="linenos">1658</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-1659"><a href="#L-1659"><span class="linenos">1659</span></a>
+</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</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-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</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="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</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-1664"><a href="#L-1664"><span class="linenos">1664</span></a>
+</span><span id="L-1665"><a href="#L-1665"><span class="linenos">1665</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-1666"><a href="#L-1666"><span class="linenos">1666</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1667"><a href="#L-1667"><span class="linenos">1667</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-1668"><a href="#L-1668"><span class="linenos">1668</span></a>
+</span><span id="L-1669"><a href="#L-1669"><span class="linenos">1669</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-1670"><a href="#L-1670"><span class="linenos">1670</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-1671"><a href="#L-1671"><span class="linenos">1671</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-1672"><a href="#L-1672"><span class="linenos">1672</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-1673"><a href="#L-1673"><span class="linenos">1673</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-1674"><a href="#L-1674"><span class="linenos">1674</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-1675"><a href="#L-1675"><span class="linenos">1675</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-1676"><a href="#L-1676"><span class="linenos">1676</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-1677"><a href="#L-1677"><span class="linenos">1677</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-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">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-1680"><a href="#L-1680"><span class="linenos">1680</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-1681"><a href="#L-1681"><span class="linenos">1681</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-1682"><a href="#L-1682"><span class="linenos">1682</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-1683"><a href="#L-1683"><span class="linenos">1683</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-1684"><a href="#L-1684"><span class="linenos">1684</span></a>
+</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a> <span class="k">def</span> <span class="nf">unique_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unique</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</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;expressions&quot;</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="sa">f</span><span class="s2">&quot;UNIQUE (</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a>
-</span><span id="L-1689"><a href="#L-1689"><span class="linenos">1689</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="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</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-1691"><a href="#L-1691"><span class="linenos">1691</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-1692"><a href="#L-1692"><span class="linenos">1692</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-1693"><a href="#L-1693"><span class="linenos">1693</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-1694"><a href="#L-1694"><span class="linenos">1694</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-1695"><a href="#L-1695"><span class="linenos">1695</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-1696"><a href="#L-1696"><span class="linenos">1696</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</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-1699"><a href="#L-1699"><span class="linenos">1699</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-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="n">format_json</span> <span class="o">=</span> <span class="s2">&quot; FORMAT 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;format_json&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="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-1702"><a href="#L-1702"><span class="linenos">1702</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-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;JSON_OBJECT(</span><span class="si">{</span><span class="n">expressions</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">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</span></a>
-</span><span id="L-1705"><a href="#L-1705"><span class="linenos">1705</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-1706"><a href="#L-1706"><span class="linenos">1706</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-1707"><a href="#L-1707"><span class="linenos">1707</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-1708"><a href="#L-1708"><span class="linenos">1708</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-1709"><a href="#L-1709"><span class="linenos">1709</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-1710"><a href="#L-1710"><span class="linenos">1710</span></a>
-</span><span id="L-1711"><a href="#L-1711"><span class="linenos">1711</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</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-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</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-1715"><a href="#L-1715"><span class="linenos">1715</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</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-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</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-1719"><a href="#L-1719"><span class="linenos">1719</span></a>
-</span><span id="L-1720"><a href="#L-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span 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-1721"><a href="#L-1721"><span class="linenos">1721</span></a>
-</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</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-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;(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-1724"><a href="#L-1724"><span class="linenos">1724</span></a>
-</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</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-1726"><a href="#L-1726"><span class="linenos">1726</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-1727"><a href="#L-1727"><span class="linenos">1727</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-1728"><a href="#L-1728"><span class="linenos">1728</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="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span>
-</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</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-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="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-1732"><a href="#L-1732"><span class="linenos">1732</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-1733"><a href="#L-1733"><span class="linenos">1733</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><span id="L-1689"><a href="#L-1689"><span class="linenos">1689</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-1690"><a href="#L-1690"><span class="linenos">1690</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><span id="L-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <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="o">.</span><span class="n">copy</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-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <span class="p">)</span>
+</span><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</span></a>
+</span><span id="L-1694"><a href="#L-1694"><span class="linenos">1694</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-1695"><a href="#L-1695"><span class="linenos">1695</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-1696"><a href="#L-1696"><span class="linenos">1696</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-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="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-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">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-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="k">return</span> <span class="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-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">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="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">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-1704"><a href="#L-1704"><span class="linenos">1704</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-1705"><a href="#L-1705"><span class="linenos">1705</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-1706"><a href="#L-1706"><span class="linenos">1706</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-1707"><a href="#L-1707"><span class="linenos">1707</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-1708"><a href="#L-1708"><span class="linenos">1708</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-1709"><a href="#L-1709"><span class="linenos">1709</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1710"><a href="#L-1710"><span class="linenos">1710</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1711"><a href="#L-1711"><span class="linenos">1711</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-1712"><a href="#L-1712"><span class="linenos">1712</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-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <span class="n">format_json</span> <span class="o">=</span> <span class="s2">&quot; FORMAT 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;format_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</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-1715"><a href="#L-1715"><span class="linenos">1715</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-1716"><a href="#L-1716"><span class="linenos">1716</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;JSON_OBJECT(</span><span class="si">{</span><span class="n">expressions</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">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</span></a>
+</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</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-1719"><a href="#L-1719"><span class="linenos">1719</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-1720"><a href="#L-1720"><span class="linenos">1720</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-1721"><a href="#L-1721"><span class="linenos">1721</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-1722"><a href="#L-1722"><span class="linenos">1722</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-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="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</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-1726"><a href="#L-1726"><span class="linenos">1726</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-1727"><a href="#L-1727"><span class="linenos">1727</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-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</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-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</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-1732"><a href="#L-1732"><span class="linenos">1732</span></a>
+</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</span></a> <span class="k">return</span> <span class="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-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1736"><a href="#L-1736"><span class="linenos">1736</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</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-1738"><a href="#L-1738"><span class="linenos">1738</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-1739"><a href="#L-1739"><span class="linenos">1739</span></a>
-</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</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-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">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-1743"><a href="#L-1743"><span class="linenos">1743</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-1744"><a href="#L-1744"><span class="linenos">1744</span></a>
-</span><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</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-1746"><a href="#L-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">sql</span><span class="p">(</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-1747"><a href="#L-1747"><span class="linenos">1747</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-1748"><a href="#L-1748"><span class="linenos">1748</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-1749"><a href="#L-1749"><span class="linenos">1749</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-1750"><a href="#L-1750"><span class="linenos">1750</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-1751"><a href="#L-1751"><span class="linenos">1751</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-1735"><a href="#L-1735"><span class="linenos">1735</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-1736"><a href="#L-1736"><span class="linenos">1736</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-1737"><a href="#L-1737"><span class="linenos">1737</span></a>
+</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</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-1739"><a href="#L-1739"><span class="linenos">1739</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-1740"><a href="#L-1740"><span class="linenos">1740</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-1741"><a href="#L-1741"><span class="linenos">1741</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="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span>
+</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</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-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">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-1745"><a href="#L-1745"><span class="linenos">1745</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-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;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><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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1749"><a href="#L-1749"><span class="linenos">1749</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</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-1751"><a href="#L-1751"><span class="linenos">1751</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-1752"><a href="#L-1752"><span class="linenos">1752</span></a>
-</span><span id="L-1753"><a href="#L-1753"><span class="linenos">1753</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-1754"><a href="#L-1754"><span class="linenos">1754</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-1755"><a href="#L-1755"><span class="linenos">1755</span></a>
-</span><span id="L-1756"><a href="#L-1756"><span class="linenos">1756</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-1757"><a href="#L-1757"><span class="linenos">1757</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-1758"><a href="#L-1758"><span class="linenos">1758</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-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</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-1761"><a href="#L-1761"><span class="linenos">1761</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-1762"><a href="#L-1762"><span class="linenos">1762</span></a>
-</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</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-1764"><a href="#L-1764"><span class="linenos">1764</span></a>
-</span><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</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-1766"><a href="#L-1766"><span class="linenos">1766</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-1767"><a href="#L-1767"><span class="linenos">1767</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-1768"><a href="#L-1768"><span class="linenos">1768</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-1769"><a href="#L-1769"><span class="linenos">1769</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-1770"><a href="#L-1770"><span class="linenos">1770</span></a>
-</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</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-1772"><a href="#L-1772"><span class="linenos">1772</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-1773"><a href="#L-1773"><span class="linenos">1773</span></a>
-</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</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-1775"><a href="#L-1775"><span class="linenos">1775</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-1776"><a href="#L-1776"><span class="linenos">1776</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-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="k">return</span> <span class="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-1778"><a href="#L-1778"><span class="linenos">1778</span></a>
-</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</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-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="k">return</span> <span class="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-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">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-1783"><a href="#L-1783"><span class="linenos">1783</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1784"><a href="#L-1784"><span class="linenos">1784</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-1785"><a href="#L-1785"><span class="linenos">1785</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-1753"><a href="#L-1753"><span class="linenos">1753</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-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">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-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;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-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">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-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1760"><a href="#L-1760"><span class="linenos">1760</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-1761"><a href="#L-1761"><span class="linenos">1761</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-1762"><a href="#L-1762"><span class="linenos">1762</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-1763"><a href="#L-1763"><span class="linenos">1763</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-1764"><a href="#L-1764"><span class="linenos">1764</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-1765"><a href="#L-1765"><span class="linenos">1765</span></a>
+</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</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-1767"><a href="#L-1767"><span class="linenos">1767</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-1768"><a href="#L-1768"><span class="linenos">1768</span></a>
+</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</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-1770"><a href="#L-1770"><span class="linenos">1770</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-1771"><a href="#L-1771"><span class="linenos">1771</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-1772"><a href="#L-1772"><span class="linenos">1772</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1773"><a href="#L-1773"><span class="linenos">1773</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-1774"><a href="#L-1774"><span class="linenos">1774</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-1775"><a href="#L-1775"><span class="linenos">1775</span></a>
+</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</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-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">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-1779"><a href="#L-1779"><span class="linenos">1779</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-1780"><a href="#L-1780"><span class="linenos">1780</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-1781"><a href="#L-1781"><span class="linenos">1781</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-1782"><a href="#L-1782"><span class="linenos">1782</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-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">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-1785"><a href="#L-1785"><span class="linenos">1785</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-1786"><a href="#L-1786"><span class="linenos">1786</span></a>
-</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</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-1788"><a href="#L-1788"><span class="linenos">1788</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-1789"><a href="#L-1789"><span class="linenos">1789</span></a>
-</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</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-1791"><a href="#L-1791"><span class="linenos">1791</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-1792"><a href="#L-1792"><span class="linenos">1792</span></a>
-</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</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-1794"><a href="#L-1794"><span class="linenos">1794</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-1795"><a href="#L-1795"><span class="linenos">1795</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-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">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="L-1798"><a href="#L-1798"><span class="linenos">1798</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="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-1799"><a href="#L-1799"><span class="linenos">1799</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-1800"><a href="#L-1800"><span class="linenos">1800</span></a> <span class="p">)</span>
-</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="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-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">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-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">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-1806"><a href="#L-1806"><span class="linenos">1806</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-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="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-1809"><a href="#L-1809"><span class="linenos">1809</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-1810"><a href="#L-1810"><span class="linenos">1810</span></a>
-</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</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-1812"><a href="#L-1812"><span class="linenos">1812</span></a> <span class="k">return</span> <span class="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-1813"><a href="#L-1813"><span class="linenos">1813</span></a>
-</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</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-1815"><a href="#L-1815"><span class="linenos">1815</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-1816"><a href="#L-1816"><span class="linenos">1816</span></a>
-</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</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-1818"><a href="#L-1818"><span class="linenos">1818</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-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">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-1821"><a href="#L-1821"><span class="linenos">1821</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-1822"><a href="#L-1822"><span class="linenos">1822</span></a>
-</span><span id="L-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a>
-</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</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-1827"><a href="#L-1827"><span class="linenos">1827</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-1828"><a href="#L-1828"><span class="linenos">1828</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-1787"><a href="#L-1787"><span class="linenos">1787</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-1788"><a href="#L-1788"><span class="linenos">1788</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-1789"><a href="#L-1789"><span class="linenos">1789</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-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="k">return</span> <span class="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-1791"><a href="#L-1791"><span class="linenos">1791</span></a>
+</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</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-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-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">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-1796"><a href="#L-1796"><span class="linenos">1796</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1797"><a href="#L-1797"><span class="linenos">1797</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-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="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-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">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-1801"><a href="#L-1801"><span class="linenos">1801</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-1802"><a href="#L-1802"><span class="linenos">1802</span></a>
+</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</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-1804"><a href="#L-1804"><span class="linenos">1804</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-1805"><a href="#L-1805"><span class="linenos">1805</span></a>
+</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</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-1807"><a href="#L-1807"><span class="linenos">1807</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-1808"><a href="#L-1808"><span class="linenos">1808</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-1809"><a href="#L-1809"><span class="linenos">1809</span></a>
+</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</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="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-1812"><a href="#L-1812"><span class="linenos">1812</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-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="p">)</span>
+</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a>
+</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</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-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">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-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">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-1819"><a href="#L-1819"><span class="linenos">1819</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-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">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-1822"><a href="#L-1822"><span class="linenos">1822</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-1823"><a href="#L-1823"><span class="linenos">1823</span></a>
+</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</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-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="k">return</span> <span class="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-1826"><a href="#L-1826"><span class="linenos">1826</span></a>
+</span><span id="L-1827"><a href="#L-1827"><span class="linenos">1827</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-1828"><a href="#L-1828"><span class="linenos">1828</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-1829"><a href="#L-1829"><span class="linenos">1829</span></a>
-</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</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-1831"><a href="#L-1831"><span class="linenos">1831</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-1830"><a href="#L-1830"><span class="linenos">1830</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-1831"><a href="#L-1831"><span class="linenos">1831</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-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">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-1834"><a href="#L-1834"><span class="linenos">1834</span></a> <span class="k">return</span> <span class="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="o">.</span><span class="n">upper</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-1833"><a href="#L-1833"><span class="linenos">1833</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-1834"><a href="#L-1834"><span class="linenos">1834</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-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="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-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1838"><a href="#L-1838"><span class="linenos">1838</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-1839"><a href="#L-1839"><span class="linenos">1839</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-1840"><a href="#L-1840"><span class="linenos">1840</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-1841"><a href="#L-1841"><span class="linenos">1841</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-1836"><a href="#L-1836"><span class="linenos">1836</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a>
+</span><span id="L-1839"><a href="#L-1839"><span class="linenos">1839</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-1840"><a href="#L-1840"><span class="linenos">1840</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-1841"><a href="#L-1841"><span class="linenos">1841</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-1842"><a href="#L-1842"><span class="linenos">1842</span></a>
-</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</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-1844"><a href="#L-1844"><span class="linenos">1844</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
+</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</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-1844"><a href="#L-1844"><span class="linenos">1844</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-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">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-1847"><a href="#L-1847"><span class="linenos">1847</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-1848"><a href="#L-1848"><span class="linenos">1848</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-1849"><a href="#L-1849"><span class="linenos">1849</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-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;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-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">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-1854"><a href="#L-1854"><span class="linenos">1854</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-1855"><a href="#L-1855"><span class="linenos">1855</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-1856"><a href="#L-1856"><span class="linenos">1856</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-1857"><a href="#L-1857"><span class="linenos">1857</span></a>
-</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</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-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-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="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-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="L-1863"><a href="#L-1863"><span class="linenos">1863</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-1864"><a href="#L-1864"><span class="linenos">1864</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-1865"><a href="#L-1865"><span class="linenos">1865</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-1866"><a href="#L-1866"><span class="linenos">1866</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-1867"><a href="#L-1867"><span class="linenos">1867</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"> 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-1868"><a href="#L-1868"><span class="linenos">1868</span></a>
-</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</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-1870"><a href="#L-1870"><span class="linenos">1870</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1871"><a href="#L-1871"><span class="linenos">1871</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-1872"><a href="#L-1872"><span class="linenos">1872</span></a>
-</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</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-1874"><a href="#L-1874"><span class="linenos">1874</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-1875"><a href="#L-1875"><span class="linenos">1875</span></a>
-</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;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-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">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-1879"><a href="#L-1879"><span class="linenos">1879</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1880"><a href="#L-1880"><span class="linenos">1880</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-1846"><a href="#L-1846"><span class="linenos">1846</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-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="k">return</span> <span class="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="o">.</span><span class="n">upper</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-1848"><a href="#L-1848"><span class="linenos">1848</span></a>
+</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</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-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1851"><a href="#L-1851"><span class="linenos">1851</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-1852"><a href="#L-1852"><span class="linenos">1852</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-1853"><a href="#L-1853"><span class="linenos">1853</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-1854"><a href="#L-1854"><span class="linenos">1854</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-1855"><a href="#L-1855"><span class="linenos">1855</span></a>
+</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</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-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
+</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a>
+</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</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-1860"><a href="#L-1860"><span class="linenos">1860</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-1861"><a href="#L-1861"><span class="linenos">1861</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-1862"><a href="#L-1862"><span class="linenos">1862</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-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">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-1865"><a href="#L-1865"><span class="linenos">1865</span></a>
+</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</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-1867"><a href="#L-1867"><span class="linenos">1867</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-1868"><a href="#L-1868"><span class="linenos">1868</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-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;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</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">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-1872"><a href="#L-1872"><span class="linenos">1872</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-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="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-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</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-1877"><a href="#L-1877"><span class="linenos">1877</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-1878"><a href="#L-1878"><span class="linenos">1878</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-1879"><a href="#L-1879"><span class="linenos">1879</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-1880"><a href="#L-1880"><span class="linenos">1880</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"> 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-1881"><a href="#L-1881"><span class="linenos">1881</span></a>
-</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</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-1883"><a href="#L-1883"><span class="linenos">1883</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-1884"><a href="#L-1884"><span class="linenos">1884</span></a>
-</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">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-1886"><a href="#L-1886"><span class="linenos">1886</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 COLUMN &quot;</span><span class="p">)</span>
-</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</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-1888"><a href="#L-1888"><span class="linenos">1888</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-1889"><a href="#L-1889"><span class="linenos">1889</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-1890"><a href="#L-1890"><span class="linenos">1890</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-1891"><a href="#L-1891"><span class="linenos">1891</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</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><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a>
-</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</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-1895"><a href="#L-1895"><span class="linenos">1895</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="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-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">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-1898"><a href="#L-1898"><span class="linenos">1898</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-1899"><a href="#L-1899"><span class="linenos">1899</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-1900"><a href="#L-1900"><span class="linenos">1900</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-1901"><a href="#L-1901"><span class="linenos">1901</span></a>
-</span><span id="L-1902"><a href="#L-1902"><span class="linenos">1902</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-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1904"><a href="#L-1904"><span class="linenos">1904</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-1905"><a href="#L-1905"><span class="linenos">1905</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-1882"><a href="#L-1882"><span class="linenos">1882</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-1883"><a href="#L-1883"><span class="linenos">1883</span></a> <span class="k">if</span> <span class="n">default</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="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-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="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-1887"><a href="#L-1887"><span class="linenos">1887</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-1888"><a href="#L-1888"><span class="linenos">1888</span></a>
+</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</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-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">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-1892"><a href="#L-1892"><span class="linenos">1892</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1893"><a href="#L-1893"><span class="linenos">1893</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-1894"><a href="#L-1894"><span class="linenos">1894</span></a>
+</span><span id="L-1895"><a href="#L-1895"><span class="linenos">1895</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-1896"><a href="#L-1896"><span class="linenos">1896</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-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">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-1899"><a href="#L-1899"><span class="linenos">1899</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 COLUMN &quot;</span><span class="p">)</span>
+</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</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-1901"><a href="#L-1901"><span class="linenos">1901</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-1902"><a href="#L-1902"><span class="linenos">1902</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-1903"><a href="#L-1903"><span class="linenos">1903</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-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</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><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a>
-</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</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-1908"><a href="#L-1908"><span class="linenos">1908</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-1909"><a href="#L-1909"><span class="linenos">1909</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-1910"><a href="#L-1910"><span class="linenos">1910</span></a>
-</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</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-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">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-1914"><a href="#L-1914"><span class="linenos">1914</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-1915"><a href="#L-1915"><span class="linenos">1915</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-1916"><a href="#L-1916"><span class="linenos">1916</span></a>
-</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</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-1918"><a href="#L-1918"><span class="linenos">1918</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-1919"><a href="#L-1919"><span class="linenos">1919</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-1920"><a href="#L-1920"><span class="linenos">1920</span></a>
-</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</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-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="k">return</span> <span class="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"> IGNORE NULLS&quot;</span>
+</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</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-1908"><a href="#L-1908"><span class="linenos">1908</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="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-1909"><a href="#L-1909"><span class="linenos">1909</span></a>
+</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</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-1911"><a href="#L-1911"><span class="linenos">1911</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-1912"><a href="#L-1912"><span class="linenos">1912</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-1913"><a href="#L-1913"><span class="linenos">1913</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-1914"><a href="#L-1914"><span class="linenos">1914</span></a>
+</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</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-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-1917"><a href="#L-1917"><span class="linenos">1917</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-1918"><a href="#L-1918"><span class="linenos">1918</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-1919"><a href="#L-1919"><span class="linenos">1919</span></a>
+</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</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-1921"><a href="#L-1921"><span class="linenos">1921</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-1922"><a href="#L-1922"><span class="linenos">1922</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-1923"><a href="#L-1923"><span class="linenos">1923</span></a>
-</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</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-1925"><a href="#L-1925"><span class="linenos">1925</span></a> <span class="k">return</span> <span class="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"> RESPECT NULLS&quot;</span>
-</span><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a>
-</span><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</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-1928"><a href="#L-1928"><span class="linenos">1928</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-1929"><a href="#L-1929"><span class="linenos">1929</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
-</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</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-1931"><a href="#L-1931"><span class="linenos">1931</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-1932"><a href="#L-1932"><span class="linenos">1932</span></a> <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><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</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-1936"><a href="#L-1936"><span class="linenos">1936</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-1937"><a href="#L-1937"><span class="linenos">1937</span></a>
-</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</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-1939"><a href="#L-1939"><span class="linenos">1939</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-1940"><a href="#L-1940"><span class="linenos">1940</span></a>
-</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</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-1942"><a href="#L-1942"><span class="linenos">1942</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-1943"><a href="#L-1943"><span class="linenos">1943</span></a>
-</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</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-1945"><a href="#L-1945"><span class="linenos">1945</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-1946"><a href="#L-1946"><span class="linenos">1946</span></a>
-</span><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</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-1948"><a href="#L-1948"><span class="linenos">1948</span></a> <span class="k">return</span> <span class="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-1949"><a href="#L-1949"><span class="linenos">1949</span></a>
-</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</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-1951"><a href="#L-1951"><span class="linenos">1951</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-1952"><a href="#L-1952"><span class="linenos">1952</span></a>
-</span><span id="L-1953"><a href="#L-1953"><span class="linenos">1953</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-1954"><a href="#L-1954"><span class="linenos">1954</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-1955"><a href="#L-1955"><span class="linenos">1955</span></a>
-</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</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-1957"><a href="#L-1957"><span class="linenos">1957</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-1958"><a href="#L-1958"><span class="linenos">1958</span></a>
-</span><span id="L-1959"><a href="#L-1959"><span class="linenos">1959</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-1960"><a href="#L-1960"><span class="linenos">1960</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-1961"><a href="#L-1961"><span class="linenos">1961</span></a>
-</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</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-1963"><a href="#L-1963"><span class="linenos">1963</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-1964"><a href="#L-1964"><span class="linenos">1964</span></a>
-</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</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-1966"><a href="#L-1966"><span class="linenos">1966</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-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="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-1969"><a href="#L-1969"><span class="linenos">1969</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-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">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-1972"><a href="#L-1972"><span class="linenos">1972</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-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="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-1975"><a href="#L-1975"><span class="linenos">1975</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-1976"><a href="#L-1976"><span class="linenos">1976</span></a>
-</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</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-1978"><a href="#L-1978"><span class="linenos">1978</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-1979"><a href="#L-1979"><span class="linenos">1979</span></a>
-</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</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-1981"><a href="#L-1981"><span class="linenos">1981</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-1982"><a href="#L-1982"><span class="linenos">1982</span></a>
-</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</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-1984"><a href="#L-1984"><span class="linenos">1984</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-1985"><a href="#L-1985"><span class="linenos">1985</span></a>
-</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</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-1987"><a href="#L-1987"><span class="linenos">1987</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-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="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-1990"><a href="#L-1990"><span class="linenos">1990</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-1991"><a href="#L-1991"><span class="linenos">1991</span></a>
-</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</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-1993"><a href="#L-1993"><span class="linenos">1993</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-1994"><a href="#L-1994"><span class="linenos">1994</span></a>
-</span><span id="L-1995"><a href="#L-1995"><span class="linenos">1995</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-1996"><a href="#L-1996"><span class="linenos">1996</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-1997"><a href="#L-1997"><span class="linenos">1997</span></a>
-</span><span id="L-1998"><a href="#L-1998"><span class="linenos">1998</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-1999"><a href="#L-1999"><span class="linenos">1999</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-2000"><a href="#L-2000"><span class="linenos">2000</span></a>
-</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</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-2002"><a href="#L-2002"><span class="linenos">2002</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-2003"><a href="#L-2003"><span class="linenos">2003</span></a>
-</span><span id="L-2004"><a href="#L-2004"><span class="linenos">2004</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-2005"><a href="#L-2005"><span class="linenos">2005</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-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="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-2008"><a href="#L-2008"><span class="linenos">2008</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-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">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-2011"><a href="#L-2011"><span class="linenos">2011</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-2012"><a href="#L-2012"><span class="linenos">2012</span></a>
-</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</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-2014"><a href="#L-2014"><span class="linenos">2014</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRY_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</span></a>
-</span><span id="L-2016"><a href="#L-2016"><span class="linenos">2016</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-2017"><a href="#L-2017"><span class="linenos">2017</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-2018"><a href="#L-2018"><span class="linenos">2018</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-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2020"><a href="#L-2020"><span class="linenos">2020</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-2021"><a href="#L-2021"><span class="linenos">2021</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-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;</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-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">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-1927"><a href="#L-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">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-1928"><a href="#L-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="s2">&quot;&quot;</span>
+</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</span></a>
+</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</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-1931"><a href="#L-1931"><span class="linenos">1931</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-1932"><a href="#L-1932"><span class="linenos">1932</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-1933"><a href="#L-1933"><span class="linenos">1933</span></a>
+</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</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-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="k">return</span> <span class="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"> IGNORE NULLS&quot;</span>
+</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a>
+</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</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-1938"><a href="#L-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> RESPECT NULLS&quot;</span>
+</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a>
+</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</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-1941"><a href="#L-1941"><span class="linenos">1941</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-1942"><a href="#L-1942"><span class="linenos">1942</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
+</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</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-1944"><a href="#L-1944"><span class="linenos">1944</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-1945"><a href="#L-1945"><span class="linenos">1945</span></a> <span class="p">)</span>
+</span><span id="L-1946"><a href="#L-1946"><span class="linenos">1946</span></a> <span class="p">)</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">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-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">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-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">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-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">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-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">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-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">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-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">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-1958"><a href="#L-1958"><span class="linenos">1958</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-1959"><a href="#L-1959"><span class="linenos">1959</span></a>
+</span><span id="L-1960"><a href="#L-1960"><span class="linenos">1960</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-1961"><a href="#L-1961"><span class="linenos">1961</span></a> <span class="k">return</span> <span class="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-1962"><a href="#L-1962"><span class="linenos">1962</span></a>
+</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</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-1964"><a href="#L-1964"><span class="linenos">1964</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-1965"><a href="#L-1965"><span class="linenos">1965</span></a>
+</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</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-1967"><a href="#L-1967"><span class="linenos">1967</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-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="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-1970"><a href="#L-1970"><span class="linenos">1970</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-1971"><a href="#L-1971"><span class="linenos">1971</span></a>
+</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</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-1973"><a href="#L-1973"><span class="linenos">1973</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-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">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-1976"><a href="#L-1976"><span class="linenos">1976</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-1977"><a href="#L-1977"><span class="linenos">1977</span></a>
+</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</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-1979"><a href="#L-1979"><span class="linenos">1979</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-1980"><a href="#L-1980"><span class="linenos">1980</span></a>
+</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</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-1982"><a href="#L-1982"><span class="linenos">1982</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-1983"><a href="#L-1983"><span class="linenos">1983</span></a>
+</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</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-1985"><a href="#L-1985"><span class="linenos">1985</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-1986"><a href="#L-1986"><span class="linenos">1986</span></a>
+</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</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-1988"><a href="#L-1988"><span class="linenos">1988</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-1989"><a href="#L-1989"><span class="linenos">1989</span></a>
+</span><span id="L-1990"><a href="#L-1990"><span class="linenos">1990</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-1991"><a href="#L-1991"><span class="linenos">1991</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-1992"><a href="#L-1992"><span class="linenos">1992</span></a>
+</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</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-1994"><a href="#L-1994"><span class="linenos">1994</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-1995"><a href="#L-1995"><span class="linenos">1995</span></a>
+</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</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-1997"><a href="#L-1997"><span class="linenos">1997</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-1998"><a href="#L-1998"><span class="linenos">1998</span></a>
+</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</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-2000"><a href="#L-2000"><span class="linenos">2000</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-2001"><a href="#L-2001"><span class="linenos">2001</span></a>
+</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</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-2003"><a href="#L-2003"><span class="linenos">2003</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-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">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-2006"><a href="#L-2006"><span class="linenos">2006</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-2007"><a href="#L-2007"><span class="linenos">2007</span></a>
+</span><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</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-2009"><a href="#L-2009"><span class="linenos">2009</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-2010"><a href="#L-2010"><span class="linenos">2010</span></a>
+</span><span id="L-2011"><a href="#L-2011"><span class="linenos">2011</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-2012"><a href="#L-2012"><span class="linenos">2012</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-2013"><a href="#L-2013"><span class="linenos">2013</span></a>
+</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</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-2015"><a href="#L-2015"><span class="linenos">2015</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-2016"><a href="#L-2016"><span class="linenos">2016</span></a>
+</span><span id="L-2017"><a href="#L-2017"><span class="linenos">2017</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-2018"><a href="#L-2018"><span class="linenos">2018</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-2019"><a href="#L-2019"><span class="linenos">2019</span></a>
+</span><span id="L-2020"><a href="#L-2020"><span class="linenos">2020</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-2021"><a href="#L-2021"><span class="linenos">2021</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-2022"><a href="#L-2022"><span class="linenos">2022</span></a>
-</span><span id="L-2023"><a href="#L-2023"><span class="linenos">2023</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-2024"><a href="#L-2024"><span class="linenos">2024</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-2025"><a href="#L-2025"><span class="linenos">2025</span></a> <span class="k">return</span> <span class="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-2026"><a href="#L-2026"><span class="linenos">2026</span></a>
-</span><span id="L-2027"><a href="#L-2027"><span class="linenos">2027</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-2028"><a href="#L-2028"><span class="linenos">2028</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a> <span class="k">for</span> <span class="n">arg_value</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">values</span><span class="p">():</span>
-</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</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-2031"><a href="#L-2031"><span class="linenos">2031</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-2032"><a href="#L-2032"><span class="linenos">2032</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-2033"><a href="#L-2033"><span class="linenos">2033</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</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-2023"><a href="#L-2023"><span class="linenos">2023</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-2024"><a href="#L-2024"><span class="linenos">2024</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-2025"><a href="#L-2025"><span class="linenos">2025</span></a>
+</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</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-2027"><a href="#L-2027"><span class="linenos">2027</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRY_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a>
+</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</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-2030"><a href="#L-2030"><span class="linenos">2030</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-2031"><a href="#L-2031"><span class="linenos">2031</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-2032"><a href="#L-2032"><span class="linenos">2032</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2033"><a href="#L-2033"><span class="linenos">2033</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-2034"><a href="#L-2034"><span class="linenos">2034</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-2035"><a href="#L-2035"><span class="linenos">2035</span></a>
-</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</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">sql_name</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a>
-</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</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">name</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="n">t</span><span class="o">.</span><span 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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a> <span class="k">return</span> <span class="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="s2">(</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="s2">)&quot;</span>
-</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a>
-</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</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-2042"><a href="#L-2042"><span class="linenos">2042</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-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">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-2044"><a href="#L-2044"><span class="linenos">2044</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="sa">f</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-2045"><a href="#L-2045"><span class="linenos">2045</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-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="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-2048"><a href="#L-2048"><span class="linenos">2048</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-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="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-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <span class="k">return</span> <span class="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_trie</span><span class="p">)</span>
-</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a>
-</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="L-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</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-2056"><a href="#L-2056"><span class="linenos">2056</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-2057"><a href="#L-2057"><span class="linenos">2057</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">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-2058"><a href="#L-2058"><span class="linenos">2058</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-2059"><a href="#L-2059"><span class="linenos">2059</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-2060"><a href="#L-2060"><span class="linenos">2060</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-2061"><a href="#L-2061"><span class="linenos">2061</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-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-2063"><a href="#L-2063"><span class="linenos">2063</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-2064"><a href="#L-2064"><span class="linenos">2064</span></a>
-</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</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-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a>
-</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</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="bp">self</span><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-2070"><a href="#L-2070"><span class="linenos">2070</span></a>
-</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</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-2072"><a href="#L-2072"><span class="linenos">2072</span></a>
-</span><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</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-2074"><a href="#L-2074"><span class="linenos">2074</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-2075"><a href="#L-2075"><span class="linenos">2075</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-2076"><a href="#L-2076"><span class="linenos">2076</span></a>
-</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</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-2079"><a href="#L-2079"><span class="linenos">2079</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-2080"><a href="#L-2080"><span class="linenos">2080</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-2081"><a href="#L-2081"><span class="linenos">2081</span></a>
-</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</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-2083"><a href="#L-2083"><span class="linenos">2083</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-2084"><a href="#L-2084"><span class="linenos">2084</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-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</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-2087"><a href="#L-2087"><span class="linenos">2087</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-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <span class="p">)</span>
-</span><span id="L-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</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-2091"><a href="#L-2091"><span class="linenos">2091</span></a>
-</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</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-2093"><a href="#L-2093"><span class="linenos">2093</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="kc">False</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-2036"><a href="#L-2036"><span class="linenos">2036</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-2037"><a href="#L-2037"><span class="linenos">2037</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-2038"><a href="#L-2038"><span class="linenos">2038</span></a> <span class="k">return</span> <span class="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-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="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-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a> <span class="k">for</span> <span class="n">arg_value</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">values</span><span class="p">():</span>
+</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</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-2044"><a href="#L-2044"><span class="linenos">2044</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-2045"><a href="#L-2045"><span class="linenos">2045</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-2046"><a href="#L-2046"><span class="linenos">2046</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2047"><a href="#L-2047"><span class="linenos">2047</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-2048"><a href="#L-2048"><span class="linenos">2048</span></a>
+</span><span id="L-2049"><a href="#L-2049"><span class="linenos">2049</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">sql_name</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a>
+</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</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">name</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="n">t</span><span class="o">.</span><span 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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="k">return</span> <span class="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="s2">(</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="s2">)&quot;</span>
+</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a>
+</span><span id="L-2054"><a href="#L-2054"><span class="linenos">2054</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-2055"><a href="#L-2055"><span class="linenos">2055</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-2056"><a href="#L-2056"><span class="linenos">2056</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-2057"><a href="#L-2057"><span class="linenos">2057</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="sa">f</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-2058"><a href="#L-2058"><span class="linenos">2058</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-2059"><a href="#L-2059"><span class="linenos">2059</span></a>
+</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</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-2061"><a href="#L-2061"><span class="linenos">2061</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-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">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-2064"><a href="#L-2064"><span class="linenos">2064</span></a> <span class="k">return</span> <span class="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_trie</span><span class="p">)</span>
+</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a>
+</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="k">def</span> <span class="nf">expressions</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="p">,</span>
+</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</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-2069"><a href="#L-2069"><span class="linenos">2069</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-2070"><a href="#L-2070"><span class="linenos">2070</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">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-2071"><a href="#L-2071"><span class="linenos">2071</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-2072"><a href="#L-2072"><span class="linenos">2072</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-2073"><a href="#L-2073"><span class="linenos">2073</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-2074"><a href="#L-2074"><span class="linenos">2074</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-2075"><a href="#L-2075"><span class="linenos">2075</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-2076"><a href="#L-2076"><span class="linenos">2076</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-2077"><a href="#L-2077"><span class="linenos">2077</span></a>
+</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</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-2079"><a href="#L-2079"><span class="linenos">2079</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2080"><a href="#L-2080"><span class="linenos">2080</span></a>
+</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="k">if</span> <span class="n">flat</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="n">sep</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-2083"><a href="#L-2083"><span class="linenos">2083</span></a>
+</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</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-2085"><a href="#L-2085"><span class="linenos">2085</span></a>
+</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</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-2087"><a href="#L-2087"><span class="linenos">2087</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-2088"><a href="#L-2088"><span class="linenos">2088</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-2089"><a href="#L-2089"><span class="linenos">2089</span></a>
+</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</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-2092"><a href="#L-2092"><span class="linenos">2092</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-2093"><a href="#L-2093"><span class="linenos">2093</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-2094"><a href="#L-2094"><span class="linenos">2094</span></a>
-</span><span id="L-2095"><a href="#L-2095"><span class="linenos">2095</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-2096"><a href="#L-2096"><span class="linenos">2096</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-2097"><a href="#L-2097"><span class="linenos">2097</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-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</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-2100"><a href="#L-2100"><span class="linenos">2100</span></a> <span class="k">return</span> <span class="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-2101"><a href="#L-2101"><span class="linenos">2101</span></a>
-</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</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-2103"><a href="#L-2103"><span class="linenos">2103</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-2104"><a href="#L-2104"><span class="linenos">2104</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-2105"><a href="#L-2105"><span class="linenos">2105</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-2106"><a href="#L-2106"><span class="linenos">2106</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-2095"><a href="#L-2095"><span class="linenos">2095</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-2096"><a href="#L-2096"><span class="linenos">2096</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-2097"><a href="#L-2097"><span class="linenos">2097</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-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</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-2100"><a href="#L-2100"><span class="linenos">2100</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-2101"><a href="#L-2101"><span class="linenos">2101</span></a> <span class="p">)</span>
+</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</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-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="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-2106"><a href="#L-2106"><span class="linenos">2106</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="kc">False</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-2107"><a href="#L-2107"><span class="linenos">2107</span></a>
-</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</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">Expression</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-2109"><a href="#L-2109"><span class="linenos">2109</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2110"><a href="#L-2110"><span class="linenos">2110</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-2111"><a href="#L-2111"><span class="linenos">2111</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-2112"><a href="#L-2112"><span class="linenos">2112</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-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="p">)</span>
+</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</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-2109"><a href="#L-2109"><span class="linenos">2109</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-2110"><a href="#L-2110"><span class="linenos">2110</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-2111"><a href="#L-2111"><span class="linenos">2111</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</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-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="k">return</span> <span class="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-2114"><a href="#L-2114"><span class="linenos">2114</span></a>
-</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</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-2116"><a href="#L-2116"><span class="linenos">2116</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-2117"><a href="#L-2117"><span class="linenos">2117</span></a>
-</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</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-2119"><a href="#L-2119"><span class="linenos">2119</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-2115"><a href="#L-2115"><span class="linenos">2115</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-2116"><a href="#L-2116"><span class="linenos">2116</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-2117"><a href="#L-2117"><span class="linenos">2117</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-2118"><a href="#L-2118"><span class="linenos">2118</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-2119"><a href="#L-2119"><span class="linenos">2119</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-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="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-2121"><a href="#L-2121"><span class="linenos">2121</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">Expression</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-2122"><a href="#L-2122"><span class="linenos">2122</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2123"><a href="#L-2123"><span class="linenos">2123</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-2124"><a href="#L-2124"><span class="linenos">2124</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</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-2123"><a href="#L-2123"><span class="linenos">2123</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-2124"><a href="#L-2124"><span class="linenos">2124</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-2125"><a href="#L-2125"><span class="linenos">2125</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-2126"><a href="#L-2126"><span class="linenos">2126</span></a> <span class="p">)</span>
-</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</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-2128"><a href="#L-2128"><span class="linenos">2128</span></a>
-</span><span id="L-2129"><a href="#L-2129"><span class="linenos">2129</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-2130"><a href="#L-2130"><span class="linenos">2130</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2131"><a href="#L-2131"><span class="linenos">2131</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-2132"><a href="#L-2132"><span class="linenos">2132</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-2127"><a href="#L-2127"><span class="linenos">2127</span></a>
+</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</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-2129"><a href="#L-2129"><span class="linenos">2129</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-2130"><a href="#L-2130"><span class="linenos">2130</span></a>
+</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</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-2132"><a href="#L-2132"><span class="linenos">2132</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-2133"><a href="#L-2133"><span class="linenos">2133</span></a>
-</span><span id="L-2134"><a href="#L-2134"><span class="linenos">2134</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-2135"><a href="#L-2135"><span class="linenos">2135</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-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="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-2138"><a href="#L-2138"><span class="linenos">2138</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-2139"><a href="#L-2139"><span class="linenos">2139</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-2140"><a href="#L-2140"><span class="linenos">2140</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-2141"><a href="#L-2141"><span class="linenos">2141</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-2142"><a href="#L-2142"><span class="linenos">2142</span></a>
-</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</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-2144"><a href="#L-2144"><span class="linenos">2144</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-2145"><a href="#L-2145"><span class="linenos">2145</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-2146"><a href="#L-2146"><span class="linenos">2146</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-2147"><a href="#L-2147"><span class="linenos">2147</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-2148"><a href="#L-2148"><span class="linenos">2148</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-2149"><a href="#L-2149"><span class="linenos">2149</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-2150"><a href="#L-2150"><span class="linenos">2150</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-2151"><a href="#L-2151"><span class="linenos">2151</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2152"><a href="#L-2152"><span class="linenos">2152</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-2153"><a href="#L-2153"><span class="linenos">2153</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</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-2155"><a href="#L-2155"><span class="linenos">2155</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-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">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-2158"><a href="#L-2158"><span class="linenos">2158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2159"><a href="#L-2159"><span class="linenos">2159</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-2160"><a href="#L-2160"><span class="linenos">2160</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-2161"><a href="#L-2161"><span class="linenos">2161</span></a> <span class="k">return</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="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="bp">self</span><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="s1">&#39; &#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</span></a>
-</span><span id="L-2163"><a href="#L-2163"><span class="linenos">2163</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-2164"><a href="#L-2164"><span class="linenos">2164</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-2165"><a href="#L-2165"><span class="linenos">2165</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-2166"><a href="#L-2166"><span class="linenos">2166</span></a>
-</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</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-2134"><a href="#L-2134"><span class="linenos">2134</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-2135"><a href="#L-2135"><span class="linenos">2135</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2136"><a href="#L-2136"><span class="linenos">2136</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-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</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-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="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-2141"><a href="#L-2141"><span class="linenos">2141</span></a>
+</span><span id="L-2142"><a href="#L-2142"><span class="linenos">2142</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-2143"><a href="#L-2143"><span class="linenos">2143</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2144"><a href="#L-2144"><span class="linenos">2144</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-2145"><a href="#L-2145"><span class="linenos">2145</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-2146"><a href="#L-2146"><span class="linenos">2146</span></a>
+</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</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-2148"><a href="#L-2148"><span class="linenos">2148</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-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">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-2151"><a href="#L-2151"><span class="linenos">2151</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-2152"><a href="#L-2152"><span class="linenos">2152</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-2153"><a href="#L-2153"><span class="linenos">2153</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-2154"><a href="#L-2154"><span class="linenos">2154</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-2155"><a href="#L-2155"><span class="linenos">2155</span></a>
+</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</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-2157"><a href="#L-2157"><span class="linenos">2157</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-2158"><a href="#L-2158"><span class="linenos">2158</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-2159"><a href="#L-2159"><span class="linenos">2159</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-2160"><a href="#L-2160"><span class="linenos">2160</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-2161"><a href="#L-2161"><span class="linenos">2161</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-2162"><a href="#L-2162"><span class="linenos">2162</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-2163"><a href="#L-2163"><span class="linenos">2163</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-2164"><a href="#L-2164"><span class="linenos">2164</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2165"><a href="#L-2165"><span class="linenos">2165</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-2166"><a href="#L-2166"><span class="linenos">2166</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</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-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;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-2169"><a href="#L-2169"><span class="linenos">2169</span></a>
+</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</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-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</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-2172"><a href="#L-2172"><span class="linenos">2172</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-2173"><a href="#L-2173"><span class="linenos">2173</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-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <span class="k">return</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="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="bp">self</span><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="s1">&#39; &#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</span></a>
+</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</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-2177"><a href="#L-2177"><span class="linenos">2177</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-2178"><a href="#L-2178"><span class="linenos">2178</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-2179"><a href="#L-2179"><span class="linenos">2179</span></a>
+</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</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>
@@ -3425,7 +3441,7 @@
</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="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-527"><a href="#Generator-527"><span class="linenos"> 527</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-528"><a href="#Generator-528"><span class="linenos"> 528</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><span id="Generator-528"><a href="#Generator-528"><span class="linenos"> 528</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-529"><a href="#Generator-529"><span class="linenos"> 529</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-530"><a href="#Generator-530"><span class="linenos"> 530</span></a>
</span><span id="Generator-531"><a href="#Generator-531"><span class="linenos"> 531</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>
@@ -4016,1056 +4032,1069 @@
</span><span id="Generator-1116"><a href="#Generator-1116"><span class="linenos">1116</span></a>
</span><span id="Generator-1117"><a href="#Generator-1117"><span class="linenos">1117</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">system_time</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">laterals</span><span class="si">}{</span><span class="n">joins</span><span class="si">}{</span><span class="n">pivots</span><span class="si">}</span><span class="s2">&quot;</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">tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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 class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</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">if</span> <span class="bp">self</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="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="Generator-1121"><a href="#Generator-1121"><span class="linenos">1121</span></a> <span class="n">this</span> <span class="o">=</span> <span 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="Generator-1122"><a href="#Generator-1122"><span class="linenos">1122</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">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-1123"><a href="#Generator-1123"><span class="linenos">1123</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1124"><a href="#Generator-1124"><span class="linenos">1124</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1125"><a href="#Generator-1125"><span class="linenos">1125</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1126"><a href="#Generator-1126"><span class="linenos">1126</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-1127"><a href="#Generator-1127"><span class="linenos">1127</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="o">.</span><span class="n">upper</span><span class="p">()</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-1128"><a href="#Generator-1128"><span class="linenos">1128</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-1129"><a href="#Generator-1129"><span class="linenos">1129</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-1130"><a href="#Generator-1130"><span class="linenos">1130</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-1131"><a href="#Generator-1131"><span class="linenos">1131</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-1132"><a href="#Generator-1132"><span class="linenos">1132</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-1133"><a href="#Generator-1133"><span class="linenos">1133</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-1134"><a href="#Generator-1134"><span class="linenos">1134</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 class="k">if</span> <span class="n">percent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1135"><a href="#Generator-1135"><span class="linenos">1135</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-1136"><a href="#Generator-1136"><span class="linenos">1136</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rows</span><span class="si">}</span><span class="s2"> ROWS&quot;</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-1137"><a href="#Generator-1137"><span class="linenos">1137</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-1138"><a href="#Generator-1138"><span class="linenos">1138</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_PERCENT</span><span class="p">:</span>
-</span><span id="Generator-1139"><a href="#Generator-1139"><span class="linenos">1139</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"> PERCENT&quot;</span>
-</span><span id="Generator-1140"><a href="#Generator-1140"><span class="linenos">1140</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-1141"><a href="#Generator-1141"><span class="linenos">1141</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="n">seed_prefix</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-1142"><a href="#Generator-1142"><span class="linenos">1142</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 class="s2">&quot;TABLESAMPLE&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="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">method</span><span class="si">}</span><span class="s2">(</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">rows</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">)</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-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">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-1146"><a href="#Generator-1146"><span class="linenos">1146</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1147"><a href="#Generator-1147"><span class="linenos">1147</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-1148"><a href="#Generator-1148"><span class="linenos">1148</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-1149"><a href="#Generator-1149"><span class="linenos">1149</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unpivot&quot;</span><span class="p">)</span>
-</span><span id="Generator-1150"><a href="#Generator-1150"><span class="linenos">1150</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">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
-</span><span id="Generator-1151"><a href="#Generator-1151"><span class="linenos">1151</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><span id="Generator-1152"><a href="#Generator-1152"><span class="linenos">1152</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-1153"><a href="#Generator-1153"><span class="linenos">1153</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">direction</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-1154"><a href="#Generator-1154"><span class="linenos">1154</span></a>
-</span><span id="Generator-1155"><a href="#Generator-1155"><span class="linenos">1155</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-1156"><a href="#Generator-1156"><span class="linenos">1156</span></a> <span class="k">return</span> <span class="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-1157"><a href="#Generator-1157"><span class="linenos">1157</span></a>
-</span><span id="Generator-1158"><a href="#Generator-1158"><span class="linenos">1158</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-1159"><a href="#Generator-1159"><span class="linenos">1159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1160"><a href="#Generator-1160"><span class="linenos">1160</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-1161"><a href="#Generator-1161"><span class="linenos">1161</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-1162"><a href="#Generator-1162"><span class="linenos">1162</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-1163"><a href="#Generator-1163"><span class="linenos">1163</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-1164"><a href="#Generator-1164"><span class="linenos">1164</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">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-1165"><a href="#Generator-1165"><span class="linenos">1165</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-1166"><a href="#Generator-1166"><span class="linenos">1166</span></a>
-</span><span id="Generator-1167"><a href="#Generator-1167"><span class="linenos">1167</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-1168"><a href="#Generator-1168"><span class="linenos">1168</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-1169"><a href="#Generator-1169"><span class="linenos">1169</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-1170"><a href="#Generator-1170"><span class="linenos">1170</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-1171"><a href="#Generator-1171"><span class="linenos">1171</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1172"><a href="#Generator-1172"><span class="linenos">1172</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-1173"><a href="#Generator-1173"><span class="linenos">1173</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-1174"><a href="#Generator-1174"><span class="linenos">1174</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator-1175"><a href="#Generator-1175"><span class="linenos">1175</span></a> <span class="p">)</span>
-</span><span id="Generator-1176"><a href="#Generator-1176"><span class="linenos">1176</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-1177"><a href="#Generator-1177"><span class="linenos">1177</span></a>
-</span><span id="Generator-1178"><a href="#Generator-1178"><span class="linenos">1178</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-1179"><a href="#Generator-1179"><span class="linenos">1179</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-1180"><a href="#Generator-1180"><span class="linenos">1180</span></a>
-</span><span id="Generator-1181"><a href="#Generator-1181"><span class="linenos">1181</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-1182"><a href="#Generator-1182"><span class="linenos">1182</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-1183"><a href="#Generator-1183"><span class="linenos">1183</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-1184"><a href="#Generator-1184"><span class="linenos">1184</span></a> <span class="k">return</span> <span class="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-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">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-1187"><a href="#Generator-1187"><span class="linenos">1187</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-1188"><a href="#Generator-1188"><span class="linenos">1188</span></a> <span class="k">return</span> <span class="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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1189"><a href="#Generator-1189"><span class="linenos">1189</span></a>
-</span><span id="Generator-1190"><a href="#Generator-1190"><span class="linenos">1190</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-1191"><a href="#Generator-1191"><span class="linenos">1191</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-1192"><a href="#Generator-1192"><span class="linenos">1192</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-1193"><a href="#Generator-1193"><span class="linenos">1193</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1194"><a href="#Generator-1194"><span class="linenos">1194</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-1195"><a href="#Generator-1195"><span class="linenos">1195</span></a> <span class="p">)</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="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-1198"><a href="#Generator-1198"><span class="linenos">1198</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-1199"><a href="#Generator-1199"><span class="linenos">1199</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-1200"><a href="#Generator-1200"><span class="linenos">1200</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1201"><a href="#Generator-1201"><span class="linenos">1201</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-1202"><a href="#Generator-1202"><span class="linenos">1202</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-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="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-1205"><a href="#Generator-1205"><span class="linenos">1205</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-1206"><a href="#Generator-1206"><span class="linenos">1206</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-1207"><a href="#Generator-1207"><span class="linenos">1207</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1208"><a href="#Generator-1208"><span class="linenos">1208</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-1209"><a href="#Generator-1209"><span class="linenos">1209</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-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="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">,</span> <span class="n">cube_sql</span><span class="p">,</span> <span class="n">rollup_sql</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-1119"><a href="#Generator-1119"><span class="linenos">1119</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="Generator-1120"><a href="#Generator-1120"><span class="linenos">1120</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">TableSample</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; AS &quot;</span>
+</span><span id="Generator-1121"><a href="#Generator-1121"><span class="linenos">1121</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1122"><a href="#Generator-1122"><span class="linenos">1122</span></a> <span class="k">if</span> <span class="bp">self</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="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="Generator-1123"><a href="#Generator-1123"><span class="linenos">1123</span></a> <span class="n">this</span> <span class="o">=</span> <span 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="Generator-1124"><a href="#Generator-1124"><span class="linenos">1124</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-1125"><a href="#Generator-1125"><span class="linenos">1125</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1126"><a href="#Generator-1126"><span class="linenos">1126</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1127"><a href="#Generator-1127"><span class="linenos">1127</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1128"><a href="#Generator-1128"><span class="linenos">1128</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-1129"><a href="#Generator-1129"><span class="linenos">1129</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="o">.</span><span class="n">upper</span><span class="p">()</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-1130"><a href="#Generator-1130"><span class="linenos">1130</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-1131"><a href="#Generator-1131"><span class="linenos">1131</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-1132"><a href="#Generator-1132"><span class="linenos">1132</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-1133"><a href="#Generator-1133"><span class="linenos">1133</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-1134"><a href="#Generator-1134"><span class="linenos">1134</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-1135"><a href="#Generator-1135"><span class="linenos">1135</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-1136"><a href="#Generator-1136"><span class="linenos">1136</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 class="k">if</span> <span class="n">percent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1137"><a href="#Generator-1137"><span class="linenos">1137</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-1138"><a href="#Generator-1138"><span class="linenos">1138</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rows</span><span class="si">}</span><span class="s2"> ROWS&quot;</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-1139"><a href="#Generator-1139"><span class="linenos">1139</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-1140"><a href="#Generator-1140"><span class="linenos">1140</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_PERCENT</span><span class="p">:</span>
+</span><span id="Generator-1141"><a href="#Generator-1141"><span class="linenos">1141</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"> PERCENT&quot;</span>
+</span><span id="Generator-1142"><a href="#Generator-1142"><span class="linenos">1142</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-1143"><a href="#Generator-1143"><span class="linenos">1143</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="n">seed_prefix</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-1144"><a href="#Generator-1144"><span class="linenos">1144</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 class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">)</span>
+</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="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">method</span><span class="si">}</span><span class="s2">(</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">rows</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">)</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-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">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-1148"><a href="#Generator-1148"><span class="linenos">1148</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1149"><a href="#Generator-1149"><span class="linenos">1149</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-1150"><a href="#Generator-1150"><span class="linenos">1150</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-1151"><a href="#Generator-1151"><span class="linenos">1151</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unpivot&quot;</span><span class="p">)</span>
+</span><span id="Generator-1152"><a href="#Generator-1152"><span class="linenos">1152</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">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
+</span><span id="Generator-1153"><a href="#Generator-1153"><span class="linenos">1153</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><span id="Generator-1154"><a href="#Generator-1154"><span class="linenos">1154</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-1155"><a href="#Generator-1155"><span class="linenos">1155</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">direction</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-1156"><a href="#Generator-1156"><span class="linenos">1156</span></a>
+</span><span id="Generator-1157"><a href="#Generator-1157"><span class="linenos">1157</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-1158"><a href="#Generator-1158"><span class="linenos">1158</span></a> <span class="k">return</span> <span class="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-1159"><a href="#Generator-1159"><span class="linenos">1159</span></a>
+</span><span id="Generator-1160"><a href="#Generator-1160"><span class="linenos">1160</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-1161"><a href="#Generator-1161"><span class="linenos">1161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1162"><a href="#Generator-1162"><span class="linenos">1162</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-1163"><a href="#Generator-1163"><span class="linenos">1163</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-1164"><a href="#Generator-1164"><span class="linenos">1164</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-1165"><a href="#Generator-1165"><span class="linenos">1165</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-1166"><a href="#Generator-1166"><span class="linenos">1166</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">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-1167"><a href="#Generator-1167"><span class="linenos">1167</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-1168"><a href="#Generator-1168"><span class="linenos">1168</span></a>
+</span><span id="Generator-1169"><a href="#Generator-1169"><span class="linenos">1169</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-1170"><a href="#Generator-1170"><span class="linenos">1170</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-1171"><a href="#Generator-1171"><span class="linenos">1171</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-1172"><a href="#Generator-1172"><span class="linenos">1172</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-1173"><a href="#Generator-1173"><span class="linenos">1173</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1174"><a href="#Generator-1174"><span class="linenos">1174</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-1175"><a href="#Generator-1175"><span class="linenos">1175</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-1176"><a href="#Generator-1176"><span class="linenos">1176</span></a> <span class="k">else</span> <span class="n">values</span>
+</span><span id="Generator-1177"><a href="#Generator-1177"><span class="linenos">1177</span></a> <span class="p">)</span>
+</span><span id="Generator-1178"><a href="#Generator-1178"><span class="linenos">1178</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-1179"><a href="#Generator-1179"><span class="linenos">1179</span></a>
+</span><span id="Generator-1180"><a href="#Generator-1180"><span class="linenos">1180</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-1181"><a href="#Generator-1181"><span class="linenos">1181</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-1182"><a href="#Generator-1182"><span class="linenos">1182</span></a>
+</span><span id="Generator-1183"><a href="#Generator-1183"><span class="linenos">1183</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-1184"><a href="#Generator-1184"><span class="linenos">1184</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-1185"><a href="#Generator-1185"><span class="linenos">1185</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-1186"><a href="#Generator-1186"><span class="linenos">1186</span></a> <span class="k">return</span> <span class="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-1187"><a href="#Generator-1187"><span class="linenos">1187</span></a>
+</span><span id="Generator-1188"><a href="#Generator-1188"><span class="linenos">1188</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-1189"><a href="#Generator-1189"><span class="linenos">1189</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-1190"><a href="#Generator-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="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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1191"><a href="#Generator-1191"><span class="linenos">1191</span></a>
+</span><span id="Generator-1192"><a href="#Generator-1192"><span class="linenos">1192</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-1193"><a href="#Generator-1193"><span class="linenos">1193</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-1194"><a href="#Generator-1194"><span class="linenos">1194</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-1195"><a href="#Generator-1195"><span class="linenos">1195</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1196"><a href="#Generator-1196"><span class="linenos">1196</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-1197"><a href="#Generator-1197"><span class="linenos">1197</span></a> <span class="p">)</span>
+</span><span id="Generator-1198"><a href="#Generator-1198"><span class="linenos">1198</span></a>
+</span><span id="Generator-1199"><a href="#Generator-1199"><span class="linenos">1199</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-1200"><a href="#Generator-1200"><span class="linenos">1200</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-1201"><a href="#Generator-1201"><span class="linenos">1201</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-1202"><a href="#Generator-1202"><span class="linenos">1202</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1203"><a href="#Generator-1203"><span class="linenos">1203</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-1204"><a href="#Generator-1204"><span class="linenos">1204</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-1205"><a href="#Generator-1205"><span class="linenos">1205</span></a>
+</span><span id="Generator-1206"><a href="#Generator-1206"><span class="linenos">1206</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-1207"><a href="#Generator-1207"><span class="linenos">1207</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-1208"><a href="#Generator-1208"><span class="linenos">1208</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-1209"><a href="#Generator-1209"><span class="linenos">1209</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1210"><a href="#Generator-1210"><span class="linenos">1210</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-1211"><a href="#Generator-1211"><span class="linenos">1211</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-1212"><a href="#Generator-1212"><span class="linenos">1212</span></a>
-</span><span id="Generator-1213"><a href="#Generator-1213"><span class="linenos">1213</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-1214"><a href="#Generator-1214"><span class="linenos">1214</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="s2">,&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">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-1213"><a href="#Generator-1213"><span class="linenos">1213</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">,</span> <span class="n">cube_sql</span><span class="p">,</span> <span class="n">rollup_sql</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><span id="Generator-1215"><a href="#Generator-1215"><span class="linenos">1215</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-1216"><a href="#Generator-1216"><span class="linenos">1216</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="s2">,&quot;</span>
</span><span id="Generator-1217"><a href="#Generator-1217"><span class="linenos">1217</span></a>
-</span><span id="Generator-1218"><a href="#Generator-1218"><span class="linenos">1218</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-1219"><a href="#Generator-1219"><span class="linenos">1219</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-1220"><a href="#Generator-1220"><span class="linenos">1220</span></a> <span class="k">return</span> <span class="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-1221"><a href="#Generator-1221"><span class="linenos">1221</span></a>
-</span><span id="Generator-1222"><a href="#Generator-1222"><span class="linenos">1222</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-1223"><a href="#Generator-1223"><span class="linenos">1223</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><span id="Generator-1224"><a href="#Generator-1224"><span class="linenos">1224</span></a> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-</span><span id="Generator-1225"><a href="#Generator-1225"><span class="linenos">1225</span></a> <span class="n">op</span>
-</span><span id="Generator-1226"><a href="#Generator-1226"><span class="linenos">1226</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-1227"><a href="#Generator-1227"><span class="linenos">1227</span></a> <span class="s2">&quot;NATURAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Generator-1228"><a href="#Generator-1228"><span class="linenos">1228</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
-</span><span id="Generator-1229"><a href="#Generator-1229"><span class="linenos">1229</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Generator-1230"><a href="#Generator-1230"><span class="linenos">1230</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-1231"><a href="#Generator-1231"><span class="linenos">1231</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">,</span>
-</span><span id="Generator-1232"><a href="#Generator-1232"><span class="linenos">1232</span></a> <span class="p">)</span>
-</span><span id="Generator-1233"><a href="#Generator-1233"><span class="linenos">1233</span></a> <span class="k">if</span> <span class="n">op</span>
-</span><span id="Generator-1234"><a href="#Generator-1234"><span class="linenos">1234</span></a> <span class="p">)</span>
-</span><span id="Generator-1235"><a href="#Generator-1235"><span class="linenos">1235</span></a> <span class="p">)</span>
-</span><span id="Generator-1236"><a href="#Generator-1236"><span class="linenos">1236</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-1237"><a href="#Generator-1237"><span class="linenos">1237</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-1238"><a href="#Generator-1238"><span class="linenos">1238</span></a>
-</span><span id="Generator-1239"><a href="#Generator-1239"><span class="linenos">1239</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-1240"><a href="#Generator-1240"><span class="linenos">1240</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-1241"><a href="#Generator-1241"><span class="linenos">1241</span></a>
-</span><span id="Generator-1242"><a href="#Generator-1242"><span class="linenos">1242</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="Generator-1243"><a href="#Generator-1243"><span class="linenos">1243</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-1244"><a href="#Generator-1244"><span class="linenos">1244</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-1245"><a href="#Generator-1245"><span class="linenos">1245</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator-1246"><a href="#Generator-1246"><span class="linenos">1246</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-1247"><a href="#Generator-1247"><span class="linenos">1247</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1248"><a href="#Generator-1248"><span class="linenos">1248</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-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="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-1251"><a href="#Generator-1251"><span class="linenos">1251</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-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;</span><span class="si">{</span><span class="n">expression_sql</span><span class="si">}{</span><span class="n">op_sql</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-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">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-1255"><a href="#Generator-1255"><span class="linenos">1255</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-1256"><a href="#Generator-1256"><span class="linenos">1256</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-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="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-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">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-1260"><a href="#Generator-1260"><span class="linenos">1260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1261"><a href="#Generator-1261"><span class="linenos">1261</span></a>
-</span><span id="Generator-1262"><a href="#Generator-1262"><span class="linenos">1262</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">Subquery</span><span class="p">):</span>
-</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;LATERAL </span><span class="si">{</span><span class="n">this</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">if</span> <span class="n">expression</span><span class="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-1266"><a href="#Generator-1266"><span class="linenos">1266</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-1267"><a href="#Generator-1267"><span class="linenos">1267</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-1268"><a href="#Generator-1268"><span class="linenos">1268</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-1269"><a href="#Generator-1269"><span class="linenos">1269</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-1270"><a href="#Generator-1270"><span class="linenos">1270</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-1271"><a href="#Generator-1271"><span class="linenos">1271</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-1272"><a href="#Generator-1272"><span class="linenos">1272</span></a>
-</span><span id="Generator-1273"><a href="#Generator-1273"><span class="linenos">1273</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-1274"><a href="#Generator-1274"><span class="linenos">1274</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-1275"><a href="#Generator-1275"><span class="linenos">1275</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </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-1276"><a href="#Generator-1276"><span class="linenos">1276</span></a>
-</span><span id="Generator-1277"><a href="#Generator-1277"><span class="linenos">1277</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1278"><a href="#Generator-1278"><span class="linenos">1278</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1279"><a href="#Generator-1279"><span class="linenos">1279</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;LIMIT&#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-1280"><a href="#Generator-1280"><span class="linenos">1280</span></a>
-</span><span id="Generator-1281"><a href="#Generator-1281"><span class="linenos">1281</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-1282"><a href="#Generator-1282"><span class="linenos">1282</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1283"><a href="#Generator-1283"><span class="linenos">1283</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="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-1284"><a href="#Generator-1284"><span class="linenos">1284</span></a>
-</span><span id="Generator-1285"><a href="#Generator-1285"><span class="linenos">1285</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-1286"><a href="#Generator-1286"><span class="linenos">1286</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-1287"><a href="#Generator-1287"><span class="linenos">1287</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-1288"><a href="#Generator-1288"><span class="linenos">1288</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1289"><a href="#Generator-1289"><span class="linenos">1289</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-1290"><a href="#Generator-1290"><span class="linenos">1290</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-1291"><a href="#Generator-1291"><span class="linenos">1291</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-1292"><a href="#Generator-1292"><span class="linenos">1292</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-1293"><a href="#Generator-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">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-1294"><a href="#Generator-1294"><span class="linenos">1294</span></a>
-</span><span id="Generator-1295"><a href="#Generator-1295"><span class="linenos">1295</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-1296"><a href="#Generator-1296"><span class="linenos">1296</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1297"><a href="#Generator-1297"><span class="linenos">1297</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-1298"><a href="#Generator-1298"><span class="linenos">1298</span></a> <span class="p">)</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;SET</span><span class="si">{</span><span class="n">expressions</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">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-1302"><a href="#Generator-1302"><span class="linenos">1302</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-1303"><a href="#Generator-1303"><span class="linenos">1303</span></a>
-</span><span id="Generator-1304"><a href="#Generator-1304"><span class="linenos">1304</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-1305"><a href="#Generator-1305"><span class="linenos">1305</span></a> <span class="k">if</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-1306"><a href="#Generator-1306"><span class="linenos">1306</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;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;SHARE&quot;</span>
-</span><span id="Generator-1307"><a href="#Generator-1307"><span class="linenos">1307</span></a> <span class="k">return</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;FOR </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator-1308"><a href="#Generator-1308"><span class="linenos">1308</span></a>
-</span><span id="Generator-1309"><a href="#Generator-1309"><span class="linenos">1309</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-1310"><a href="#Generator-1310"><span class="linenos">1310</span></a> <span class="k">return</span> <span class="s2">&quot;&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="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-1313"><a href="#Generator-1313"><span class="linenos">1313</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-1314"><a href="#Generator-1314"><span class="linenos">1314</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-1315"><a href="#Generator-1315"><span class="linenos">1315</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">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-1316"><a href="#Generator-1316"><span class="linenos">1316</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-1317"><a href="#Generator-1317"><span class="linenos">1317</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-1318"><a href="#Generator-1318"><span class="linenos">1318</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">quote_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">quote_end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1319"><a href="#Generator-1319"><span class="linenos">1319</span></a> <span class="k">return</span> <span class="n">text</span>
-</span><span id="Generator-1320"><a href="#Generator-1320"><span class="linenos">1320</span></a>
-</span><span id="Generator-1321"><a href="#Generator-1321"><span class="linenos">1321</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-1322"><a href="#Generator-1322"><span class="linenos">1322</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-1323"><a href="#Generator-1323"><span class="linenos">1323</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-1324"><a href="#Generator-1324"><span class="linenos">1324</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-1325"><a href="#Generator-1325"><span class="linenos">1325</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-1326"><a href="#Generator-1326"><span class="linenos">1326</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-1327"><a href="#Generator-1327"><span class="linenos">1327</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-1328"><a href="#Generator-1328"><span class="linenos">1328</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-1329"><a href="#Generator-1329"><span class="linenos">1329</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-1330"><a href="#Generator-1330"><span class="linenos">1330</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-1331"><a href="#Generator-1331"><span class="linenos">1331</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-1332"><a href="#Generator-1332"><span class="linenos">1332</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-1333"><a href="#Generator-1333"><span class="linenos">1333</span></a>
-</span><span id="Generator-1334"><a href="#Generator-1334"><span class="linenos">1334</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-1335"><a href="#Generator-1335"><span class="linenos">1335</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
-</span><span id="Generator-1336"><a href="#Generator-1336"><span class="linenos">1336</span></a>
-</span><span id="Generator-1337"><a href="#Generator-1337"><span class="linenos">1337</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-1338"><a href="#Generator-1338"><span class="linenos">1338</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-1339"><a href="#Generator-1339"><span class="linenos">1339</span></a>
-</span><span id="Generator-1340"><a href="#Generator-1340"><span class="linenos">1340</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-1341"><a href="#Generator-1341"><span class="linenos">1341</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1342"><a href="#Generator-1342"><span class="linenos">1342</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-1343"><a href="#Generator-1343"><span class="linenos">1343</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="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 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-1344"><a href="#Generator-1344"><span class="linenos">1344</span></a>
-</span><span id="Generator-1345"><a href="#Generator-1345"><span class="linenos">1345</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-1346"><a href="#Generator-1346"><span class="linenos">1346</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-1347"><a href="#Generator-1347"><span class="linenos">1347</span></a>
-</span><span id="Generator-1348"><a href="#Generator-1348"><span class="linenos">1348</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-1349"><a href="#Generator-1349"><span class="linenos">1349</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-1350"><a href="#Generator-1350"><span class="linenos">1350</span></a>
-</span><span id="Generator-1351"><a href="#Generator-1351"><span class="linenos">1351</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-1352"><a href="#Generator-1352"><span class="linenos">1352</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-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">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-1355"><a href="#Generator-1355"><span class="linenos">1355</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-1356"><a href="#Generator-1356"><span class="linenos">1356</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-1357"><a href="#Generator-1357"><span class="linenos">1357</span></a>
-</span><span id="Generator-1358"><a href="#Generator-1358"><span class="linenos">1358</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-1359"><a href="#Generator-1359"><span class="linenos">1359</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-1360"><a href="#Generator-1360"><span class="linenos">1360</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="Generator-1361"><a href="#Generator-1361"><span class="linenos">1361</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="Generator-1362"><a href="#Generator-1362"><span class="linenos">1362</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="Generator-1363"><a href="#Generator-1363"><span class="linenos">1363</span></a>
-</span><span id="Generator-1364"><a href="#Generator-1364"><span class="linenos">1364</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="s2">&quot;&quot;</span>
-</span><span id="Generator-1365"><a href="#Generator-1365"><span class="linenos">1365</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1366"><a href="#Generator-1366"><span class="linenos">1366</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-1367"><a href="#Generator-1367"><span class="linenos">1367</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-1368"><a href="#Generator-1368"><span class="linenos">1368</span></a> <span class="p">):</span>
-</span><span id="Generator-1369"><a href="#Generator-1369"><span class="linenos">1369</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-1370"><a href="#Generator-1370"><span class="linenos">1370</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="Generator-1371"><a href="#Generator-1371"><span class="linenos">1371</span></a> <span class="n">nulls_last</span>
-</span><span id="Generator-1372"><a href="#Generator-1372"><span class="linenos">1372</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-1373"><a href="#Generator-1373"><span class="linenos">1373</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
-</span><span id="Generator-1374"><a href="#Generator-1374"><span class="linenos">1374</span></a> <span class="p">):</span>
-</span><span id="Generator-1375"><a href="#Generator-1375"><span class="linenos">1375</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-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">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-1378"><a href="#Generator-1378"><span class="linenos">1378</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="Generator-1379"><a href="#Generator-1379"><span class="linenos">1379</span></a> <span class="s2">&quot;Sorting in an ORDER BY on NULLS FIRST/NULLS LAST is not supported by this dialect&quot;</span>
-</span><span id="Generator-1380"><a href="#Generator-1380"><span class="linenos">1380</span></a> <span class="p">)</span>
-</span><span id="Generator-1381"><a href="#Generator-1381"><span class="linenos">1381</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1382"><a href="#Generator-1382"><span class="linenos">1382</span></a>
-</span><span id="Generator-1383"><a href="#Generator-1383"><span class="linenos">1383</span></a> <span class="k">return</span> <span class="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">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1218"><a href="#Generator-1218"><span class="linenos">1218</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-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">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-1221"><a href="#Generator-1221"><span class="linenos">1221</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-1222"><a href="#Generator-1222"><span class="linenos">1222</span></a> <span class="k">return</span> <span class="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-1223"><a href="#Generator-1223"><span class="linenos">1223</span></a>
+</span><span id="Generator-1224"><a href="#Generator-1224"><span class="linenos">1224</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-1225"><a href="#Generator-1225"><span class="linenos">1225</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><span id="Generator-1226"><a href="#Generator-1226"><span class="linenos">1226</span></a> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
+</span><span id="Generator-1227"><a href="#Generator-1227"><span class="linenos">1227</span></a> <span class="n">op</span>
+</span><span id="Generator-1228"><a href="#Generator-1228"><span class="linenos">1228</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-1229"><a href="#Generator-1229"><span class="linenos">1229</span></a> <span class="s2">&quot;NATURAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;natural&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Generator-1230"><a href="#Generator-1230"><span class="linenos">1230</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
+</span><span id="Generator-1231"><a href="#Generator-1231"><span class="linenos">1231</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Generator-1232"><a href="#Generator-1232"><span class="linenos">1232</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-1233"><a href="#Generator-1233"><span class="linenos">1233</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">,</span>
+</span><span id="Generator-1234"><a href="#Generator-1234"><span class="linenos">1234</span></a> <span class="p">)</span>
+</span><span id="Generator-1235"><a href="#Generator-1235"><span class="linenos">1235</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="Generator-1236"><a href="#Generator-1236"><span class="linenos">1236</span></a> <span class="p">)</span>
+</span><span id="Generator-1237"><a href="#Generator-1237"><span class="linenos">1237</span></a> <span class="p">)</span>
+</span><span id="Generator-1238"><a href="#Generator-1238"><span class="linenos">1238</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-1239"><a href="#Generator-1239"><span class="linenos">1239</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-1240"><a href="#Generator-1240"><span class="linenos">1240</span></a>
+</span><span id="Generator-1241"><a href="#Generator-1241"><span class="linenos">1241</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-1242"><a href="#Generator-1242"><span class="linenos">1242</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-1243"><a href="#Generator-1243"><span class="linenos">1243</span></a>
+</span><span id="Generator-1244"><a href="#Generator-1244"><span class="linenos">1244</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="Generator-1245"><a href="#Generator-1245"><span class="linenos">1245</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-1246"><a href="#Generator-1246"><span class="linenos">1246</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-1247"><a href="#Generator-1247"><span class="linenos">1247</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator-1248"><a href="#Generator-1248"><span class="linenos">1248</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-1249"><a href="#Generator-1249"><span class="linenos">1249</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1250"><a href="#Generator-1250"><span class="linenos">1250</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-1251"><a href="#Generator-1251"><span class="linenos">1251</span></a>
+</span><span id="Generator-1252"><a href="#Generator-1252"><span class="linenos">1252</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-1253"><a href="#Generator-1253"><span class="linenos">1253</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-1254"><a href="#Generator-1254"><span class="linenos">1254</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_sql</span><span class="si">}{</span><span class="n">op_sql</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-1255"><a href="#Generator-1255"><span class="linenos">1255</span></a>
+</span><span id="Generator-1256"><a href="#Generator-1256"><span class="linenos">1256</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-1257"><a href="#Generator-1257"><span class="linenos">1257</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-1258"><a href="#Generator-1258"><span class="linenos">1258</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-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">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-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">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-1262"><a href="#Generator-1262"><span class="linenos">1262</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1263"><a href="#Generator-1263"><span class="linenos">1263</span></a>
+</span><span id="Generator-1264"><a href="#Generator-1264"><span class="linenos">1264</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">Subquery</span><span class="p">):</span>
+</span><span id="Generator-1265"><a href="#Generator-1265"><span class="linenos">1265</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1266"><a href="#Generator-1266"><span class="linenos">1266</span></a>
+</span><span id="Generator-1267"><a href="#Generator-1267"><span class="linenos">1267</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-1268"><a href="#Generator-1268"><span class="linenos">1268</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-1269"><a href="#Generator-1269"><span class="linenos">1269</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-1270"><a href="#Generator-1270"><span class="linenos">1270</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-1271"><a href="#Generator-1271"><span class="linenos">1271</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-1272"><a href="#Generator-1272"><span class="linenos">1272</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-1273"><a href="#Generator-1273"><span class="linenos">1273</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-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">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-1276"><a href="#Generator-1276"><span class="linenos">1276</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-1277"><a href="#Generator-1277"><span class="linenos">1277</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </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-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="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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1280"><a href="#Generator-1280"><span class="linenos">1280</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</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">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;LIMIT&#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-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">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-1284"><a href="#Generator-1284"><span class="linenos">1284</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</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">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="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-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">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-1288"><a href="#Generator-1288"><span class="linenos">1288</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-1289"><a href="#Generator-1289"><span class="linenos">1289</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-1290"><a href="#Generator-1290"><span class="linenos">1290</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1291"><a href="#Generator-1291"><span class="linenos">1291</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-1292"><a href="#Generator-1292"><span class="linenos">1292</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-1293"><a href="#Generator-1293"><span class="linenos">1293</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-1294"><a href="#Generator-1294"><span class="linenos">1294</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-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;</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-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">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-1298"><a href="#Generator-1298"><span class="linenos">1298</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1299"><a href="#Generator-1299"><span class="linenos">1299</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-1300"><a href="#Generator-1300"><span class="linenos">1300</span></a> <span class="p">)</span>
+</span><span id="Generator-1301"><a href="#Generator-1301"><span class="linenos">1301</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SET</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1302"><a href="#Generator-1302"><span class="linenos">1302</span></a>
+</span><span id="Generator-1303"><a href="#Generator-1303"><span class="linenos">1303</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-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;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-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">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-1307"><a href="#Generator-1307"><span class="linenos">1307</span></a> <span class="k">if</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-1308"><a href="#Generator-1308"><span class="linenos">1308</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;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;SHARE&quot;</span>
+</span><span id="Generator-1309"><a href="#Generator-1309"><span class="linenos">1309</span></a> <span class="k">return</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;FOR </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator-1310"><a href="#Generator-1310"><span class="linenos">1310</span></a>
+</span><span id="Generator-1311"><a href="#Generator-1311"><span class="linenos">1311</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-1312"><a href="#Generator-1312"><span class="linenos">1312</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1313"><a href="#Generator-1313"><span class="linenos">1313</span></a>
+</span><span id="Generator-1314"><a href="#Generator-1314"><span class="linenos">1314</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-1315"><a href="#Generator-1315"><span class="linenos">1315</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-1316"><a href="#Generator-1316"><span class="linenos">1316</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-1317"><a href="#Generator-1317"><span class="linenos">1317</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">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-1318"><a href="#Generator-1318"><span class="linenos">1318</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-1319"><a href="#Generator-1319"><span class="linenos">1319</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-1320"><a href="#Generator-1320"><span class="linenos">1320</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">quote_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">quote_end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1321"><a href="#Generator-1321"><span class="linenos">1321</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Generator-1322"><a href="#Generator-1322"><span class="linenos">1322</span></a>
+</span><span id="Generator-1323"><a href="#Generator-1323"><span class="linenos">1323</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-1324"><a href="#Generator-1324"><span class="linenos">1324</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-1325"><a href="#Generator-1325"><span class="linenos">1325</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-1326"><a href="#Generator-1326"><span class="linenos">1326</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-1327"><a href="#Generator-1327"><span class="linenos">1327</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-1328"><a href="#Generator-1328"><span class="linenos">1328</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-1329"><a href="#Generator-1329"><span class="linenos">1329</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-1330"><a href="#Generator-1330"><span class="linenos">1330</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-1331"><a href="#Generator-1331"><span class="linenos">1331</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-1332"><a href="#Generator-1332"><span class="linenos">1332</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-1333"><a href="#Generator-1333"><span class="linenos">1333</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-1334"><a href="#Generator-1334"><span class="linenos">1334</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-1335"><a href="#Generator-1335"><span class="linenos">1335</span></a>
+</span><span id="Generator-1336"><a href="#Generator-1336"><span class="linenos">1336</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-1337"><a href="#Generator-1337"><span class="linenos">1337</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
+</span><span id="Generator-1338"><a href="#Generator-1338"><span class="linenos">1338</span></a>
+</span><span id="Generator-1339"><a href="#Generator-1339"><span class="linenos">1339</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-1340"><a href="#Generator-1340"><span class="linenos">1340</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-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">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-1343"><a href="#Generator-1343"><span class="linenos">1343</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1344"><a href="#Generator-1344"><span class="linenos">1344</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-1345"><a href="#Generator-1345"><span class="linenos">1345</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="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 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-1346"><a href="#Generator-1346"><span class="linenos">1346</span></a>
+</span><span id="Generator-1347"><a href="#Generator-1347"><span class="linenos">1347</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-1348"><a href="#Generator-1348"><span class="linenos">1348</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-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">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-1351"><a href="#Generator-1351"><span class="linenos">1351</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-1352"><a href="#Generator-1352"><span class="linenos">1352</span></a>
+</span><span id="Generator-1353"><a href="#Generator-1353"><span class="linenos">1353</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-1354"><a href="#Generator-1354"><span class="linenos">1354</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-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="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-1357"><a href="#Generator-1357"><span class="linenos">1357</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-1358"><a href="#Generator-1358"><span class="linenos">1358</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-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">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-1361"><a href="#Generator-1361"><span class="linenos">1361</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-1362"><a href="#Generator-1362"><span class="linenos">1362</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="Generator-1363"><a href="#Generator-1363"><span class="linenos">1363</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="Generator-1364"><a href="#Generator-1364"><span class="linenos">1364</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="Generator-1365"><a href="#Generator-1365"><span class="linenos">1365</span></a>
+</span><span id="Generator-1366"><a href="#Generator-1366"><span class="linenos">1366</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="s2">&quot;&quot;</span>
+</span><span id="Generator-1367"><a href="#Generator-1367"><span class="linenos">1367</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&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">nulls_first</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Generator-1369"><a href="#Generator-1369"><span class="linenos">1369</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-1370"><a href="#Generator-1370"><span class="linenos">1370</span></a> <span class="p">):</span>
+</span><span id="Generator-1371"><a href="#Generator-1371"><span class="linenos">1371</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-1372"><a href="#Generator-1372"><span class="linenos">1372</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="Generator-1373"><a href="#Generator-1373"><span class="linenos">1373</span></a> <span class="n">nulls_last</span>
+</span><span id="Generator-1374"><a href="#Generator-1374"><span class="linenos">1374</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-1375"><a href="#Generator-1375"><span class="linenos">1375</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">nulls_are_last</span>
+</span><span id="Generator-1376"><a href="#Generator-1376"><span class="linenos">1376</span></a> <span class="p">):</span>
+</span><span id="Generator-1377"><a href="#Generator-1377"><span class="linenos">1377</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-1378"><a href="#Generator-1378"><span class="linenos">1378</span></a>
+</span><span id="Generator-1379"><a href="#Generator-1379"><span class="linenos">1379</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-1380"><a href="#Generator-1380"><span class="linenos">1380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="Generator-1381"><a href="#Generator-1381"><span class="linenos">1381</span></a> <span class="s2">&quot;Sorting in an ORDER BY on NULLS FIRST/NULLS LAST is not supported by this dialect&quot;</span>
+</span><span id="Generator-1382"><a href="#Generator-1382"><span class="linenos">1382</span></a> <span class="p">)</span>
+</span><span id="Generator-1383"><a href="#Generator-1383"><span class="linenos">1383</span></a> <span class="n">nulls_sort_change</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Generator-1384"><a href="#Generator-1384"><span class="linenos">1384</span></a>
-</span><span id="Generator-1385"><a href="#Generator-1385"><span class="linenos">1385</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-1386"><a href="#Generator-1386"><span class="linenos">1386</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-1387"><a href="#Generator-1387"><span class="linenos">1387</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-1388"><a href="#Generator-1388"><span class="linenos">1388</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-1389"><a href="#Generator-1389"><span class="linenos">1389</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-1390"><a href="#Generator-1390"><span class="linenos">1390</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-1391"><a href="#Generator-1391"><span class="linenos">1391</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-1392"><a href="#Generator-1392"><span class="linenos">1392</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-1393"><a href="#Generator-1393"><span class="linenos">1393</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-1394"><a href="#Generator-1394"><span class="linenos">1394</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-1395"><a href="#Generator-1395"><span class="linenos">1395</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-1396"><a href="#Generator-1396"><span class="linenos">1396</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator-1397"><a href="#Generator-1397"><span class="linenos">1397</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-1398"><a href="#Generator-1398"><span class="linenos">1398</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-1399"><a href="#Generator-1399"><span class="linenos">1399</span></a> <span class="p">]</span>
-</span><span id="Generator-1400"><a href="#Generator-1400"><span class="linenos">1400</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-1401"><a href="#Generator-1401"><span class="linenos">1401</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-1402"><a href="#Generator-1402"><span class="linenos">1402</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-1403"><a href="#Generator-1403"><span class="linenos">1403</span></a> <span class="p">(</span>
-</span><span id="Generator-1404"><a href="#Generator-1404"><span class="linenos">1404</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="Generator-1405"><a href="#Generator-1405"><span class="linenos">1405</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="Generator-1406"><a href="#Generator-1406"><span class="linenos">1406</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="Generator-1407"><a href="#Generator-1407"><span class="linenos">1407</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="Generator-1408"><a href="#Generator-1408"><span class="linenos">1408</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="Generator-1409"><a href="#Generator-1409"><span class="linenos">1409</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="Generator-1410"><a href="#Generator-1410"><span class="linenos">1410</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="Generator-1411"><a href="#Generator-1411"><span class="linenos">1411</span></a> <span class="p">)</span>
-</span><span id="Generator-1412"><a href="#Generator-1412"><span class="linenos">1412</span></a> <span class="p">)</span>
-</span><span id="Generator-1413"><a href="#Generator-1413"><span class="linenos">1413</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-1414"><a href="#Generator-1414"><span class="linenos">1414</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-1415"><a href="#Generator-1415"><span class="linenos">1415</span></a> <span class="k">return</span> <span class="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-1416"><a href="#Generator-1416"><span class="linenos">1416</span></a>
-</span><span id="Generator-1417"><a href="#Generator-1417"><span class="linenos">1417</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-1418"><a href="#Generator-1418"><span class="linenos">1418</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-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">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-1421"><a href="#Generator-1421"><span class="linenos">1421</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">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-1422"><a href="#Generator-1422"><span class="linenos">1422</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-1423"><a href="#Generator-1423"><span class="linenos">1423</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">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator-1424"><a href="#Generator-1424"><span class="linenos">1424</span></a>
-</span><span id="Generator-1425"><a href="#Generator-1425"><span class="linenos">1425</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-1385"><a href="#Generator-1385"><span class="linenos">1385</span></a> <span class="k">return</span> <span class="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">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1386"><a href="#Generator-1386"><span class="linenos">1386</span></a>
+</span><span id="Generator-1387"><a href="#Generator-1387"><span class="linenos">1387</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-1388"><a href="#Generator-1388"><span class="linenos">1388</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-1389"><a href="#Generator-1389"><span class="linenos">1389</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-1390"><a href="#Generator-1390"><span class="linenos">1390</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-1391"><a href="#Generator-1391"><span class="linenos">1391</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-1392"><a href="#Generator-1392"><span class="linenos">1392</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-1393"><a href="#Generator-1393"><span class="linenos">1393</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-1394"><a href="#Generator-1394"><span class="linenos">1394</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-1395"><a href="#Generator-1395"><span class="linenos">1395</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-1396"><a href="#Generator-1396"><span class="linenos">1396</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-1397"><a href="#Generator-1397"><span class="linenos">1397</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-1398"><a href="#Generator-1398"><span class="linenos">1398</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator-1399"><a href="#Generator-1399"><span class="linenos">1399</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-1400"><a href="#Generator-1400"><span class="linenos">1400</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-1401"><a href="#Generator-1401"><span class="linenos">1401</span></a> <span class="p">]</span>
+</span><span id="Generator-1402"><a href="#Generator-1402"><span class="linenos">1402</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-1403"><a href="#Generator-1403"><span class="linenos">1403</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-1404"><a href="#Generator-1404"><span class="linenos">1404</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-1405"><a href="#Generator-1405"><span class="linenos">1405</span></a> <span class="p">(</span>
+</span><span id="Generator-1406"><a href="#Generator-1406"><span class="linenos">1406</span></a> <span class="n">partition</span><span class="p">,</span>
+</span><span id="Generator-1407"><a href="#Generator-1407"><span class="linenos">1407</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="Generator-1408"><a href="#Generator-1408"><span class="linenos">1408</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="Generator-1409"><a href="#Generator-1409"><span class="linenos">1409</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="Generator-1410"><a href="#Generator-1410"><span class="linenos">1410</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="Generator-1411"><a href="#Generator-1411"><span class="linenos">1411</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="Generator-1412"><a href="#Generator-1412"><span class="linenos">1412</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="Generator-1413"><a href="#Generator-1413"><span class="linenos">1413</span></a> <span class="p">)</span>
+</span><span id="Generator-1414"><a href="#Generator-1414"><span class="linenos">1414</span></a> <span class="p">)</span>
+</span><span id="Generator-1415"><a href="#Generator-1415"><span class="linenos">1415</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-1416"><a href="#Generator-1416"><span class="linenos">1416</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-1417"><a href="#Generator-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="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-1418"><a href="#Generator-1418"><span class="linenos">1418</span></a>
+</span><span id="Generator-1419"><a href="#Generator-1419"><span class="linenos">1419</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-1420"><a href="#Generator-1420"><span class="linenos">1420</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-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">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-1423"><a href="#Generator-1423"><span class="linenos">1423</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">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-1424"><a href="#Generator-1424"><span class="linenos">1424</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-1425"><a href="#Generator-1425"><span class="linenos">1425</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">limit</span><span class="o">.</span><span class="n">expression</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">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator-1428"><a href="#Generator-1428"><span class="linenos">1428</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="Generator-1429"><a href="#Generator-1429"><span class="linenos">1429</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1430"><a href="#Generator-1430"><span class="linenos">1430</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-1431"><a href="#Generator-1431"><span class="linenos">1431</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1432"><a href="#Generator-1432"><span class="linenos">1432</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-1433"><a href="#Generator-1433"><span class="linenos">1433</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-1434"><a href="#Generator-1434"><span class="linenos">1434</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-1435"><a href="#Generator-1435"><span class="linenos">1435</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-1436"><a href="#Generator-1436"><span class="linenos">1436</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-1437"><a href="#Generator-1437"><span class="linenos">1437</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-1438"><a href="#Generator-1438"><span class="linenos">1438</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator-1439"><a href="#Generator-1439"><span class="linenos">1439</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-1440"><a href="#Generator-1440"><span class="linenos">1440</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-1441"><a href="#Generator-1441"><span class="linenos">1441</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-1442"><a href="#Generator-1442"><span class="linenos">1442</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-1443"><a href="#Generator-1443"><span class="linenos">1443</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-1444"><a href="#Generator-1444"><span class="linenos">1444</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-1445"><a href="#Generator-1445"><span class="linenos">1445</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;lock&quot;</span><span class="p">),</span>
-</span><span id="Generator-1446"><a href="#Generator-1446"><span class="linenos">1446</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;sample&quot;</span><span class="p">),</span>
-</span><span id="Generator-1447"><a href="#Generator-1447"><span class="linenos">1447</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-1448"><a href="#Generator-1448"><span class="linenos">1448</span></a> <span class="p">)</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="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-1451"><a href="#Generator-1451"><span class="linenos">1451</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-1452"><a href="#Generator-1452"><span class="linenos">1452</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 class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1453"><a href="#Generator-1453"><span class="linenos">1453</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-1454"><a href="#Generator-1454"><span class="linenos">1454</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-1455"><a href="#Generator-1455"><span class="linenos">1455</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-1456"><a href="#Generator-1456"><span class="linenos">1456</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-1457"><a href="#Generator-1457"><span class="linenos">1457</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-1458"><a href="#Generator-1458"><span class="linenos">1458</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-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="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">kind</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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator-1461"><a href="#Generator-1461"><span class="linenos">1461</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-1462"><a href="#Generator-1462"><span class="linenos">1462</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-1463"><a href="#Generator-1463"><span class="linenos">1463</span></a> <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="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-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">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-1467"><a href="#Generator-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="Generator-1468"><a href="#Generator-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="Generator-1469"><a href="#Generator-1469"><span class="linenos">1469</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="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-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;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">sql</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">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-1473"><a href="#Generator-1473"><span class="linenos">1473</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-1474"><a href="#Generator-1474"><span class="linenos">1474</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-1475"><a href="#Generator-1475"><span class="linenos">1475</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-1476"><a href="#Generator-1476"><span class="linenos">1476</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-1477"><a href="#Generator-1477"><span class="linenos">1477</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-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">structkwarg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</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="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-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">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-1483"><a href="#Generator-1483"><span class="linenos">1483</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1484"><a href="#Generator-1484"><span class="linenos">1484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="se">}}</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;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">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1485"><a href="#Generator-1485"><span class="linenos">1485</span></a> <span class="k">return</span> <span class="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-1486"><a href="#Generator-1486"><span class="linenos">1486</span></a>
-</span><span id="Generator-1487"><a href="#Generator-1487"><span class="linenos">1487</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-1488"><a href="#Generator-1488"><span class="linenos">1488</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1489"><a href="#Generator-1489"><span class="linenos">1489</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-1490"><a href="#Generator-1490"><span class="linenos">1490</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator-1491"><a href="#Generator-1491"><span class="linenos">1491</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-1492"><a href="#Generator-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="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-1493"><a href="#Generator-1493"><span class="linenos">1493</span></a>
-</span><span id="Generator-1494"><a href="#Generator-1494"><span class="linenos">1494</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-1495"><a href="#Generator-1495"><span class="linenos">1495</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-1496"><a href="#Generator-1496"><span class="linenos">1496</span></a>
-</span><span id="Generator-1497"><a href="#Generator-1497"><span class="linenos">1497</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-1498"><a href="#Generator-1498"><span class="linenos">1498</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-1499"><a href="#Generator-1499"><span class="linenos">1499</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-1500"><a href="#Generator-1500"><span class="linenos">1500</span></a>
-</span><span id="Generator-1501"><a href="#Generator-1501"><span class="linenos">1501</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-1502"><a href="#Generator-1502"><span class="linenos">1502</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-1503"><a href="#Generator-1503"><span class="linenos">1503</span></a> <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-1504"><a href="#Generator-1504"><span class="linenos">1504</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="Generator-1505"><a href="#Generator-1505"><span class="linenos">1505</span></a> <span class="bp">self</span><span 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><span id="Generator-1506"><a href="#Generator-1506"><span class="linenos">1506</span></a> <span class="p">)</span>
-</span><span id="Generator-1507"><a href="#Generator-1507"><span class="linenos">1507</span></a>
-</span><span id="Generator-1508"><a href="#Generator-1508"><span class="linenos">1508</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-1427"><a href="#Generator-1427"><span class="linenos">1427</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-1428"><a href="#Generator-1428"><span class="linenos">1428</span></a>
+</span><span id="Generator-1429"><a href="#Generator-1429"><span class="linenos">1429</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator-1430"><a href="#Generator-1430"><span class="linenos">1430</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="Generator-1431"><a href="#Generator-1431"><span class="linenos">1431</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1432"><a href="#Generator-1432"><span class="linenos">1432</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-1433"><a href="#Generator-1433"><span class="linenos">1433</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1434"><a href="#Generator-1434"><span class="linenos">1434</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-1435"><a href="#Generator-1435"><span class="linenos">1435</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-1436"><a href="#Generator-1436"><span class="linenos">1436</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-1437"><a href="#Generator-1437"><span class="linenos">1437</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-1438"><a href="#Generator-1438"><span class="linenos">1438</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-1439"><a href="#Generator-1439"><span class="linenos">1439</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-1440"><a href="#Generator-1440"><span class="linenos">1440</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator-1441"><a href="#Generator-1441"><span class="linenos">1441</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-1442"><a href="#Generator-1442"><span class="linenos">1442</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-1443"><a href="#Generator-1443"><span class="linenos">1443</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-1444"><a href="#Generator-1444"><span class="linenos">1444</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-1445"><a href="#Generator-1445"><span class="linenos">1445</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-1446"><a href="#Generator-1446"><span class="linenos">1446</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-1447"><a href="#Generator-1447"><span class="linenos">1447</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;lock&quot;</span><span class="p">),</span>
+</span><span id="Generator-1448"><a href="#Generator-1448"><span class="linenos">1448</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;sample&quot;</span><span class="p">),</span>
+</span><span id="Generator-1449"><a href="#Generator-1449"><span class="linenos">1449</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-1450"><a href="#Generator-1450"><span class="linenos">1450</span></a> <span class="p">)</span>
+</span><span id="Generator-1451"><a href="#Generator-1451"><span class="linenos">1451</span></a>
+</span><span id="Generator-1452"><a href="#Generator-1452"><span class="linenos">1452</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-1453"><a href="#Generator-1453"><span class="linenos">1453</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-1454"><a href="#Generator-1454"><span class="linenos">1454</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 class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1455"><a href="#Generator-1455"><span class="linenos">1455</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-1456"><a href="#Generator-1456"><span class="linenos">1456</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-1457"><a href="#Generator-1457"><span class="linenos">1457</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-1458"><a href="#Generator-1458"><span class="linenos">1458</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-1459"><a href="#Generator-1459"><span class="linenos">1459</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-1460"><a href="#Generator-1460"><span class="linenos">1460</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-1461"><a href="#Generator-1461"><span class="linenos">1461</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1462"><a href="#Generator-1462"><span class="linenos">1462</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">kind</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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator-1463"><a href="#Generator-1463"><span class="linenos">1463</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-1464"><a href="#Generator-1464"><span class="linenos">1464</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-1465"><a href="#Generator-1465"><span class="linenos">1465</span></a> <span class="p">)</span>
+</span><span id="Generator-1466"><a href="#Generator-1466"><span class="linenos">1466</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-1467"><a href="#Generator-1467"><span class="linenos">1467</span></a>
+</span><span id="Generator-1468"><a href="#Generator-1468"><span class="linenos">1468</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-1469"><a href="#Generator-1469"><span class="linenos">1469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1470"><a href="#Generator-1470"><span class="linenos">1470</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-1471"><a href="#Generator-1471"><span class="linenos">1471</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="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-1472"><a href="#Generator-1472"><span class="linenos">1472</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">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1473"><a href="#Generator-1473"><span class="linenos">1473</span></a>
+</span><span id="Generator-1474"><a href="#Generator-1474"><span class="linenos">1474</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-1475"><a href="#Generator-1475"><span class="linenos">1475</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-1476"><a href="#Generator-1476"><span class="linenos">1476</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-1477"><a href="#Generator-1477"><span class="linenos">1477</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-1478"><a href="#Generator-1478"><span class="linenos">1478</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-1479"><a href="#Generator-1479"><span class="linenos">1479</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-1480"><a href="#Generator-1480"><span class="linenos">1480</span></a>
+</span><span id="Generator-1481"><a href="#Generator-1481"><span class="linenos">1481</span></a> <span class="k">def</span> <span class="nf">structkwarg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1482"><a href="#Generator-1482"><span class="linenos">1482</span></a> <span class="k">return</span> <span class="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-1483"><a href="#Generator-1483"><span class="linenos">1483</span></a>
+</span><span id="Generator-1484"><a href="#Generator-1484"><span class="linenos">1484</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-1485"><a href="#Generator-1485"><span class="linenos">1485</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1486"><a href="#Generator-1486"><span class="linenos">1486</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="se">}}</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;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">this</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="k">return</span> <span class="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-1488"><a href="#Generator-1488"><span class="linenos">1488</span></a>
+</span><span id="Generator-1489"><a href="#Generator-1489"><span class="linenos">1489</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-1490"><a href="#Generator-1490"><span class="linenos">1490</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1491"><a href="#Generator-1491"><span class="linenos">1491</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-1492"><a href="#Generator-1492"><span class="linenos">1492</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator-1493"><a href="#Generator-1493"><span class="linenos">1493</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-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="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-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">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-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="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-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">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-1500"><a href="#Generator-1500"><span class="linenos">1500</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-1501"><a href="#Generator-1501"><span class="linenos">1501</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-1502"><a href="#Generator-1502"><span class="linenos">1502</span></a>
+</span><span id="Generator-1503"><a href="#Generator-1503"><span class="linenos">1503</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-1504"><a href="#Generator-1504"><span class="linenos">1504</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1505"><a href="#Generator-1505"><span class="linenos">1505</span></a> <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-1506"><a href="#Generator-1506"><span class="linenos">1506</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="Generator-1507"><a href="#Generator-1507"><span class="linenos">1507</span></a> <span class="bp">self</span><span 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><span id="Generator-1508"><a href="#Generator-1508"><span class="linenos">1508</span></a> <span class="p">)</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">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-1511"><a href="#Generator-1511"><span class="linenos">1511</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-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;</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-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">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-1515"><a href="#Generator-1515"><span class="linenos">1515</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-1516"><a href="#Generator-1516"><span class="linenos">1516</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator-1517"><a href="#Generator-1517"><span class="linenos">1517</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-1518"><a href="#Generator-1518"><span class="linenos">1518</span></a> <span class="p">)</span>
-</span><span id="Generator-1519"><a href="#Generator-1519"><span class="linenos">1519</span></a>
-</span><span id="Generator-1520"><a href="#Generator-1520"><span class="linenos">1520</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-1521"><a href="#Generator-1521"><span class="linenos">1521</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-1522"><a href="#Generator-1522"><span class="linenos">1522</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-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;UNION</span><span class="si">{</span><span class="n">kind</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">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-1526"><a href="#Generator-1526"><span class="linenos">1526</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-1527"><a href="#Generator-1527"><span class="linenos">1527</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-1528"><a href="#Generator-1528"><span class="linenos">1528</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">unnest_column_only</span><span class="p">:</span>
-</span><span id="Generator-1529"><a href="#Generator-1529"><span class="linenos">1529</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-1530"><a href="#Generator-1530"><span class="linenos">1530</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-1531"><a href="#Generator-1531"><span class="linenos">1531</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1532"><a href="#Generator-1532"><span class="linenos">1532</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-1533"><a href="#Generator-1533"><span class="linenos">1533</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-1534"><a href="#Generator-1534"><span class="linenos">1534</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="s2">&quot; WITH ORDINALITY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1535"><a href="#Generator-1535"><span class="linenos">1535</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-1536"><a href="#Generator-1536"><span class="linenos">1536</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; 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 class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1537"><a href="#Generator-1537"><span class="linenos">1537</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">ordinality</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">offset</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1538"><a href="#Generator-1538"><span class="linenos">1538</span></a>
-</span><span id="Generator-1539"><a href="#Generator-1539"><span class="linenos">1539</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-1540"><a href="#Generator-1540"><span class="linenos">1540</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-1541"><a href="#Generator-1541"><span class="linenos">1541</span></a> <span class="k">return</span> <span class="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-1542"><a href="#Generator-1542"><span class="linenos">1542</span></a>
-</span><span id="Generator-1543"><a href="#Generator-1543"><span class="linenos">1543</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-1544"><a href="#Generator-1544"><span class="linenos">1544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1545"><a href="#Generator-1545"><span class="linenos">1545</span></a>
-</span><span id="Generator-1546"><a href="#Generator-1546"><span class="linenos">1546</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-1510"><a href="#Generator-1510"><span class="linenos">1510</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-1511"><a href="#Generator-1511"><span class="linenos">1511</span></a>
+</span><span id="Generator-1512"><a href="#Generator-1512"><span class="linenos">1512</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-1513"><a href="#Generator-1513"><span class="linenos">1513</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-1514"><a href="#Generator-1514"><span class="linenos">1514</span></a> <span class="k">return</span> <span class="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-1515"><a href="#Generator-1515"><span class="linenos">1515</span></a>
+</span><span id="Generator-1516"><a href="#Generator-1516"><span class="linenos">1516</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-1517"><a href="#Generator-1517"><span class="linenos">1517</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-1518"><a href="#Generator-1518"><span class="linenos">1518</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator-1519"><a href="#Generator-1519"><span class="linenos">1519</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-1520"><a href="#Generator-1520"><span class="linenos">1520</span></a> <span class="p">)</span>
+</span><span id="Generator-1521"><a href="#Generator-1521"><span class="linenos">1521</span></a>
+</span><span id="Generator-1522"><a href="#Generator-1522"><span class="linenos">1522</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-1523"><a href="#Generator-1523"><span class="linenos">1523</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-1524"><a href="#Generator-1524"><span class="linenos">1524</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-1525"><a href="#Generator-1525"><span class="linenos">1525</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="s2">&quot;</span>
+</span><span id="Generator-1526"><a href="#Generator-1526"><span class="linenos">1526</span></a>
+</span><span id="Generator-1527"><a href="#Generator-1527"><span class="linenos">1527</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-1528"><a href="#Generator-1528"><span class="linenos">1528</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-1529"><a href="#Generator-1529"><span class="linenos">1529</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-1530"><a href="#Generator-1530"><span class="linenos">1530</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">unnest_column_only</span><span class="p">:</span>
+</span><span id="Generator-1531"><a href="#Generator-1531"><span class="linenos">1531</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-1532"><a href="#Generator-1532"><span class="linenos">1532</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-1533"><a href="#Generator-1533"><span class="linenos">1533</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1534"><a href="#Generator-1534"><span class="linenos">1534</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-1535"><a href="#Generator-1535"><span class="linenos">1535</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-1536"><a href="#Generator-1536"><span class="linenos">1536</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="s2">&quot; WITH ORDINALITY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1537"><a href="#Generator-1537"><span class="linenos">1537</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-1538"><a href="#Generator-1538"><span class="linenos">1538</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; 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 class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1539"><a href="#Generator-1539"><span class="linenos">1539</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">ordinality</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">offset</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-1540"><a href="#Generator-1540"><span class="linenos">1540</span></a>
+</span><span id="Generator-1541"><a href="#Generator-1541"><span class="linenos">1541</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-1542"><a href="#Generator-1542"><span class="linenos">1542</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-1543"><a href="#Generator-1543"><span class="linenos">1543</span></a> <span class="k">return</span> <span class="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-1544"><a href="#Generator-1544"><span class="linenos">1544</span></a>
+</span><span id="Generator-1545"><a href="#Generator-1545"><span class="linenos">1545</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-1546"><a href="#Generator-1546"><span class="linenos">1546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
</span><span id="Generator-1547"><a href="#Generator-1547"><span class="linenos">1547</span></a>
-</span><span id="Generator-1548"><a href="#Generator-1548"><span class="linenos">1548</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-1549"><a href="#Generator-1549"><span class="linenos">1549</span></a> <span class="n">order_sql</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-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">partition_sql</span> <span class="o">=</span> <span class="n">partition</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="ow">and</span> <span class="n">order</span> <span class="k">else</span> <span class="n">partition</span>
+</span><span id="Generator-1548"><a href="#Generator-1548"><span class="linenos">1548</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-1549"><a href="#Generator-1549"><span class="linenos">1549</span></a>
+</span><span id="Generator-1550"><a href="#Generator-1550"><span class="linenos">1550</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-1551"><a href="#Generator-1551"><span class="linenos">1551</span></a> <span class="n">order_sql</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-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">spec</span> <span class="o">=</span> <span class="n">expression</span><span class="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-1554"><a href="#Generator-1554"><span class="linenos">1554</span></a> <span class="n">spec_sql</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">window_spec_sql</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">spec</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><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="bp">self</span><span class="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-1557"><a href="#Generator-1557"><span class="linenos">1557</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="s1">&#39;OVER&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-1558"><a href="#Generator-1558"><span class="linenos">1558</span></a>
-</span><span id="Generator-1559"><a href="#Generator-1559"><span class="linenos">1559</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-1560"><a href="#Generator-1560"><span class="linenos">1560</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-1553"><a href="#Generator-1553"><span class="linenos">1553</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="n">partition</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="ow">and</span> <span class="n">order</span> <span class="k">else</span> <span class="n">partition</span>
+</span><span id="Generator-1554"><a href="#Generator-1554"><span class="linenos">1554</span></a>
+</span><span id="Generator-1555"><a href="#Generator-1555"><span class="linenos">1555</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="n">expression</span><span class="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-1556"><a href="#Generator-1556"><span class="linenos">1556</span></a> <span class="n">spec_sql</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">windowspec_sql</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">spec</span> <span class="k">else</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">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-1559"><a href="#Generator-1559"><span class="linenos">1559</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-1560"><a href="#Generator-1560"><span class="linenos">1560</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-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="n">window_args</span> <span class="o">=</span> <span class="n">alias</span> <span class="o">+</span> <span class="n">partition_sql</span> <span class="o">+</span> <span class="n">order_sql</span> <span class="o">+</span> <span class="n">spec_sql</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">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">window_args</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-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">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-1567"><a href="#Generator-1567"><span class="linenos">1567</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-1568"><a href="#Generator-1568"><span class="linenos">1568</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-1562"><a href="#Generator-1562"><span class="linenos">1562</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-1563"><a href="#Generator-1563"><span class="linenos">1563</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator-1564"><a href="#Generator-1564"><span class="linenos">1564</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-1565"><a href="#Generator-1565"><span class="linenos">1565</span></a> <span class="n">first</span> <span class="o">=</span> <span class="n">first</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1566"><a href="#Generator-1566"><span class="linenos">1566</span></a>
+</span><span id="Generator-1567"><a href="#Generator-1567"><span class="linenos">1567</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-1568"><a href="#Generator-1568"><span class="linenos">1568</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-1569"><a href="#Generator-1569"><span class="linenos">1569</span></a>
-</span><span id="Generator-1570"><a href="#Generator-1570"><span class="linenos">1570</span></a> <span class="k">def</span> <span class="nf">window_spec_sql</span><span class="p">(</span><span class="bp">self</span><span 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-1571"><a href="#Generator-1571"><span class="linenos">1571</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-1572"><a href="#Generator-1572"><span class="linenos">1572</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-1573"><a href="#Generator-1573"><span class="linenos">1573</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-1574"><a href="#Generator-1574"><span class="linenos">1574</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-1575"><a href="#Generator-1575"><span class="linenos">1575</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="Generator-1576"><a href="#Generator-1576"><span class="linenos">1576</span></a> <span class="p">)</span>
-</span><span id="Generator-1577"><a href="#Generator-1577"><span class="linenos">1577</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-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="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-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">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-1582"><a href="#Generator-1582"><span class="linenos">1582</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-1583"><a href="#Generator-1583"><span class="linenos">1583</span></a>
-</span><span id="Generator-1584"><a href="#Generator-1584"><span class="linenos">1584</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-1585"><a href="#Generator-1585"><span class="linenos">1585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1586"><a href="#Generator-1586"><span class="linenos">1586</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-1587"><a href="#Generator-1587"><span class="linenos">1587</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-1588"><a href="#Generator-1588"><span class="linenos">1588</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-1589"><a href="#Generator-1589"><span class="linenos">1589</span></a>
-</span><span id="Generator-1590"><a href="#Generator-1590"><span class="linenos">1590</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-1591"><a href="#Generator-1591"><span class="linenos">1591</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">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">expressions</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">)</span>
-</span><span id="Generator-1592"><a href="#Generator-1592"><span class="linenos">1592</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-1593"><a href="#Generator-1593"><span class="linenos">1593</span></a>
-</span><span id="Generator-1594"><a href="#Generator-1594"><span class="linenos">1594</span></a> <span class="k">return</span> <span class="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-1595"><a href="#Generator-1595"><span class="linenos">1595</span></a>
-</span><span id="Generator-1596"><a href="#Generator-1596"><span class="linenos">1596</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-1597"><a href="#Generator-1597"><span class="linenos">1597</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-1598"><a href="#Generator-1598"><span class="linenos">1598</span></a>
-</span><span id="Generator-1599"><a href="#Generator-1599"><span class="linenos">1599</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-1600"><a href="#Generator-1600"><span class="linenos">1600</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1601"><a href="#Generator-1601"><span class="linenos">1601</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-1602"><a href="#Generator-1602"><span class="linenos">1602</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-1603"><a href="#Generator-1603"><span class="linenos">1603</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-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">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-1606"><a href="#Generator-1606"><span class="linenos">1606</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-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">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-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="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-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">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-1613"><a href="#Generator-1613"><span class="linenos">1613</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-1614"><a href="#Generator-1614"><span class="linenos">1614</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-1570"><a href="#Generator-1570"><span class="linenos">1570</span></a> <span class="n">window_args</span> <span class="o">=</span> <span class="n">alias</span> <span class="o">+</span> <span class="n">first</span> <span class="o">+</span> <span class="n">partition_sql</span> <span class="o">+</span> <span class="n">order_sql</span> <span class="o">+</span> <span class="n">spec_sql</span>
+</span><span id="Generator-1571"><a href="#Generator-1571"><span class="linenos">1571</span></a>
+</span><span id="Generator-1572"><a href="#Generator-1572"><span class="linenos">1572</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">window_args</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-1573"><a href="#Generator-1573"><span class="linenos">1573</span></a>
+</span><span id="Generator-1574"><a href="#Generator-1574"><span class="linenos">1574</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-1575"><a href="#Generator-1575"><span class="linenos">1575</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-1576"><a href="#Generator-1576"><span class="linenos">1576</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-1577"><a href="#Generator-1577"><span class="linenos">1577</span></a>
+</span><span id="Generator-1578"><a href="#Generator-1578"><span class="linenos">1578</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-1579"><a href="#Generator-1579"><span class="linenos">1579</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-1580"><a href="#Generator-1580"><span class="linenos">1580</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-1581"><a href="#Generator-1581"><span class="linenos">1581</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-1582"><a href="#Generator-1582"><span class="linenos">1582</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-1583"><a href="#Generator-1583"><span class="linenos">1583</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="Generator-1584"><a href="#Generator-1584"><span class="linenos">1584</span></a> <span class="p">)</span>
+</span><span id="Generator-1585"><a href="#Generator-1585"><span class="linenos">1585</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-1586"><a href="#Generator-1586"><span class="linenos">1586</span></a>
+</span><span id="Generator-1587"><a href="#Generator-1587"><span class="linenos">1587</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-1588"><a href="#Generator-1588"><span class="linenos">1588</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1589"><a href="#Generator-1589"><span class="linenos">1589</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-1590"><a href="#Generator-1590"><span class="linenos">1590</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-1591"><a href="#Generator-1591"><span class="linenos">1591</span></a>
+</span><span id="Generator-1592"><a href="#Generator-1592"><span class="linenos">1592</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-1593"><a href="#Generator-1593"><span class="linenos">1593</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1594"><a href="#Generator-1594"><span class="linenos">1594</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-1595"><a href="#Generator-1595"><span class="linenos">1595</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-1596"><a href="#Generator-1596"><span class="linenos">1596</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-1597"><a href="#Generator-1597"><span class="linenos">1597</span></a>
+</span><span id="Generator-1598"><a href="#Generator-1598"><span class="linenos">1598</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-1599"><a href="#Generator-1599"><span class="linenos">1599</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">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">expressions</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">)</span>
+</span><span id="Generator-1600"><a href="#Generator-1600"><span class="linenos">1600</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-1601"><a href="#Generator-1601"><span class="linenos">1601</span></a>
+</span><span id="Generator-1602"><a href="#Generator-1602"><span class="linenos">1602</span></a> <span class="k">return</span> <span class="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-1603"><a href="#Generator-1603"><span class="linenos">1603</span></a>
+</span><span id="Generator-1604"><a href="#Generator-1604"><span class="linenos">1604</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-1605"><a href="#Generator-1605"><span class="linenos">1605</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-1606"><a href="#Generator-1606"><span class="linenos">1606</span></a>
+</span><span id="Generator-1607"><a href="#Generator-1607"><span class="linenos">1607</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-1608"><a href="#Generator-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="Generator-1609"><a href="#Generator-1609"><span class="linenos">1609</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-1610"><a href="#Generator-1610"><span class="linenos">1610</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-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;ANY </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="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-1614"><a href="#Generator-1614"><span class="linenos">1614</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-1615"><a href="#Generator-1615"><span class="linenos">1615</span></a>
-</span><span id="Generator-1616"><a href="#Generator-1616"><span class="linenos">1616</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-1617"><a href="#Generator-1617"><span class="linenos">1617</span></a>
-</span><span id="Generator-1618"><a href="#Generator-1618"><span class="linenos">1618</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-1619"><a href="#Generator-1619"><span class="linenos">1619</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-1620"><a href="#Generator-1620"><span class="linenos">1620</span></a>
-</span><span id="Generator-1621"><a href="#Generator-1621"><span class="linenos">1621</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-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="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-1624"><a href="#Generator-1624"><span class="linenos">1624</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-1616"><a href="#Generator-1616"><span class="linenos">1616</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-1617"><a href="#Generator-1617"><span class="linenos">1617</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1618"><a href="#Generator-1618"><span class="linenos">1618</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-1619"><a href="#Generator-1619"><span class="linenos">1619</span></a>
+</span><span id="Generator-1620"><a href="#Generator-1620"><span class="linenos">1620</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-1621"><a href="#Generator-1621"><span class="linenos">1621</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-1622"><a href="#Generator-1622"><span class="linenos">1622</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-1623"><a href="#Generator-1623"><span class="linenos">1623</span></a>
+</span><span id="Generator-1624"><a href="#Generator-1624"><span class="linenos">1624</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-1625"><a href="#Generator-1625"><span class="linenos">1625</span></a>
-</span><span id="Generator-1626"><a href="#Generator-1626"><span class="linenos">1626</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-1627"><a href="#Generator-1627"><span class="linenos">1627</span></a>
-</span><span id="Generator-1628"><a href="#Generator-1628"><span class="linenos">1628</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-1629"><a href="#Generator-1629"><span class="linenos">1629</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1630"><a href="#Generator-1630"><span class="linenos">1630</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-1631"><a href="#Generator-1631"><span class="linenos">1631</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-1632"><a href="#Generator-1632"><span class="linenos">1632</span></a>
-</span><span id="Generator-1633"><a href="#Generator-1633"><span class="linenos">1633</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-1634"><a href="#Generator-1634"><span class="linenos">1634</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1635"><a href="#Generator-1635"><span class="linenos">1635</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-1636"><a href="#Generator-1636"><span class="linenos">1636</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-1637"><a href="#Generator-1637"><span class="linenos">1637</span></a>
-</span><span id="Generator-1638"><a href="#Generator-1638"><span class="linenos">1638</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-1639"><a href="#Generator-1639"><span class="linenos">1639</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-1626"><a href="#Generator-1626"><span class="linenos">1626</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator-1627"><a href="#Generator-1627"><span class="linenos">1627</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-1628"><a href="#Generator-1628"><span class="linenos">1628</span></a>
+</span><span id="Generator-1629"><a href="#Generator-1629"><span class="linenos">1629</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-1630"><a href="#Generator-1630"><span class="linenos">1630</span></a>
+</span><span id="Generator-1631"><a href="#Generator-1631"><span class="linenos">1631</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-1632"><a href="#Generator-1632"><span class="linenos">1632</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-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">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-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">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-1637"><a href="#Generator-1637"><span class="linenos">1637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1638"><a href="#Generator-1638"><span class="linenos">1638</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-1639"><a href="#Generator-1639"><span class="linenos">1639</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-1640"><a href="#Generator-1640"><span class="linenos">1640</span></a>
-</span><span id="Generator-1641"><a href="#Generator-1641"><span class="linenos">1641</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-1642"><a href="#Generator-1642"><span class="linenos">1642</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-1643"><a href="#Generator-1643"><span class="linenos">1643</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-1644"><a href="#Generator-1644"><span class="linenos">1644</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-1645"><a href="#Generator-1645"><span class="linenos">1645</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1646"><a href="#Generator-1646"><span class="linenos">1646</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-1647"><a href="#Generator-1647"><span class="linenos">1647</span></a>
-</span><span id="Generator-1648"><a href="#Generator-1648"><span class="linenos">1648</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-1649"><a href="#Generator-1649"><span class="linenos">1649</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator-1650"><a href="#Generator-1650"><span class="linenos">1650</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="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="Generator-1651"><a href="#Generator-1651"><span class="linenos">1651</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-1652"><a href="#Generator-1652"><span class="linenos">1652</span></a>
-</span><span id="Generator-1653"><a href="#Generator-1653"><span class="linenos">1653</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-1654"><a href="#Generator-1654"><span class="linenos">1654</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1655"><a href="#Generator-1655"><span class="linenos">1655</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-1656"><a href="#Generator-1656"><span class="linenos">1656</span></a>
-</span><span id="Generator-1657"><a href="#Generator-1657"><span class="linenos">1657</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-1658"><a href="#Generator-1658"><span class="linenos">1658</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-1659"><a href="#Generator-1659"><span class="linenos">1659</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-1660"><a href="#Generator-1660"><span class="linenos">1660</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-1661"><a href="#Generator-1661"><span class="linenos">1661</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-1662"><a href="#Generator-1662"><span class="linenos">1662</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-1663"><a href="#Generator-1663"><span class="linenos">1663</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-1664"><a href="#Generator-1664"><span class="linenos">1664</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-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;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-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="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-1668"><a href="#Generator-1668"><span class="linenos">1668</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-1669"><a href="#Generator-1669"><span class="linenos">1669</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-1670"><a href="#Generator-1670"><span class="linenos">1670</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-1671"><a href="#Generator-1671"><span class="linenos">1671</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-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">def</span> <span class="nf">unique_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unique</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1674"><a href="#Generator-1674"><span class="linenos">1674</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;expressions&quot;</span><span class="p">)</span>
-</span><span id="Generator-1675"><a href="#Generator-1675"><span class="linenos">1675</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">columns</span><span class="si">}</span><span class="s2">)&quot;</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">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-1678"><a href="#Generator-1678"><span class="linenos">1678</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><span id="Generator-1679"><a href="#Generator-1679"><span class="linenos">1679</span></a> <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="o">.</span><span class="n">copy</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-1680"><a href="#Generator-1680"><span class="linenos">1680</span></a> <span class="p">)</span>
-</span><span id="Generator-1681"><a href="#Generator-1681"><span class="linenos">1681</span></a>
-</span><span id="Generator-1682"><a href="#Generator-1682"><span class="linenos">1682</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-1683"><a href="#Generator-1683"><span class="linenos">1683</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-1684"><a href="#Generator-1684"><span class="linenos">1684</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-1685"><a href="#Generator-1685"><span class="linenos">1685</span></a> <span class="k">return</span> <span class="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-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">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-1688"><a href="#Generator-1688"><span class="linenos">1688</span></a> <span class="k">return</span> <span class="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-1641"><a href="#Generator-1641"><span class="linenos">1641</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-1642"><a href="#Generator-1642"><span class="linenos">1642</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-1643"><a href="#Generator-1643"><span class="linenos">1643</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-1644"><a href="#Generator-1644"><span class="linenos">1644</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-1645"><a href="#Generator-1645"><span class="linenos">1645</span></a>
+</span><span id="Generator-1646"><a href="#Generator-1646"><span class="linenos">1646</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-1647"><a href="#Generator-1647"><span class="linenos">1647</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</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="bp">self</span><span class="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-1649"><a href="#Generator-1649"><span class="linenos">1649</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-1650"><a href="#Generator-1650"><span class="linenos">1650</span></a>
+</span><span id="Generator-1651"><a href="#Generator-1651"><span class="linenos">1651</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-1652"><a href="#Generator-1652"><span class="linenos">1652</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-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">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-1655"><a href="#Generator-1655"><span class="linenos">1655</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-1656"><a href="#Generator-1656"><span class="linenos">1656</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-1657"><a href="#Generator-1657"><span class="linenos">1657</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-1658"><a href="#Generator-1658"><span class="linenos">1658</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1659"><a href="#Generator-1659"><span class="linenos">1659</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-1660"><a href="#Generator-1660"><span class="linenos">1660</span></a>
+</span><span id="Generator-1661"><a href="#Generator-1661"><span class="linenos">1661</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-1662"><a href="#Generator-1662"><span class="linenos">1662</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator-1663"><a href="#Generator-1663"><span class="linenos">1663</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="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="Generator-1664"><a href="#Generator-1664"><span class="linenos">1664</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-1665"><a href="#Generator-1665"><span class="linenos">1665</span></a>
+</span><span id="Generator-1666"><a href="#Generator-1666"><span class="linenos">1666</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-1667"><a href="#Generator-1667"><span class="linenos">1667</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1668"><a href="#Generator-1668"><span class="linenos">1668</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-1669"><a href="#Generator-1669"><span class="linenos">1669</span></a>
+</span><span id="Generator-1670"><a href="#Generator-1670"><span class="linenos">1670</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-1671"><a href="#Generator-1671"><span class="linenos">1671</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-1672"><a href="#Generator-1672"><span class="linenos">1672</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-1673"><a href="#Generator-1673"><span class="linenos">1673</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-1674"><a href="#Generator-1674"><span class="linenos">1674</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-1675"><a href="#Generator-1675"><span class="linenos">1675</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-1676"><a href="#Generator-1676"><span class="linenos">1676</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-1677"><a href="#Generator-1677"><span class="linenos">1677</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-1678"><a href="#Generator-1678"><span class="linenos">1678</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-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">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-1681"><a href="#Generator-1681"><span class="linenos">1681</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-1682"><a href="#Generator-1682"><span class="linenos">1682</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-1683"><a href="#Generator-1683"><span class="linenos">1683</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-1684"><a href="#Generator-1684"><span class="linenos">1684</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-1685"><a href="#Generator-1685"><span class="linenos">1685</span></a>
+</span><span id="Generator-1686"><a href="#Generator-1686"><span class="linenos">1686</span></a> <span class="k">def</span> <span class="nf">unique_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unique</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1687"><a href="#Generator-1687"><span class="linenos">1687</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;expressions&quot;</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="sa">f</span><span class="s2">&quot;UNIQUE (</span><span class="si">{</span><span class="n">columns</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="Generator-1689"><a href="#Generator-1689"><span class="linenos">1689</span></a>
-</span><span id="Generator-1690"><a href="#Generator-1690"><span class="linenos">1690</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="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1691"><a href="#Generator-1691"><span class="linenos">1691</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-1692"><a href="#Generator-1692"><span class="linenos">1692</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-1693"><a href="#Generator-1693"><span class="linenos">1693</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-1694"><a href="#Generator-1694"><span class="linenos">1694</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-1695"><a href="#Generator-1695"><span class="linenos">1695</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-1696"><a href="#Generator-1696"><span class="linenos">1696</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-1697"><a href="#Generator-1697"><span class="linenos">1697</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1698"><a href="#Generator-1698"><span class="linenos">1698</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-1699"><a href="#Generator-1699"><span class="linenos">1699</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-1700"><a href="#Generator-1700"><span class="linenos">1700</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-1701"><a href="#Generator-1701"><span class="linenos">1701</span></a> <span class="n">format_json</span> <span class="o">=</span> <span class="s2">&quot; FORMAT 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;format_json&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="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-1703"><a href="#Generator-1703"><span class="linenos">1703</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-1704"><a href="#Generator-1704"><span class="linenos">1704</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;JSON_OBJECT(</span><span class="si">{</span><span class="n">expressions</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">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1705"><a href="#Generator-1705"><span class="linenos">1705</span></a>
-</span><span id="Generator-1706"><a href="#Generator-1706"><span class="linenos">1706</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-1707"><a href="#Generator-1707"><span class="linenos">1707</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-1708"><a href="#Generator-1708"><span class="linenos">1708</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-1709"><a href="#Generator-1709"><span class="linenos">1709</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-1710"><a href="#Generator-1710"><span class="linenos">1710</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-1711"><a href="#Generator-1711"><span class="linenos">1711</span></a>
-</span><span id="Generator-1712"><a href="#Generator-1712"><span class="linenos">1712</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Generator-1713"><a href="#Generator-1713"><span class="linenos">1713</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-1714"><a href="#Generator-1714"><span class="linenos">1714</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Generator-1715"><a href="#Generator-1715"><span class="linenos">1715</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-1716"><a href="#Generator-1716"><span class="linenos">1716</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Generator-1717"><a href="#Generator-1717"><span class="linenos">1717</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-1718"><a href="#Generator-1718"><span class="linenos">1718</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1719"><a href="#Generator-1719"><span class="linenos">1719</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-1720"><a href="#Generator-1720"><span class="linenos">1720</span></a>
-</span><span id="Generator-1721"><a href="#Generator-1721"><span class="linenos">1721</span></a> <span class="k">return</span> <span class="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-1722"><a href="#Generator-1722"><span class="linenos">1722</span></a>
-</span><span id="Generator-1723"><a href="#Generator-1723"><span class="linenos">1723</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-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;(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-1725"><a href="#Generator-1725"><span class="linenos">1725</span></a>
-</span><span id="Generator-1726"><a href="#Generator-1726"><span class="linenos">1726</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-1727"><a href="#Generator-1727"><span class="linenos">1727</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-1728"><a href="#Generator-1728"><span class="linenos">1728</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-1729"><a href="#Generator-1729"><span class="linenos">1729</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="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span>
-</span><span id="Generator-1730"><a href="#Generator-1730"><span class="linenos">1730</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-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="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-1733"><a href="#Generator-1733"><span class="linenos">1733</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-1734"><a href="#Generator-1734"><span class="linenos">1734</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><span id="Generator-1690"><a href="#Generator-1690"><span class="linenos">1690</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-1691"><a href="#Generator-1691"><span class="linenos">1691</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><span id="Generator-1692"><a href="#Generator-1692"><span class="linenos">1692</span></a> <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="o">.</span><span class="n">copy</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-1693"><a href="#Generator-1693"><span class="linenos">1693</span></a> <span class="p">)</span>
+</span><span id="Generator-1694"><a href="#Generator-1694"><span class="linenos">1694</span></a>
+</span><span id="Generator-1695"><a href="#Generator-1695"><span class="linenos">1695</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-1696"><a href="#Generator-1696"><span class="linenos">1696</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-1697"><a href="#Generator-1697"><span class="linenos">1697</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-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="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-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">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-1701"><a href="#Generator-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-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">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="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">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-1705"><a href="#Generator-1705"><span class="linenos">1705</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-1706"><a href="#Generator-1706"><span class="linenos">1706</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-1707"><a href="#Generator-1707"><span class="linenos">1707</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-1708"><a href="#Generator-1708"><span class="linenos">1708</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-1709"><a href="#Generator-1709"><span class="linenos">1709</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-1710"><a href="#Generator-1710"><span class="linenos">1710</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1711"><a href="#Generator-1711"><span class="linenos">1711</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1712"><a href="#Generator-1712"><span class="linenos">1712</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-1713"><a href="#Generator-1713"><span class="linenos">1713</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-1714"><a href="#Generator-1714"><span class="linenos">1714</span></a> <span class="n">format_json</span> <span class="o">=</span> <span class="s2">&quot; FORMAT 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;format_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-1715"><a href="#Generator-1715"><span class="linenos">1715</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-1716"><a href="#Generator-1716"><span class="linenos">1716</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-1717"><a href="#Generator-1717"><span class="linenos">1717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;JSON_OBJECT(</span><span class="si">{</span><span class="n">expressions</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">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1718"><a href="#Generator-1718"><span class="linenos">1718</span></a>
+</span><span id="Generator-1719"><a href="#Generator-1719"><span class="linenos">1719</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-1720"><a href="#Generator-1720"><span class="linenos">1720</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-1721"><a href="#Generator-1721"><span class="linenos">1721</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-1722"><a href="#Generator-1722"><span class="linenos">1722</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-1723"><a href="#Generator-1723"><span class="linenos">1723</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-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="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Generator-1726"><a href="#Generator-1726"><span class="linenos">1726</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-1727"><a href="#Generator-1727"><span class="linenos">1727</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Generator-1728"><a href="#Generator-1728"><span class="linenos">1728</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-1729"><a href="#Generator-1729"><span class="linenos">1729</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Generator-1730"><a href="#Generator-1730"><span class="linenos">1730</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-1731"><a href="#Generator-1731"><span class="linenos">1731</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1732"><a href="#Generator-1732"><span class="linenos">1732</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-1733"><a href="#Generator-1733"><span class="linenos">1733</span></a>
+</span><span id="Generator-1734"><a href="#Generator-1734"><span class="linenos">1734</span></a> <span class="k">return</span> <span class="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-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">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1737"><a href="#Generator-1737"><span class="linenos">1737</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Generator-1738"><a href="#Generator-1738"><span class="linenos">1738</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-1739"><a href="#Generator-1739"><span class="linenos">1739</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-1740"><a href="#Generator-1740"><span class="linenos">1740</span></a>
-</span><span id="Generator-1741"><a href="#Generator-1741"><span class="linenos">1741</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-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">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-1744"><a href="#Generator-1744"><span class="linenos">1744</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-1745"><a href="#Generator-1745"><span class="linenos">1745</span></a>
-</span><span id="Generator-1746"><a href="#Generator-1746"><span class="linenos">1746</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-1747"><a href="#Generator-1747"><span class="linenos">1747</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1748"><a href="#Generator-1748"><span class="linenos">1748</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-1749"><a href="#Generator-1749"><span class="linenos">1749</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-1750"><a href="#Generator-1750"><span class="linenos">1750</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-1751"><a href="#Generator-1751"><span class="linenos">1751</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-1752"><a href="#Generator-1752"><span class="linenos">1752</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-1736"><a href="#Generator-1736"><span class="linenos">1736</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-1737"><a href="#Generator-1737"><span class="linenos">1737</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-1738"><a href="#Generator-1738"><span class="linenos">1738</span></a>
+</span><span id="Generator-1739"><a href="#Generator-1739"><span class="linenos">1739</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-1740"><a href="#Generator-1740"><span class="linenos">1740</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-1741"><a href="#Generator-1741"><span class="linenos">1741</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-1742"><a href="#Generator-1742"><span class="linenos">1742</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="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span>
+</span><span id="Generator-1743"><a href="#Generator-1743"><span class="linenos">1743</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-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">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-1746"><a href="#Generator-1746"><span class="linenos">1746</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-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;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><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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1750"><a href="#Generator-1750"><span class="linenos">1750</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Generator-1751"><a href="#Generator-1751"><span class="linenos">1751</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-1752"><a href="#Generator-1752"><span class="linenos">1752</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-1753"><a href="#Generator-1753"><span class="linenos">1753</span></a>
-</span><span id="Generator-1754"><a href="#Generator-1754"><span class="linenos">1754</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-1755"><a href="#Generator-1755"><span class="linenos">1755</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-1756"><a href="#Generator-1756"><span class="linenos">1756</span></a>
-</span><span id="Generator-1757"><a href="#Generator-1757"><span class="linenos">1757</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-1758"><a href="#Generator-1758"><span class="linenos">1758</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-1759"><a href="#Generator-1759"><span class="linenos">1759</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-1760"><a href="#Generator-1760"><span class="linenos">1760</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1761"><a href="#Generator-1761"><span class="linenos">1761</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-1762"><a href="#Generator-1762"><span class="linenos">1762</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-1763"><a href="#Generator-1763"><span class="linenos">1763</span></a>
-</span><span id="Generator-1764"><a href="#Generator-1764"><span class="linenos">1764</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-1765"><a href="#Generator-1765"><span class="linenos">1765</span></a>
-</span><span id="Generator-1766"><a href="#Generator-1766"><span class="linenos">1766</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-1767"><a href="#Generator-1767"><span class="linenos">1767</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-1768"><a href="#Generator-1768"><span class="linenos">1768</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-1769"><a href="#Generator-1769"><span class="linenos">1769</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-1770"><a href="#Generator-1770"><span class="linenos">1770</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-1771"><a href="#Generator-1771"><span class="linenos">1771</span></a>
-</span><span id="Generator-1772"><a href="#Generator-1772"><span class="linenos">1772</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-1773"><a href="#Generator-1773"><span class="linenos">1773</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-1774"><a href="#Generator-1774"><span class="linenos">1774</span></a>
-</span><span id="Generator-1775"><a href="#Generator-1775"><span class="linenos">1775</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-1776"><a href="#Generator-1776"><span class="linenos">1776</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-1777"><a href="#Generator-1777"><span class="linenos">1777</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-1778"><a href="#Generator-1778"><span class="linenos">1778</span></a> <span class="k">return</span> <span class="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-1779"><a href="#Generator-1779"><span class="linenos">1779</span></a>
-</span><span id="Generator-1780"><a href="#Generator-1780"><span class="linenos">1780</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-1781"><a href="#Generator-1781"><span class="linenos">1781</span></a> <span class="k">return</span> <span class="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-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">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-1784"><a href="#Generator-1784"><span class="linenos">1784</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1785"><a href="#Generator-1785"><span class="linenos">1785</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-1786"><a href="#Generator-1786"><span class="linenos">1786</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-1754"><a href="#Generator-1754"><span class="linenos">1754</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-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">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-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;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-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">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-1760"><a href="#Generator-1760"><span class="linenos">1760</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1761"><a href="#Generator-1761"><span class="linenos">1761</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-1762"><a href="#Generator-1762"><span class="linenos">1762</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-1763"><a href="#Generator-1763"><span class="linenos">1763</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-1764"><a href="#Generator-1764"><span class="linenos">1764</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-1765"><a href="#Generator-1765"><span class="linenos">1765</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-1766"><a href="#Generator-1766"><span class="linenos">1766</span></a>
+</span><span id="Generator-1767"><a href="#Generator-1767"><span class="linenos">1767</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-1768"><a href="#Generator-1768"><span class="linenos">1768</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-1769"><a href="#Generator-1769"><span class="linenos">1769</span></a>
+</span><span id="Generator-1770"><a href="#Generator-1770"><span class="linenos">1770</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-1771"><a href="#Generator-1771"><span class="linenos">1771</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-1772"><a href="#Generator-1772"><span class="linenos">1772</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-1773"><a href="#Generator-1773"><span class="linenos">1773</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1774"><a href="#Generator-1774"><span class="linenos">1774</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-1775"><a href="#Generator-1775"><span class="linenos">1775</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-1776"><a href="#Generator-1776"><span class="linenos">1776</span></a>
+</span><span id="Generator-1777"><a href="#Generator-1777"><span class="linenos">1777</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-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">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-1780"><a href="#Generator-1780"><span class="linenos">1780</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-1781"><a href="#Generator-1781"><span class="linenos">1781</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-1782"><a href="#Generator-1782"><span class="linenos">1782</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-1783"><a href="#Generator-1783"><span class="linenos">1783</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-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">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-1786"><a href="#Generator-1786"><span class="linenos">1786</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-1787"><a href="#Generator-1787"><span class="linenos">1787</span></a>
-</span><span id="Generator-1788"><a href="#Generator-1788"><span class="linenos">1788</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-1789"><a href="#Generator-1789"><span class="linenos">1789</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-1790"><a href="#Generator-1790"><span class="linenos">1790</span></a>
-</span><span id="Generator-1791"><a href="#Generator-1791"><span class="linenos">1791</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-1792"><a href="#Generator-1792"><span class="linenos">1792</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-1793"><a href="#Generator-1793"><span class="linenos">1793</span></a>
-</span><span id="Generator-1794"><a href="#Generator-1794"><span class="linenos">1794</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-1795"><a href="#Generator-1795"><span class="linenos">1795</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-1796"><a href="#Generator-1796"><span class="linenos">1796</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-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">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="Generator-1799"><a href="#Generator-1799"><span class="linenos">1799</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="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-1800"><a href="#Generator-1800"><span class="linenos">1800</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-1801"><a href="#Generator-1801"><span class="linenos">1801</span></a> <span class="p">)</span>
-</span><span id="Generator-1802"><a href="#Generator-1802"><span class="linenos">1802</span></a>
-</span><span id="Generator-1803"><a href="#Generator-1803"><span class="linenos">1803</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-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">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-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">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-1807"><a href="#Generator-1807"><span class="linenos">1807</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-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="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-1810"><a href="#Generator-1810"><span class="linenos">1810</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-1811"><a href="#Generator-1811"><span class="linenos">1811</span></a>
-</span><span id="Generator-1812"><a href="#Generator-1812"><span class="linenos">1812</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-1813"><a href="#Generator-1813"><span class="linenos">1813</span></a> <span class="k">return</span> <span class="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-1814"><a href="#Generator-1814"><span class="linenos">1814</span></a>
-</span><span id="Generator-1815"><a href="#Generator-1815"><span class="linenos">1815</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-1816"><a href="#Generator-1816"><span class="linenos">1816</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-1817"><a href="#Generator-1817"><span class="linenos">1817</span></a>
-</span><span id="Generator-1818"><a href="#Generator-1818"><span class="linenos">1818</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-1819"><a href="#Generator-1819"><span class="linenos">1819</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-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">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-1822"><a href="#Generator-1822"><span class="linenos">1822</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-1823"><a href="#Generator-1823"><span class="linenos">1823</span></a>
-</span><span id="Generator-1824"><a href="#Generator-1824"><span class="linenos">1824</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-1825"><a href="#Generator-1825"><span class="linenos">1825</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-1826"><a href="#Generator-1826"><span class="linenos">1826</span></a>
-</span><span id="Generator-1827"><a href="#Generator-1827"><span class="linenos">1827</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-1828"><a href="#Generator-1828"><span class="linenos">1828</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-1829"><a href="#Generator-1829"><span class="linenos">1829</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-1788"><a href="#Generator-1788"><span class="linenos">1788</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-1789"><a href="#Generator-1789"><span class="linenos">1789</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-1790"><a href="#Generator-1790"><span class="linenos">1790</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-1791"><a href="#Generator-1791"><span class="linenos">1791</span></a> <span class="k">return</span> <span class="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-1792"><a href="#Generator-1792"><span class="linenos">1792</span></a>
+</span><span id="Generator-1793"><a href="#Generator-1793"><span class="linenos">1793</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-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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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-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">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-1797"><a href="#Generator-1797"><span class="linenos">1797</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1798"><a href="#Generator-1798"><span class="linenos">1798</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-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="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-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">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-1802"><a href="#Generator-1802"><span class="linenos">1802</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-1803"><a href="#Generator-1803"><span class="linenos">1803</span></a>
+</span><span id="Generator-1804"><a href="#Generator-1804"><span class="linenos">1804</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-1805"><a href="#Generator-1805"><span class="linenos">1805</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-1806"><a href="#Generator-1806"><span class="linenos">1806</span></a>
+</span><span id="Generator-1807"><a href="#Generator-1807"><span class="linenos">1807</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-1808"><a href="#Generator-1808"><span class="linenos">1808</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-1809"><a href="#Generator-1809"><span class="linenos">1809</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-1810"><a href="#Generator-1810"><span class="linenos">1810</span></a>
+</span><span id="Generator-1811"><a href="#Generator-1811"><span class="linenos">1811</span></a> <span class="n">sqls</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="Generator-1812"><a href="#Generator-1812"><span class="linenos">1812</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="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-1813"><a href="#Generator-1813"><span class="linenos">1813</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-1814"><a href="#Generator-1814"><span class="linenos">1814</span></a> <span class="p">)</span>
+</span><span id="Generator-1815"><a href="#Generator-1815"><span class="linenos">1815</span></a>
+</span><span id="Generator-1816"><a href="#Generator-1816"><span class="linenos">1816</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-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">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-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">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-1820"><a href="#Generator-1820"><span class="linenos">1820</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-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">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-1823"><a href="#Generator-1823"><span class="linenos">1823</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-1824"><a href="#Generator-1824"><span class="linenos">1824</span></a>
+</span><span id="Generator-1825"><a href="#Generator-1825"><span class="linenos">1825</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-1826"><a href="#Generator-1826"><span class="linenos">1826</span></a> <span class="k">return</span> <span class="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-1827"><a href="#Generator-1827"><span class="linenos">1827</span></a>
+</span><span id="Generator-1828"><a href="#Generator-1828"><span class="linenos">1828</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-1829"><a href="#Generator-1829"><span class="linenos">1829</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-1830"><a href="#Generator-1830"><span class="linenos">1830</span></a>
-</span><span id="Generator-1831"><a href="#Generator-1831"><span class="linenos">1831</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-1832"><a href="#Generator-1832"><span class="linenos">1832</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-1831"><a href="#Generator-1831"><span class="linenos">1831</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-1832"><a href="#Generator-1832"><span class="linenos">1832</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-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">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-1835"><a href="#Generator-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</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-1834"><a href="#Generator-1834"><span class="linenos">1834</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-1835"><a href="#Generator-1835"><span class="linenos">1835</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-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="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-1838"><a href="#Generator-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="Generator-1839"><a href="#Generator-1839"><span class="linenos">1839</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-1840"><a href="#Generator-1840"><span class="linenos">1840</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-1841"><a href="#Generator-1841"><span class="linenos">1841</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-1842"><a href="#Generator-1842"><span class="linenos">1842</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-1837"><a href="#Generator-1837"><span class="linenos">1837</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-1838"><a href="#Generator-1838"><span class="linenos">1838</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-1839"><a href="#Generator-1839"><span class="linenos">1839</span></a>
+</span><span id="Generator-1840"><a href="#Generator-1840"><span class="linenos">1840</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-1841"><a href="#Generator-1841"><span class="linenos">1841</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-1842"><a href="#Generator-1842"><span class="linenos">1842</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-1843"><a href="#Generator-1843"><span class="linenos">1843</span></a>
-</span><span id="Generator-1844"><a href="#Generator-1844"><span class="linenos">1844</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-1845"><a href="#Generator-1845"><span class="linenos">1845</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
+</span><span id="Generator-1844"><a href="#Generator-1844"><span class="linenos">1844</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-1845"><a href="#Generator-1845"><span class="linenos">1845</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-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">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-1848"><a href="#Generator-1848"><span class="linenos">1848</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-1849"><a href="#Generator-1849"><span class="linenos">1849</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-1850"><a href="#Generator-1850"><span class="linenos">1850</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-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;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-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">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-1855"><a href="#Generator-1855"><span class="linenos">1855</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-1856"><a href="#Generator-1856"><span class="linenos">1856</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-1857"><a href="#Generator-1857"><span class="linenos">1857</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-1858"><a href="#Generator-1858"><span class="linenos">1858</span></a>
-</span><span id="Generator-1859"><a href="#Generator-1859"><span class="linenos">1859</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-1860"><a href="#Generator-1860"><span class="linenos">1860</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</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="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-1863"><a href="#Generator-1863"><span class="linenos">1863</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="Generator-1864"><a href="#Generator-1864"><span class="linenos">1864</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-1865"><a href="#Generator-1865"><span class="linenos">1865</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-1866"><a href="#Generator-1866"><span class="linenos">1866</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-1867"><a href="#Generator-1867"><span class="linenos">1867</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-1868"><a href="#Generator-1868"><span class="linenos">1868</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"> 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-1869"><a href="#Generator-1869"><span class="linenos">1869</span></a>
-</span><span id="Generator-1870"><a href="#Generator-1870"><span class="linenos">1870</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-1871"><a href="#Generator-1871"><span class="linenos">1871</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator-1872"><a href="#Generator-1872"><span class="linenos">1872</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-1873"><a href="#Generator-1873"><span class="linenos">1873</span></a>
-</span><span id="Generator-1874"><a href="#Generator-1874"><span class="linenos">1874</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-1875"><a href="#Generator-1875"><span class="linenos">1875</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-1876"><a href="#Generator-1876"><span class="linenos">1876</span></a>
-</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;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-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">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-1880"><a href="#Generator-1880"><span class="linenos">1880</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1881"><a href="#Generator-1881"><span class="linenos">1881</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-1847"><a href="#Generator-1847"><span class="linenos">1847</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-1848"><a href="#Generator-1848"><span class="linenos">1848</span></a> <span class="k">return</span> <span class="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="o">.</span><span class="n">upper</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-1849"><a href="#Generator-1849"><span class="linenos">1849</span></a>
+</span><span id="Generator-1850"><a href="#Generator-1850"><span class="linenos">1850</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-1851"><a href="#Generator-1851"><span class="linenos">1851</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1852"><a href="#Generator-1852"><span class="linenos">1852</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-1853"><a href="#Generator-1853"><span class="linenos">1853</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-1854"><a href="#Generator-1854"><span class="linenos">1854</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-1855"><a href="#Generator-1855"><span class="linenos">1855</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-1856"><a href="#Generator-1856"><span class="linenos">1856</span></a>
+</span><span id="Generator-1857"><a href="#Generator-1857"><span class="linenos">1857</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-1858"><a href="#Generator-1858"><span class="linenos">1858</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
+</span><span id="Generator-1859"><a href="#Generator-1859"><span class="linenos">1859</span></a>
+</span><span id="Generator-1860"><a href="#Generator-1860"><span class="linenos">1860</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-1861"><a href="#Generator-1861"><span class="linenos">1861</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-1862"><a href="#Generator-1862"><span class="linenos">1862</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-1863"><a href="#Generator-1863"><span class="linenos">1863</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-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">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-1866"><a href="#Generator-1866"><span class="linenos">1866</span></a>
+</span><span id="Generator-1867"><a href="#Generator-1867"><span class="linenos">1867</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-1868"><a href="#Generator-1868"><span class="linenos">1868</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-1869"><a href="#Generator-1869"><span class="linenos">1869</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-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;ROLLBACK</span><span class="si">{</span><span class="n">savepoint</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">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-1873"><a href="#Generator-1873"><span class="linenos">1873</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</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="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-1876"><a href="#Generator-1876"><span class="linenos">1876</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="Generator-1877"><a href="#Generator-1877"><span class="linenos">1877</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-1878"><a href="#Generator-1878"><span class="linenos">1878</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-1879"><a href="#Generator-1879"><span class="linenos">1879</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-1880"><a href="#Generator-1880"><span class="linenos">1880</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-1881"><a href="#Generator-1881"><span class="linenos">1881</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"> 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-1882"><a href="#Generator-1882"><span class="linenos">1882</span></a>
-</span><span id="Generator-1883"><a href="#Generator-1883"><span class="linenos">1883</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-1884"><a href="#Generator-1884"><span class="linenos">1884</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-1885"><a href="#Generator-1885"><span class="linenos">1885</span></a>
-</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">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-1887"><a href="#Generator-1887"><span class="linenos">1887</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 COLUMN &quot;</span><span class="p">)</span>
-</span><span id="Generator-1888"><a href="#Generator-1888"><span class="linenos">1888</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-1889"><a href="#Generator-1889"><span class="linenos">1889</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-1890"><a href="#Generator-1890"><span class="linenos">1890</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-1891"><a href="#Generator-1891"><span class="linenos">1891</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-1892"><a href="#Generator-1892"><span class="linenos">1892</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-1893"><a href="#Generator-1893"><span class="linenos">1893</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><span id="Generator-1894"><a href="#Generator-1894"><span class="linenos">1894</span></a>
-</span><span id="Generator-1895"><a href="#Generator-1895"><span class="linenos">1895</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-1896"><a href="#Generator-1896"><span class="linenos">1896</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="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-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">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-1899"><a href="#Generator-1899"><span class="linenos">1899</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-1900"><a href="#Generator-1900"><span class="linenos">1900</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-1901"><a href="#Generator-1901"><span class="linenos">1901</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-1902"><a href="#Generator-1902"><span class="linenos">1902</span></a>
-</span><span id="Generator-1903"><a href="#Generator-1903"><span class="linenos">1903</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-1904"><a href="#Generator-1904"><span class="linenos">1904</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-1905"><a href="#Generator-1905"><span class="linenos">1905</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-1906"><a href="#Generator-1906"><span class="linenos">1906</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-1883"><a href="#Generator-1883"><span class="linenos">1883</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-1884"><a href="#Generator-1884"><span class="linenos">1884</span></a> <span class="k">if</span> <span class="n">default</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="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-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="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-1888"><a href="#Generator-1888"><span class="linenos">1888</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-1889"><a href="#Generator-1889"><span class="linenos">1889</span></a>
+</span><span id="Generator-1890"><a href="#Generator-1890"><span class="linenos">1890</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-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">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-1893"><a href="#Generator-1893"><span class="linenos">1893</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1894"><a href="#Generator-1894"><span class="linenos">1894</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-1895"><a href="#Generator-1895"><span class="linenos">1895</span></a>
+</span><span id="Generator-1896"><a href="#Generator-1896"><span class="linenos">1896</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-1897"><a href="#Generator-1897"><span class="linenos">1897</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-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">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-1900"><a href="#Generator-1900"><span class="linenos">1900</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 COLUMN &quot;</span><span class="p">)</span>
+</span><span id="Generator-1901"><a href="#Generator-1901"><span class="linenos">1901</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-1902"><a href="#Generator-1902"><span class="linenos">1902</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-1903"><a href="#Generator-1903"><span class="linenos">1903</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-1904"><a href="#Generator-1904"><span class="linenos">1904</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-1905"><a href="#Generator-1905"><span class="linenos">1905</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-1906"><a href="#Generator-1906"><span class="linenos">1906</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><span id="Generator-1907"><a href="#Generator-1907"><span class="linenos">1907</span></a>
-</span><span id="Generator-1908"><a href="#Generator-1908"><span class="linenos">1908</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-1909"><a href="#Generator-1909"><span class="linenos">1909</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-1910"><a href="#Generator-1910"><span class="linenos">1910</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-1911"><a href="#Generator-1911"><span class="linenos">1911</span></a>
-</span><span id="Generator-1912"><a href="#Generator-1912"><span class="linenos">1912</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-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">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-1915"><a href="#Generator-1915"><span class="linenos">1915</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-1916"><a href="#Generator-1916"><span class="linenos">1916</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-1917"><a href="#Generator-1917"><span class="linenos">1917</span></a>
-</span><span id="Generator-1918"><a href="#Generator-1918"><span class="linenos">1918</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-1919"><a href="#Generator-1919"><span class="linenos">1919</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-1920"><a href="#Generator-1920"><span class="linenos">1920</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-1921"><a href="#Generator-1921"><span class="linenos">1921</span></a>
-</span><span id="Generator-1922"><a href="#Generator-1922"><span class="linenos">1922</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-1923"><a href="#Generator-1923"><span class="linenos">1923</span></a> <span class="k">return</span> <span class="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"> IGNORE NULLS&quot;</span>
+</span><span id="Generator-1908"><a href="#Generator-1908"><span class="linenos">1908</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-1909"><a href="#Generator-1909"><span class="linenos">1909</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="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-1910"><a href="#Generator-1910"><span class="linenos">1910</span></a>
+</span><span id="Generator-1911"><a href="#Generator-1911"><span class="linenos">1911</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-1912"><a href="#Generator-1912"><span class="linenos">1912</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-1913"><a href="#Generator-1913"><span class="linenos">1913</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-1914"><a href="#Generator-1914"><span class="linenos">1914</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-1915"><a href="#Generator-1915"><span class="linenos">1915</span></a>
+</span><span id="Generator-1916"><a href="#Generator-1916"><span class="linenos">1916</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-1917"><a href="#Generator-1917"><span class="linenos">1917</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-1918"><a href="#Generator-1918"><span class="linenos">1918</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-1919"><a href="#Generator-1919"><span class="linenos">1919</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-1920"><a href="#Generator-1920"><span class="linenos">1920</span></a>
+</span><span id="Generator-1921"><a href="#Generator-1921"><span class="linenos">1921</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-1922"><a href="#Generator-1922"><span class="linenos">1922</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-1923"><a href="#Generator-1923"><span class="linenos">1923</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-1924"><a href="#Generator-1924"><span class="linenos">1924</span></a>
-</span><span id="Generator-1925"><a href="#Generator-1925"><span class="linenos">1925</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-1926"><a href="#Generator-1926"><span class="linenos">1926</span></a> <span class="k">return</span> <span class="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"> RESPECT NULLS&quot;</span>
-</span><span id="Generator-1927"><a href="#Generator-1927"><span class="linenos">1927</span></a>
-</span><span id="Generator-1928"><a href="#Generator-1928"><span class="linenos">1928</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-1929"><a href="#Generator-1929"><span class="linenos">1929</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-1930"><a href="#Generator-1930"><span class="linenos">1930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
-</span><span id="Generator-1931"><a href="#Generator-1931"><span class="linenos">1931</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-1932"><a href="#Generator-1932"><span class="linenos">1932</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-1933"><a href="#Generator-1933"><span class="linenos">1933</span></a> <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><span id="Generator-1936"><a href="#Generator-1936"><span class="linenos">1936</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-1937"><a href="#Generator-1937"><span class="linenos">1937</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-1938"><a href="#Generator-1938"><span class="linenos">1938</span></a>
-</span><span id="Generator-1939"><a href="#Generator-1939"><span class="linenos">1939</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-1940"><a href="#Generator-1940"><span class="linenos">1940</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-1941"><a href="#Generator-1941"><span class="linenos">1941</span></a>
-</span><span id="Generator-1942"><a href="#Generator-1942"><span class="linenos">1942</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-1943"><a href="#Generator-1943"><span class="linenos">1943</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-1944"><a href="#Generator-1944"><span class="linenos">1944</span></a>
-</span><span id="Generator-1945"><a href="#Generator-1945"><span class="linenos">1945</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-1946"><a href="#Generator-1946"><span class="linenos">1946</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-1947"><a href="#Generator-1947"><span class="linenos">1947</span></a>
-</span><span id="Generator-1948"><a href="#Generator-1948"><span class="linenos">1948</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-1949"><a href="#Generator-1949"><span class="linenos">1949</span></a> <span class="k">return</span> <span class="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-1950"><a href="#Generator-1950"><span class="linenos">1950</span></a>
-</span><span id="Generator-1951"><a href="#Generator-1951"><span class="linenos">1951</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-1952"><a href="#Generator-1952"><span class="linenos">1952</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-1953"><a href="#Generator-1953"><span class="linenos">1953</span></a>
-</span><span id="Generator-1954"><a href="#Generator-1954"><span class="linenos">1954</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-1955"><a href="#Generator-1955"><span class="linenos">1955</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-1956"><a href="#Generator-1956"><span class="linenos">1956</span></a>
-</span><span id="Generator-1957"><a href="#Generator-1957"><span class="linenos">1957</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-1958"><a href="#Generator-1958"><span class="linenos">1958</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-1959"><a href="#Generator-1959"><span class="linenos">1959</span></a>
-</span><span id="Generator-1960"><a href="#Generator-1960"><span class="linenos">1960</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-1961"><a href="#Generator-1961"><span class="linenos">1961</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-1962"><a href="#Generator-1962"><span class="linenos">1962</span></a>
-</span><span id="Generator-1963"><a href="#Generator-1963"><span class="linenos">1963</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-1964"><a href="#Generator-1964"><span class="linenos">1964</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-1965"><a href="#Generator-1965"><span class="linenos">1965</span></a>
-</span><span id="Generator-1966"><a href="#Generator-1966"><span class="linenos">1966</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-1967"><a href="#Generator-1967"><span class="linenos">1967</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-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="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-1970"><a href="#Generator-1970"><span class="linenos">1970</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-1971"><a href="#Generator-1971"><span class="linenos">1971</span></a>
-</span><span id="Generator-1972"><a href="#Generator-1972"><span class="linenos">1972</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-1973"><a href="#Generator-1973"><span class="linenos">1973</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-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="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-1976"><a href="#Generator-1976"><span class="linenos">1976</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-1977"><a href="#Generator-1977"><span class="linenos">1977</span></a>
-</span><span id="Generator-1978"><a href="#Generator-1978"><span class="linenos">1978</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-1979"><a href="#Generator-1979"><span class="linenos">1979</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-1980"><a href="#Generator-1980"><span class="linenos">1980</span></a>
-</span><span id="Generator-1981"><a href="#Generator-1981"><span class="linenos">1981</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-1982"><a href="#Generator-1982"><span class="linenos">1982</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-1983"><a href="#Generator-1983"><span class="linenos">1983</span></a>
-</span><span id="Generator-1984"><a href="#Generator-1984"><span class="linenos">1984</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-1985"><a href="#Generator-1985"><span class="linenos">1985</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-1986"><a href="#Generator-1986"><span class="linenos">1986</span></a>
-</span><span id="Generator-1987"><a href="#Generator-1987"><span class="linenos">1987</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-1988"><a href="#Generator-1988"><span class="linenos">1988</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-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="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-1991"><a href="#Generator-1991"><span class="linenos">1991</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-1992"><a href="#Generator-1992"><span class="linenos">1992</span></a>
-</span><span id="Generator-1993"><a href="#Generator-1993"><span class="linenos">1993</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-1994"><a href="#Generator-1994"><span class="linenos">1994</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-1995"><a href="#Generator-1995"><span class="linenos">1995</span></a>
-</span><span id="Generator-1996"><a href="#Generator-1996"><span class="linenos">1996</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-1997"><a href="#Generator-1997"><span class="linenos">1997</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-1998"><a href="#Generator-1998"><span class="linenos">1998</span></a>
-</span><span id="Generator-1999"><a href="#Generator-1999"><span class="linenos">1999</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-2000"><a href="#Generator-2000"><span class="linenos">2000</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-2001"><a href="#Generator-2001"><span class="linenos">2001</span></a>
-</span><span id="Generator-2002"><a href="#Generator-2002"><span class="linenos">2002</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-2003"><a href="#Generator-2003"><span class="linenos">2003</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-2004"><a href="#Generator-2004"><span class="linenos">2004</span></a>
-</span><span id="Generator-2005"><a href="#Generator-2005"><span class="linenos">2005</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-2006"><a href="#Generator-2006"><span class="linenos">2006</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-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="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-2009"><a href="#Generator-2009"><span class="linenos">2009</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-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">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-2012"><a href="#Generator-2012"><span class="linenos">2012</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-2013"><a href="#Generator-2013"><span class="linenos">2013</span></a>
-</span><span id="Generator-2014"><a href="#Generator-2014"><span class="linenos">2014</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-2015"><a href="#Generator-2015"><span class="linenos">2015</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRY_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="Generator-2016"><a href="#Generator-2016"><span class="linenos">2016</span></a>
-</span><span id="Generator-2017"><a href="#Generator-2017"><span class="linenos">2017</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-2018"><a href="#Generator-2018"><span class="linenos">2018</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-2019"><a href="#Generator-2019"><span class="linenos">2019</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-2020"><a href="#Generator-2020"><span class="linenos">2020</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2021"><a href="#Generator-2021"><span class="linenos">2021</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-2022"><a href="#Generator-2022"><span class="linenos">2022</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-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;</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-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">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-1928"><a href="#Generator-1928"><span class="linenos">1928</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-1929"><a href="#Generator-1929"><span class="linenos">1929</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-1930"><a href="#Generator-1930"><span class="linenos">1930</span></a>
+</span><span id="Generator-1931"><a href="#Generator-1931"><span class="linenos">1931</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-1932"><a href="#Generator-1932"><span class="linenos">1932</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-1933"><a href="#Generator-1933"><span class="linenos">1933</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-1934"><a href="#Generator-1934"><span class="linenos">1934</span></a>
+</span><span id="Generator-1935"><a href="#Generator-1935"><span class="linenos">1935</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-1936"><a href="#Generator-1936"><span class="linenos">1936</span></a> <span class="k">return</span> <span class="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"> IGNORE NULLS&quot;</span>
+</span><span id="Generator-1937"><a href="#Generator-1937"><span class="linenos">1937</span></a>
+</span><span id="Generator-1938"><a href="#Generator-1938"><span class="linenos">1938</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-1939"><a href="#Generator-1939"><span class="linenos">1939</span></a> <span class="k">return</span> <span class="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"> RESPECT NULLS&quot;</span>
+</span><span id="Generator-1940"><a href="#Generator-1940"><span class="linenos">1940</span></a>
+</span><span id="Generator-1941"><a href="#Generator-1941"><span class="linenos">1941</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-1942"><a href="#Generator-1942"><span class="linenos">1942</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-1943"><a href="#Generator-1943"><span class="linenos">1943</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
+</span><span id="Generator-1944"><a href="#Generator-1944"><span class="linenos">1944</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-1945"><a href="#Generator-1945"><span class="linenos">1945</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-1946"><a href="#Generator-1946"><span class="linenos">1946</span></a> <span class="p">)</span>
+</span><span id="Generator-1947"><a href="#Generator-1947"><span class="linenos">1947</span></a> <span class="p">)</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">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-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">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-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">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-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">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-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">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-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">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-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">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-1959"><a href="#Generator-1959"><span class="linenos">1959</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-1960"><a href="#Generator-1960"><span class="linenos">1960</span></a>
+</span><span id="Generator-1961"><a href="#Generator-1961"><span class="linenos">1961</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-1962"><a href="#Generator-1962"><span class="linenos">1962</span></a> <span class="k">return</span> <span class="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-1963"><a href="#Generator-1963"><span class="linenos">1963</span></a>
+</span><span id="Generator-1964"><a href="#Generator-1964"><span class="linenos">1964</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-1965"><a href="#Generator-1965"><span class="linenos">1965</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-1966"><a href="#Generator-1966"><span class="linenos">1966</span></a>
+</span><span id="Generator-1967"><a href="#Generator-1967"><span class="linenos">1967</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-1968"><a href="#Generator-1968"><span class="linenos">1968</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-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="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-1971"><a href="#Generator-1971"><span class="linenos">1971</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-1972"><a href="#Generator-1972"><span class="linenos">1972</span></a>
+</span><span id="Generator-1973"><a href="#Generator-1973"><span class="linenos">1973</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-1974"><a href="#Generator-1974"><span class="linenos">1974</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-1975"><a href="#Generator-1975"><span class="linenos">1975</span></a>
+</span><span id="Generator-1976"><a href="#Generator-1976"><span class="linenos">1976</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-1977"><a href="#Generator-1977"><span class="linenos">1977</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-1978"><a href="#Generator-1978"><span class="linenos">1978</span></a>
+</span><span id="Generator-1979"><a href="#Generator-1979"><span class="linenos">1979</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-1980"><a href="#Generator-1980"><span class="linenos">1980</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-1981"><a href="#Generator-1981"><span class="linenos">1981</span></a>
+</span><span id="Generator-1982"><a href="#Generator-1982"><span class="linenos">1982</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-1983"><a href="#Generator-1983"><span class="linenos">1983</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-1984"><a href="#Generator-1984"><span class="linenos">1984</span></a>
+</span><span id="Generator-1985"><a href="#Generator-1985"><span class="linenos">1985</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-1986"><a href="#Generator-1986"><span class="linenos">1986</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-1987"><a href="#Generator-1987"><span class="linenos">1987</span></a>
+</span><span id="Generator-1988"><a href="#Generator-1988"><span class="linenos">1988</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-1989"><a href="#Generator-1989"><span class="linenos">1989</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-1990"><a href="#Generator-1990"><span class="linenos">1990</span></a>
+</span><span id="Generator-1991"><a href="#Generator-1991"><span class="linenos">1991</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-1992"><a href="#Generator-1992"><span class="linenos">1992</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-1993"><a href="#Generator-1993"><span class="linenos">1993</span></a>
+</span><span id="Generator-1994"><a href="#Generator-1994"><span class="linenos">1994</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-1995"><a href="#Generator-1995"><span class="linenos">1995</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-1996"><a href="#Generator-1996"><span class="linenos">1996</span></a>
+</span><span id="Generator-1997"><a href="#Generator-1997"><span class="linenos">1997</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-1998"><a href="#Generator-1998"><span class="linenos">1998</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-1999"><a href="#Generator-1999"><span class="linenos">1999</span></a>
+</span><span id="Generator-2000"><a href="#Generator-2000"><span class="linenos">2000</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-2001"><a href="#Generator-2001"><span class="linenos">2001</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-2002"><a href="#Generator-2002"><span class="linenos">2002</span></a>
+</span><span id="Generator-2003"><a href="#Generator-2003"><span class="linenos">2003</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-2004"><a href="#Generator-2004"><span class="linenos">2004</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-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">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-2007"><a href="#Generator-2007"><span class="linenos">2007</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-2008"><a href="#Generator-2008"><span class="linenos">2008</span></a>
+</span><span id="Generator-2009"><a href="#Generator-2009"><span class="linenos">2009</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-2010"><a href="#Generator-2010"><span class="linenos">2010</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-2011"><a href="#Generator-2011"><span class="linenos">2011</span></a>
+</span><span id="Generator-2012"><a href="#Generator-2012"><span class="linenos">2012</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-2013"><a href="#Generator-2013"><span class="linenos">2013</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-2014"><a href="#Generator-2014"><span class="linenos">2014</span></a>
+</span><span id="Generator-2015"><a href="#Generator-2015"><span class="linenos">2015</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-2016"><a href="#Generator-2016"><span class="linenos">2016</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-2017"><a href="#Generator-2017"><span class="linenos">2017</span></a>
+</span><span id="Generator-2018"><a href="#Generator-2018"><span class="linenos">2018</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-2019"><a href="#Generator-2019"><span class="linenos">2019</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-2020"><a href="#Generator-2020"><span class="linenos">2020</span></a>
+</span><span id="Generator-2021"><a href="#Generator-2021"><span class="linenos">2021</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-2022"><a href="#Generator-2022"><span class="linenos">2022</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-2023"><a href="#Generator-2023"><span class="linenos">2023</span></a>
-</span><span id="Generator-2024"><a href="#Generator-2024"><span class="linenos">2024</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-2025"><a href="#Generator-2025"><span class="linenos">2025</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-2026"><a href="#Generator-2026"><span class="linenos">2026</span></a> <span class="k">return</span> <span class="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-2027"><a href="#Generator-2027"><span class="linenos">2027</span></a>
-</span><span id="Generator-2028"><a href="#Generator-2028"><span class="linenos">2028</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-2029"><a href="#Generator-2029"><span class="linenos">2029</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-2030"><a href="#Generator-2030"><span class="linenos">2030</span></a> <span class="k">for</span> <span class="n">arg_value</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">values</span><span class="p">():</span>
-</span><span id="Generator-2031"><a href="#Generator-2031"><span class="linenos">2031</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-2032"><a href="#Generator-2032"><span class="linenos">2032</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-2033"><a href="#Generator-2033"><span class="linenos">2033</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-2034"><a href="#Generator-2034"><span class="linenos">2034</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2035"><a href="#Generator-2035"><span class="linenos">2035</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-2024"><a href="#Generator-2024"><span class="linenos">2024</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-2025"><a href="#Generator-2025"><span class="linenos">2025</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-2026"><a href="#Generator-2026"><span class="linenos">2026</span></a>
+</span><span id="Generator-2027"><a href="#Generator-2027"><span class="linenos">2027</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-2028"><a href="#Generator-2028"><span class="linenos">2028</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRY_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="Generator-2029"><a href="#Generator-2029"><span class="linenos">2029</span></a>
+</span><span id="Generator-2030"><a href="#Generator-2030"><span class="linenos">2030</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-2031"><a href="#Generator-2031"><span class="linenos">2031</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-2032"><a href="#Generator-2032"><span class="linenos">2032</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-2033"><a href="#Generator-2033"><span class="linenos">2033</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2034"><a href="#Generator-2034"><span class="linenos">2034</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-2035"><a href="#Generator-2035"><span class="linenos">2035</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-2036"><a href="#Generator-2036"><span class="linenos">2036</span></a>
-</span><span id="Generator-2037"><a href="#Generator-2037"><span class="linenos">2037</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">sql_name</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Generator-2038"><a href="#Generator-2038"><span class="linenos">2038</span></a>
-</span><span id="Generator-2039"><a href="#Generator-2039"><span class="linenos">2039</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">name</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="n">t</span><span class="o">.</span><span 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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2040"><a href="#Generator-2040"><span class="linenos">2040</span></a> <span class="k">return</span> <span class="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="s2">(</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="s2">)&quot;</span>
-</span><span id="Generator-2041"><a href="#Generator-2041"><span class="linenos">2041</span></a>
-</span><span id="Generator-2042"><a href="#Generator-2042"><span class="linenos">2042</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-2043"><a href="#Generator-2043"><span class="linenos">2043</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-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">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-2045"><a href="#Generator-2045"><span class="linenos">2045</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="sa">f</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-2046"><a href="#Generator-2046"><span class="linenos">2046</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-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="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-2049"><a href="#Generator-2049"><span class="linenos">2049</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-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="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-2052"><a href="#Generator-2052"><span class="linenos">2052</span></a> <span class="k">return</span> <span class="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_trie</span><span class="p">)</span>
-</span><span id="Generator-2053"><a href="#Generator-2053"><span class="linenos">2053</span></a>
-</span><span id="Generator-2054"><a href="#Generator-2054"><span class="linenos">2054</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="Generator-2055"><a href="#Generator-2055"><span class="linenos">2055</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator-2056"><a href="#Generator-2056"><span class="linenos">2056</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-2057"><a href="#Generator-2057"><span class="linenos">2057</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-2058"><a href="#Generator-2058"><span class="linenos">2058</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">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-2059"><a href="#Generator-2059"><span class="linenos">2059</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-2060"><a href="#Generator-2060"><span class="linenos">2060</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-2061"><a href="#Generator-2061"><span class="linenos">2061</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-2062"><a href="#Generator-2062"><span class="linenos">2062</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-2063"><a href="#Generator-2063"><span class="linenos">2063</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator-2064"><a href="#Generator-2064"><span class="linenos">2064</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-2065"><a href="#Generator-2065"><span class="linenos">2065</span></a>
-</span><span id="Generator-2066"><a href="#Generator-2066"><span class="linenos">2066</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-2067"><a href="#Generator-2067"><span class="linenos">2067</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator-2068"><a href="#Generator-2068"><span class="linenos">2068</span></a>
-</span><span id="Generator-2069"><a href="#Generator-2069"><span class="linenos">2069</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator-2070"><a href="#Generator-2070"><span class="linenos">2070</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="bp">self</span><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-2071"><a href="#Generator-2071"><span class="linenos">2071</span></a>
-</span><span id="Generator-2072"><a href="#Generator-2072"><span class="linenos">2072</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-2073"><a href="#Generator-2073"><span class="linenos">2073</span></a>
-</span><span id="Generator-2074"><a href="#Generator-2074"><span class="linenos">2074</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-2075"><a href="#Generator-2075"><span class="linenos">2075</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-2076"><a href="#Generator-2076"><span class="linenos">2076</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-2077"><a href="#Generator-2077"><span class="linenos">2077</span></a>
-</span><span id="Generator-2078"><a href="#Generator-2078"><span class="linenos">2078</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator-2079"><a href="#Generator-2079"><span class="linenos">2079</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-2080"><a href="#Generator-2080"><span class="linenos">2080</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-2081"><a href="#Generator-2081"><span class="linenos">2081</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-2082"><a href="#Generator-2082"><span class="linenos">2082</span></a>
-</span><span id="Generator-2083"><a href="#Generator-2083"><span class="linenos">2083</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-2084"><a href="#Generator-2084"><span class="linenos">2084</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-2085"><a href="#Generator-2085"><span class="linenos">2085</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-2086"><a href="#Generator-2086"><span class="linenos">2086</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2087"><a href="#Generator-2087"><span class="linenos">2087</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-2088"><a href="#Generator-2088"><span class="linenos">2088</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-2089"><a href="#Generator-2089"><span class="linenos">2089</span></a> <span class="p">)</span>
-</span><span id="Generator-2090"><a href="#Generator-2090"><span class="linenos">2090</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2091"><a href="#Generator-2091"><span class="linenos">2091</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-2092"><a href="#Generator-2092"><span class="linenos">2092</span></a>
-</span><span id="Generator-2093"><a href="#Generator-2093"><span class="linenos">2093</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-2094"><a href="#Generator-2094"><span class="linenos">2094</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="kc">False</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-2037"><a href="#Generator-2037"><span class="linenos">2037</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-2038"><a href="#Generator-2038"><span class="linenos">2038</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-2039"><a href="#Generator-2039"><span class="linenos">2039</span></a> <span class="k">return</span> <span class="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-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="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-2042"><a href="#Generator-2042"><span class="linenos">2042</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-2043"><a href="#Generator-2043"><span class="linenos">2043</span></a> <span class="k">for</span> <span class="n">arg_value</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">values</span><span class="p">():</span>
+</span><span id="Generator-2044"><a href="#Generator-2044"><span class="linenos">2044</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-2045"><a href="#Generator-2045"><span class="linenos">2045</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-2046"><a href="#Generator-2046"><span class="linenos">2046</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-2047"><a href="#Generator-2047"><span class="linenos">2047</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2048"><a href="#Generator-2048"><span class="linenos">2048</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-2049"><a href="#Generator-2049"><span class="linenos">2049</span></a>
+</span><span id="Generator-2050"><a href="#Generator-2050"><span class="linenos">2050</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">sql_name</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Generator-2051"><a href="#Generator-2051"><span class="linenos">2051</span></a>
+</span><span id="Generator-2052"><a href="#Generator-2052"><span class="linenos">2052</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">name</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="n">t</span><span class="o">.</span><span 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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2053"><a href="#Generator-2053"><span class="linenos">2053</span></a> <span class="k">return</span> <span class="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="s2">(</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="s2">)&quot;</span>
+</span><span id="Generator-2054"><a href="#Generator-2054"><span class="linenos">2054</span></a>
+</span><span id="Generator-2055"><a href="#Generator-2055"><span class="linenos">2055</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-2056"><a href="#Generator-2056"><span class="linenos">2056</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-2057"><a href="#Generator-2057"><span class="linenos">2057</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-2058"><a href="#Generator-2058"><span class="linenos">2058</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="sa">f</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-2059"><a href="#Generator-2059"><span class="linenos">2059</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-2060"><a href="#Generator-2060"><span class="linenos">2060</span></a>
+</span><span id="Generator-2061"><a href="#Generator-2061"><span class="linenos">2061</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-2062"><a href="#Generator-2062"><span class="linenos">2062</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-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">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-2065"><a href="#Generator-2065"><span class="linenos">2065</span></a> <span class="k">return</span> <span class="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_trie</span><span class="p">)</span>
+</span><span id="Generator-2066"><a href="#Generator-2066"><span class="linenos">2066</span></a>
+</span><span id="Generator-2067"><a href="#Generator-2067"><span class="linenos">2067</span></a> <span class="k">def</span> <span class="nf">expressions</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="p">,</span>
+</span><span id="Generator-2069"><a href="#Generator-2069"><span class="linenos">2069</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-2070"><a href="#Generator-2070"><span class="linenos">2070</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-2071"><a href="#Generator-2071"><span class="linenos">2071</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">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-2072"><a href="#Generator-2072"><span class="linenos">2072</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-2073"><a href="#Generator-2073"><span class="linenos">2073</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-2074"><a href="#Generator-2074"><span class="linenos">2074</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-2075"><a href="#Generator-2075"><span class="linenos">2075</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-2076"><a href="#Generator-2076"><span class="linenos">2076</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator-2077"><a href="#Generator-2077"><span class="linenos">2077</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-2078"><a href="#Generator-2078"><span class="linenos">2078</span></a>
+</span><span id="Generator-2079"><a href="#Generator-2079"><span class="linenos">2079</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-2080"><a href="#Generator-2080"><span class="linenos">2080</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator-2081"><a href="#Generator-2081"><span class="linenos">2081</span></a>
+</span><span id="Generator-2082"><a href="#Generator-2082"><span class="linenos">2082</span></a> <span class="k">if</span> <span class="n">flat</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="n">sep</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-2084"><a href="#Generator-2084"><span class="linenos">2084</span></a>
+</span><span id="Generator-2085"><a href="#Generator-2085"><span class="linenos">2085</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-2086"><a href="#Generator-2086"><span class="linenos">2086</span></a>
+</span><span id="Generator-2087"><a href="#Generator-2087"><span class="linenos">2087</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-2088"><a href="#Generator-2088"><span class="linenos">2088</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-2089"><a href="#Generator-2089"><span class="linenos">2089</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-2090"><a href="#Generator-2090"><span class="linenos">2090</span></a>
+</span><span id="Generator-2091"><a href="#Generator-2091"><span class="linenos">2091</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator-2092"><a href="#Generator-2092"><span class="linenos">2092</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-2093"><a href="#Generator-2093"><span class="linenos">2093</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-2094"><a href="#Generator-2094"><span class="linenos">2094</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-2095"><a href="#Generator-2095"><span class="linenos">2095</span></a>
-</span><span id="Generator-2096"><a href="#Generator-2096"><span class="linenos">2096</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-2097"><a href="#Generator-2097"><span class="linenos">2097</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-2098"><a href="#Generator-2098"><span class="linenos">2098</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-2099"><a href="#Generator-2099"><span class="linenos">2099</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator-2100"><a href="#Generator-2100"><span class="linenos">2100</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-2101"><a href="#Generator-2101"><span class="linenos">2101</span></a> <span class="k">return</span> <span class="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-2102"><a href="#Generator-2102"><span class="linenos">2102</span></a>
-</span><span id="Generator-2103"><a href="#Generator-2103"><span class="linenos">2103</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-2104"><a href="#Generator-2104"><span class="linenos">2104</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-2105"><a href="#Generator-2105"><span class="linenos">2105</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-2106"><a href="#Generator-2106"><span class="linenos">2106</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-2107"><a href="#Generator-2107"><span class="linenos">2107</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-2096"><a href="#Generator-2096"><span class="linenos">2096</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-2097"><a href="#Generator-2097"><span class="linenos">2097</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-2098"><a href="#Generator-2098"><span class="linenos">2098</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-2099"><a href="#Generator-2099"><span class="linenos">2099</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2100"><a href="#Generator-2100"><span class="linenos">2100</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-2101"><a href="#Generator-2101"><span class="linenos">2101</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-2102"><a href="#Generator-2102"><span class="linenos">2102</span></a> <span class="p">)</span>
+</span><span id="Generator-2103"><a href="#Generator-2103"><span class="linenos">2103</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2104"><a href="#Generator-2104"><span class="linenos">2104</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-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="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-2107"><a href="#Generator-2107"><span class="linenos">2107</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="kc">False</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-2108"><a href="#Generator-2108"><span class="linenos">2108</span></a>
-</span><span id="Generator-2109"><a href="#Generator-2109"><span class="linenos">2109</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">Expression</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-2110"><a href="#Generator-2110"><span class="linenos">2110</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2111"><a href="#Generator-2111"><span class="linenos">2111</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-2112"><a href="#Generator-2112"><span class="linenos">2112</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-2113"><a href="#Generator-2113"><span class="linenos">2113</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-2114"><a href="#Generator-2114"><span class="linenos">2114</span></a> <span class="p">)</span>
+</span><span id="Generator-2109"><a href="#Generator-2109"><span class="linenos">2109</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-2110"><a href="#Generator-2110"><span class="linenos">2110</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-2111"><a href="#Generator-2111"><span class="linenos">2111</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-2112"><a href="#Generator-2112"><span class="linenos">2112</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator-2113"><a href="#Generator-2113"><span class="linenos">2113</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-2114"><a href="#Generator-2114"><span class="linenos">2114</span></a> <span class="k">return</span> <span class="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-2115"><a href="#Generator-2115"><span class="linenos">2115</span></a>
-</span><span id="Generator-2116"><a href="#Generator-2116"><span class="linenos">2116</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-2117"><a href="#Generator-2117"><span class="linenos">2117</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-2118"><a href="#Generator-2118"><span class="linenos">2118</span></a>
-</span><span id="Generator-2119"><a href="#Generator-2119"><span class="linenos">2119</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-2120"><a href="#Generator-2120"><span class="linenos">2120</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-2116"><a href="#Generator-2116"><span class="linenos">2116</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-2117"><a href="#Generator-2117"><span class="linenos">2117</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-2118"><a href="#Generator-2118"><span class="linenos">2118</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-2119"><a href="#Generator-2119"><span class="linenos">2119</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-2120"><a href="#Generator-2120"><span class="linenos">2120</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-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="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-2122"><a href="#Generator-2122"><span class="linenos">2122</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">Expression</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-2123"><a href="#Generator-2123"><span class="linenos">2123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2124"><a href="#Generator-2124"><span class="linenos">2124</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-2125"><a href="#Generator-2125"><span class="linenos">2125</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator-2126"><a href="#Generator-2126"><span class="linenos">2126</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-2124"><a href="#Generator-2124"><span class="linenos">2124</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-2125"><a href="#Generator-2125"><span class="linenos">2125</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-2126"><a href="#Generator-2126"><span class="linenos">2126</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-2127"><a href="#Generator-2127"><span class="linenos">2127</span></a> <span class="p">)</span>
-</span><span id="Generator-2128"><a href="#Generator-2128"><span class="linenos">2128</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-2129"><a href="#Generator-2129"><span class="linenos">2129</span></a>
-</span><span id="Generator-2130"><a href="#Generator-2130"><span class="linenos">2130</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-2131"><a href="#Generator-2131"><span class="linenos">2131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2132"><a href="#Generator-2132"><span class="linenos">2132</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-2133"><a href="#Generator-2133"><span class="linenos">2133</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-2128"><a href="#Generator-2128"><span class="linenos">2128</span></a>
+</span><span id="Generator-2129"><a href="#Generator-2129"><span class="linenos">2129</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-2130"><a href="#Generator-2130"><span class="linenos">2130</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-2131"><a href="#Generator-2131"><span class="linenos">2131</span></a>
+</span><span id="Generator-2132"><a href="#Generator-2132"><span class="linenos">2132</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-2133"><a href="#Generator-2133"><span class="linenos">2133</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-2134"><a href="#Generator-2134"><span class="linenos">2134</span></a>
-</span><span id="Generator-2135"><a href="#Generator-2135"><span class="linenos">2135</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-2136"><a href="#Generator-2136"><span class="linenos">2136</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-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="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-2139"><a href="#Generator-2139"><span class="linenos">2139</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-2140"><a href="#Generator-2140"><span class="linenos">2140</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-2141"><a href="#Generator-2141"><span class="linenos">2141</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-2142"><a href="#Generator-2142"><span class="linenos">2142</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-2143"><a href="#Generator-2143"><span class="linenos">2143</span></a>
-</span><span id="Generator-2144"><a href="#Generator-2144"><span class="linenos">2144</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-2145"><a href="#Generator-2145"><span class="linenos">2145</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-2146"><a href="#Generator-2146"><span class="linenos">2146</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-2147"><a href="#Generator-2147"><span class="linenos">2147</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-2148"><a href="#Generator-2148"><span class="linenos">2148</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-2149"><a href="#Generator-2149"><span class="linenos">2149</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-2150"><a href="#Generator-2150"><span class="linenos">2150</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-2151"><a href="#Generator-2151"><span class="linenos">2151</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-2152"><a href="#Generator-2152"><span class="linenos">2152</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2153"><a href="#Generator-2153"><span class="linenos">2153</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-2154"><a href="#Generator-2154"><span class="linenos">2154</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator-2155"><a href="#Generator-2155"><span class="linenos">2155</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-2156"><a href="#Generator-2156"><span class="linenos">2156</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-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">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-2159"><a href="#Generator-2159"><span class="linenos">2159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator-2160"><a href="#Generator-2160"><span class="linenos">2160</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-2161"><a href="#Generator-2161"><span class="linenos">2161</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-2162"><a href="#Generator-2162"><span class="linenos">2162</span></a> <span class="k">return</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="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="bp">self</span><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="s1">&#39; &#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator-2163"><a href="#Generator-2163"><span class="linenos">2163</span></a>
-</span><span id="Generator-2164"><a href="#Generator-2164"><span class="linenos">2164</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-2165"><a href="#Generator-2165"><span class="linenos">2165</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-2166"><a href="#Generator-2166"><span class="linenos">2166</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-2167"><a href="#Generator-2167"><span class="linenos">2167</span></a>
-</span><span id="Generator-2168"><a href="#Generator-2168"><span class="linenos">2168</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-2135"><a href="#Generator-2135"><span class="linenos">2135</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-2136"><a href="#Generator-2136"><span class="linenos">2136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2137"><a href="#Generator-2137"><span class="linenos">2137</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-2138"><a href="#Generator-2138"><span class="linenos">2138</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator-2139"><a href="#Generator-2139"><span class="linenos">2139</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-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="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-2142"><a href="#Generator-2142"><span class="linenos">2142</span></a>
+</span><span id="Generator-2143"><a href="#Generator-2143"><span class="linenos">2143</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-2144"><a href="#Generator-2144"><span class="linenos">2144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2145"><a href="#Generator-2145"><span class="linenos">2145</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-2146"><a href="#Generator-2146"><span class="linenos">2146</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-2147"><a href="#Generator-2147"><span class="linenos">2147</span></a>
+</span><span id="Generator-2148"><a href="#Generator-2148"><span class="linenos">2148</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-2149"><a href="#Generator-2149"><span class="linenos">2149</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-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">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-2152"><a href="#Generator-2152"><span class="linenos">2152</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-2153"><a href="#Generator-2153"><span class="linenos">2153</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-2154"><a href="#Generator-2154"><span class="linenos">2154</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-2155"><a href="#Generator-2155"><span class="linenos">2155</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-2156"><a href="#Generator-2156"><span class="linenos">2156</span></a>
+</span><span id="Generator-2157"><a href="#Generator-2157"><span class="linenos">2157</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-2158"><a href="#Generator-2158"><span class="linenos">2158</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-2159"><a href="#Generator-2159"><span class="linenos">2159</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-2160"><a href="#Generator-2160"><span class="linenos">2160</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-2161"><a href="#Generator-2161"><span class="linenos">2161</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-2162"><a href="#Generator-2162"><span class="linenos">2162</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-2163"><a href="#Generator-2163"><span class="linenos">2163</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-2164"><a href="#Generator-2164"><span class="linenos">2164</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-2165"><a href="#Generator-2165"><span class="linenos">2165</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2166"><a href="#Generator-2166"><span class="linenos">2166</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-2167"><a href="#Generator-2167"><span class="linenos">2167</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator-2168"><a href="#Generator-2168"><span class="linenos">2168</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-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;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-2170"><a href="#Generator-2170"><span class="linenos">2170</span></a>
+</span><span id="Generator-2171"><a href="#Generator-2171"><span class="linenos">2171</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-2172"><a href="#Generator-2172"><span class="linenos">2172</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator-2173"><a href="#Generator-2173"><span class="linenos">2173</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-2174"><a href="#Generator-2174"><span class="linenos">2174</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-2175"><a href="#Generator-2175"><span class="linenos">2175</span></a> <span class="k">return</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="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="bp">self</span><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="s1">&#39; &#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator-2176"><a href="#Generator-2176"><span class="linenos">2176</span></a>
+</span><span id="Generator-2177"><a href="#Generator-2177"><span class="linenos">2177</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-2178"><a href="#Generator-2178"><span class="linenos">2178</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-2179"><a href="#Generator-2179"><span class="linenos">2179</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-2180"><a href="#Generator-2180"><span class="linenos">2180</span></a>
+</span><span id="Generator-2181"><a href="#Generator-2181"><span class="linenos">2181</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>
@@ -5695,7 +5724,7 @@ Default: True</li>
<a class="headerlink" href="#Generator.columnconstraint_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Generator.columnconstraint_sql-526"><a href="#Generator.columnconstraint_sql-526"><span class="linenos">526</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-527"><a href="#Generator.columnconstraint_sql-527"><span class="linenos">527</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-528"><a href="#Generator.columnconstraint_sql-528"><span class="linenos">528</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><span id="Generator.columnconstraint_sql-528"><a href="#Generator.columnconstraint_sql-528"><span class="linenos">528</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-529"><a href="#Generator.columnconstraint_sql-529"><span class="linenos">529</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>
@@ -7192,37 +7221,39 @@ Default: True</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">tablesample_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="expressions.html#TableSample">sqlglot.expressions.TableSample</a></span>,</span><span class="param"> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;SEED&#39;</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+ <span class="name">tablesample_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="expressions.html#TableSample">sqlglot.expressions.TableSample</a></span>,</span><span class="param"> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;SEED&#39;</span>,</span><span class="param"> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; AS &#39;</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="Generator.tablesample_sql-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Generator.tablesample_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablesample_sql-1119"><a href="#Generator.tablesample_sql-1119"><span class="linenos">1119</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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 class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1120"><a href="#Generator.tablesample_sql-1120"><span class="linenos">1120</span></a> <span class="k">if</span> <span class="bp">self</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="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1121"><a href="#Generator.tablesample_sql-1121"><span class="linenos">1121</span></a> <span class="n">this</span> <span class="o">=</span> <span 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="Generator.tablesample_sql-1122"><a href="#Generator.tablesample_sql-1122"><span class="linenos">1122</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">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-1123"><a href="#Generator.tablesample_sql-1123"><span class="linenos">1123</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1124"><a href="#Generator.tablesample_sql-1124"><span class="linenos">1124</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1125"><a href="#Generator.tablesample_sql-1125"><span class="linenos">1125</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1126"><a href="#Generator.tablesample_sql-1126"><span class="linenos">1126</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-1127"><a href="#Generator.tablesample_sql-1127"><span class="linenos">1127</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="o">.</span><span class="n">upper</span><span class="p">()</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-1128"><a href="#Generator.tablesample_sql-1128"><span class="linenos">1128</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-1129"><a href="#Generator.tablesample_sql-1129"><span class="linenos">1129</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-1130"><a href="#Generator.tablesample_sql-1130"><span class="linenos">1130</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-1131"><a href="#Generator.tablesample_sql-1131"><span class="linenos">1131</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-1132"><a href="#Generator.tablesample_sql-1132"><span class="linenos">1132</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-1133"><a href="#Generator.tablesample_sql-1133"><span class="linenos">1133</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-1134"><a href="#Generator.tablesample_sql-1134"><span class="linenos">1134</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 class="k">if</span> <span class="n">percent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.tablesample_sql-1135"><a href="#Generator.tablesample_sql-1135"><span class="linenos">1135</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.tablesample_sql-1136"><a href="#Generator.tablesample_sql-1136"><span class="linenos">1136</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rows</span><span class="si">}</span><span class="s2"> ROWS&quot;</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.tablesample_sql-1137"><a href="#Generator.tablesample_sql-1137"><span class="linenos">1137</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-1138"><a href="#Generator.tablesample_sql-1138"><span class="linenos">1138</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_PERCENT</span><span class="p">:</span>
-</span><span id="Generator.tablesample_sql-1139"><a href="#Generator.tablesample_sql-1139"><span class="linenos">1139</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"> PERCENT&quot;</span>
-</span><span id="Generator.tablesample_sql-1140"><a href="#Generator.tablesample_sql-1140"><span class="linenos">1140</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-1141"><a href="#Generator.tablesample_sql-1141"><span class="linenos">1141</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="n">seed_prefix</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-1142"><a href="#Generator.tablesample_sql-1142"><span class="linenos">1142</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 class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">)</span>
-</span><span id="Generator.tablesample_sql-1143"><a href="#Generator.tablesample_sql-1143"><span class="linenos">1143</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">method</span><span class="si">}</span><span class="s2">(</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">rows</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">)</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tablesample_sql-1119"><a href="#Generator.tablesample_sql-1119"><span class="linenos">1119</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
+</span><span id="Generator.tablesample_sql-1120"><a href="#Generator.tablesample_sql-1120"><span class="linenos">1120</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">TableSample</span><span class="p">,</span> <span class="n">seed_prefix</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; AS &quot;</span>
+</span><span id="Generator.tablesample_sql-1121"><a href="#Generator.tablesample_sql-1121"><span class="linenos">1121</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-1122"><a href="#Generator.tablesample_sql-1122"><span class="linenos">1122</span></a> <span class="k">if</span> <span class="bp">self</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="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1123"><a href="#Generator.tablesample_sql-1123"><span class="linenos">1123</span></a> <span class="n">this</span> <span class="o">=</span> <span 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="Generator.tablesample_sql-1124"><a href="#Generator.tablesample_sql-1124"><span class="linenos">1124</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-1125"><a href="#Generator.tablesample_sql-1125"><span class="linenos">1125</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1126"><a href="#Generator.tablesample_sql-1126"><span class="linenos">1126</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1127"><a href="#Generator.tablesample_sql-1127"><span class="linenos">1127</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablesample_sql-1128"><a href="#Generator.tablesample_sql-1128"><span class="linenos">1128</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-1129"><a href="#Generator.tablesample_sql-1129"><span class="linenos">1129</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="o">.</span><span class="n">upper</span><span class="p">()</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-1130"><a href="#Generator.tablesample_sql-1130"><span class="linenos">1130</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-1131"><a href="#Generator.tablesample_sql-1131"><span class="linenos">1131</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-1132"><a href="#Generator.tablesample_sql-1132"><span class="linenos">1132</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-1133"><a href="#Generator.tablesample_sql-1133"><span class="linenos">1133</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-1134"><a href="#Generator.tablesample_sql-1134"><span class="linenos">1134</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-1135"><a href="#Generator.tablesample_sql-1135"><span class="linenos">1135</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-1136"><a href="#Generator.tablesample_sql-1136"><span class="linenos">1136</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 class="k">if</span> <span class="n">percent</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.tablesample_sql-1137"><a href="#Generator.tablesample_sql-1137"><span class="linenos">1137</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.tablesample_sql-1138"><a href="#Generator.tablesample_sql-1138"><span class="linenos">1138</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">rows</span><span class="si">}</span><span class="s2"> ROWS&quot;</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.tablesample_sql-1139"><a href="#Generator.tablesample_sql-1139"><span class="linenos">1139</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-1140"><a href="#Generator.tablesample_sql-1140"><span class="linenos">1140</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_PERCENT</span><span class="p">:</span>
+</span><span id="Generator.tablesample_sql-1141"><a href="#Generator.tablesample_sql-1141"><span class="linenos">1141</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"> PERCENT&quot;</span>
+</span><span id="Generator.tablesample_sql-1142"><a href="#Generator.tablesample_sql-1142"><span class="linenos">1142</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-1143"><a href="#Generator.tablesample_sql-1143"><span class="linenos">1143</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="n">seed_prefix</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-1144"><a href="#Generator.tablesample_sql-1144"><span class="linenos">1144</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 class="s2">&quot;TABLESAMPLE&quot;</span><span class="p">)</span>
+</span><span id="Generator.tablesample_sql-1145"><a href="#Generator.tablesample_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="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">method</span><span class="si">}</span><span class="s2">(</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">rows</span><span class="si">}{</span><span class="n">size</span><span class="si">}</span><span class="s2">)</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></pre></div>
@@ -7240,15 +7271,15 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.pivot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pivot_sql-1145"><a href="#Generator.pivot_sql-1145"><span class="linenos">1145</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-1146"><a href="#Generator.pivot_sql-1146"><span class="linenos">1146</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1147"><a href="#Generator.pivot_sql-1147"><span class="linenos">1147</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-1148"><a href="#Generator.pivot_sql-1148"><span class="linenos">1148</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-1149"><a href="#Generator.pivot_sql-1149"><span class="linenos">1149</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unpivot&quot;</span><span class="p">)</span>
-</span><span id="Generator.pivot_sql-1150"><a href="#Generator.pivot_sql-1150"><span class="linenos">1150</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">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
-</span><span id="Generator.pivot_sql-1151"><a href="#Generator.pivot_sql-1151"><span class="linenos">1151</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><span id="Generator.pivot_sql-1152"><a href="#Generator.pivot_sql-1152"><span class="linenos">1152</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-1153"><a href="#Generator.pivot_sql-1153"><span class="linenos">1153</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">direction</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-1147"><a href="#Generator.pivot_sql-1147"><span class="linenos">1147</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-1148"><a href="#Generator.pivot_sql-1148"><span class="linenos">1148</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1149"><a href="#Generator.pivot_sql-1149"><span class="linenos">1149</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-1150"><a href="#Generator.pivot_sql-1150"><span class="linenos">1150</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-1151"><a href="#Generator.pivot_sql-1151"><span class="linenos">1151</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unpivot&quot;</span><span class="p">)</span>
+</span><span id="Generator.pivot_sql-1152"><a href="#Generator.pivot_sql-1152"><span class="linenos">1152</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">unpivot</span> <span class="k">else</span> <span class="s2">&quot;PIVOT&quot;</span>
+</span><span id="Generator.pivot_sql-1153"><a href="#Generator.pivot_sql-1153"><span class="linenos">1153</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><span id="Generator.pivot_sql-1154"><a href="#Generator.pivot_sql-1154"><span class="linenos">1154</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-1155"><a href="#Generator.pivot_sql-1155"><span class="linenos">1155</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">direction</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>
@@ -7266,8 +7297,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.tuple_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tuple_sql-1155"><a href="#Generator.tuple_sql-1155"><span class="linenos">1155</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-1156"><a href="#Generator.tuple_sql-1156"><span class="linenos">1156</span></a> <span class="k">return</span> <span class="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-1157"><a href="#Generator.tuple_sql-1157"><span class="linenos">1157</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-1158"><a href="#Generator.tuple_sql-1158"><span class="linenos">1158</span></a> <span class="k">return</span> <span class="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>
@@ -7285,14 +7316,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.update_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.update_sql-1158"><a href="#Generator.update_sql-1158"><span class="linenos">1158</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-1159"><a href="#Generator.update_sql-1159"><span class="linenos">1159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1160"><a href="#Generator.update_sql-1160"><span class="linenos">1160</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-1161"><a href="#Generator.update_sql-1161"><span class="linenos">1161</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-1162"><a href="#Generator.update_sql-1162"><span class="linenos">1162</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-1163"><a href="#Generator.update_sql-1163"><span class="linenos">1163</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-1164"><a href="#Generator.update_sql-1164"><span class="linenos">1164</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">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-1165"><a href="#Generator.update_sql-1165"><span class="linenos">1165</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-1160"><a href="#Generator.update_sql-1160"><span class="linenos">1160</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-1161"><a href="#Generator.update_sql-1161"><span class="linenos">1161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1162"><a href="#Generator.update_sql-1162"><span class="linenos">1162</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-1163"><a href="#Generator.update_sql-1163"><span class="linenos">1163</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-1164"><a href="#Generator.update_sql-1164"><span class="linenos">1164</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-1165"><a href="#Generator.update_sql-1165"><span class="linenos">1165</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-1166"><a href="#Generator.update_sql-1166"><span class="linenos">1166</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">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-1167"><a href="#Generator.update_sql-1167"><span class="linenos">1167</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>
@@ -7310,16 +7341,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.values_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.values_sql-1167"><a href="#Generator.values_sql-1167"><span class="linenos">1167</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-1168"><a href="#Generator.values_sql-1168"><span class="linenos">1168</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-1169"><a href="#Generator.values_sql-1169"><span class="linenos">1169</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-1170"><a href="#Generator.values_sql-1170"><span class="linenos">1170</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-1171"><a href="#Generator.values_sql-1171"><span class="linenos">1171</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.values_sql-1172"><a href="#Generator.values_sql-1172"><span class="linenos">1172</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-1173"><a href="#Generator.values_sql-1173"><span class="linenos">1173</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-1174"><a href="#Generator.values_sql-1174"><span class="linenos">1174</span></a> <span class="k">else</span> <span class="n">values</span>
-</span><span id="Generator.values_sql-1175"><a href="#Generator.values_sql-1175"><span class="linenos">1175</span></a> <span class="p">)</span>
-</span><span id="Generator.values_sql-1176"><a href="#Generator.values_sql-1176"><span class="linenos">1176</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.values_sql-1169"><a href="#Generator.values_sql-1169"><span class="linenos">1169</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-1170"><a href="#Generator.values_sql-1170"><span class="linenos">1170</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-1171"><a href="#Generator.values_sql-1171"><span class="linenos">1171</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-1172"><a href="#Generator.values_sql-1172"><span class="linenos">1172</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-1173"><a href="#Generator.values_sql-1173"><span class="linenos">1173</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.values_sql-1174"><a href="#Generator.values_sql-1174"><span class="linenos">1174</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-1175"><a href="#Generator.values_sql-1175"><span class="linenos">1175</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-1176"><a href="#Generator.values_sql-1176"><span class="linenos">1176</span></a> <span class="k">else</span> <span class="n">values</span>
+</span><span id="Generator.values_sql-1177"><a href="#Generator.values_sql-1177"><span class="linenos">1177</span></a> <span class="p">)</span>
+</span><span id="Generator.values_sql-1178"><a href="#Generator.values_sql-1178"><span class="linenos">1178</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></pre></div>
@@ -7337,8 +7368,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.var_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.var_sql-1178"><a href="#Generator.var_sql-1178"><span class="linenos">1178</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-1179"><a href="#Generator.var_sql-1179"><span class="linenos">1179</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-1180"><a href="#Generator.var_sql-1180"><span class="linenos">1180</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-1181"><a href="#Generator.var_sql-1181"><span class="linenos">1181</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>
@@ -7356,10 +7387,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.into_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.into_sql-1181"><a href="#Generator.into_sql-1181"><span class="linenos">1181</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-1182"><a href="#Generator.into_sql-1182"><span class="linenos">1182</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-1183"><a href="#Generator.into_sql-1183"><span class="linenos">1183</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-1184"><a href="#Generator.into_sql-1184"><span class="linenos">1184</span></a> <span class="k">return</span> <span class="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-1183"><a href="#Generator.into_sql-1183"><span class="linenos">1183</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-1184"><a href="#Generator.into_sql-1184"><span class="linenos">1184</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-1185"><a href="#Generator.into_sql-1185"><span class="linenos">1185</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-1186"><a href="#Generator.into_sql-1186"><span class="linenos">1186</span></a> <span class="k">return</span> <span class="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>
@@ -7377,9 +7408,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.from_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.from_sql-1186"><a href="#Generator.from_sql-1186"><span class="linenos">1186</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-1187"><a href="#Generator.from_sql-1187"><span class="linenos">1187</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.from_sql-1188"><a href="#Generator.from_sql-1188"><span class="linenos">1188</span></a> <span class="k">return</span> <span class="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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.from_sql-1188"><a href="#Generator.from_sql-1188"><span class="linenos">1188</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-1189"><a href="#Generator.from_sql-1189"><span class="linenos">1189</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.from_sql-1190"><a href="#Generator.from_sql-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="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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7397,33 +7428,33 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.group_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.group_sql-1190"><a href="#Generator.group_sql-1190"><span class="linenos">1190</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-1191"><a href="#Generator.group_sql-1191"><span class="linenos">1191</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-1192"><a href="#Generator.group_sql-1192"><span class="linenos">1192</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-1193"><a href="#Generator.group_sql-1193"><span class="linenos">1193</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.group_sql-1194"><a href="#Generator.group_sql-1194"><span class="linenos">1194</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-1195"><a href="#Generator.group_sql-1195"><span class="linenos">1195</span></a> <span class="p">)</span>
-</span><span id="Generator.group_sql-1196"><a href="#Generator.group_sql-1196"><span class="linenos">1196</span></a>
-</span><span id="Generator.group_sql-1197"><a href="#Generator.group_sql-1197"><span class="linenos">1197</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-1198"><a href="#Generator.group_sql-1198"><span class="linenos">1198</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-1199"><a href="#Generator.group_sql-1199"><span class="linenos">1199</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-1200"><a href="#Generator.group_sql-1200"><span class="linenos">1200</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1201"><a href="#Generator.group_sql-1201"><span class="linenos">1201</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-1202"><a href="#Generator.group_sql-1202"><span class="linenos">1202</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-1203"><a href="#Generator.group_sql-1203"><span class="linenos">1203</span></a>
-</span><span id="Generator.group_sql-1204"><a href="#Generator.group_sql-1204"><span class="linenos">1204</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-1205"><a href="#Generator.group_sql-1205"><span class="linenos">1205</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-1206"><a href="#Generator.group_sql-1206"><span class="linenos">1206</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-1207"><a href="#Generator.group_sql-1207"><span class="linenos">1207</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.group_sql-1208"><a href="#Generator.group_sql-1208"><span class="linenos">1208</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-1209"><a href="#Generator.group_sql-1209"><span class="linenos">1209</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-1210"><a href="#Generator.group_sql-1210"><span class="linenos">1210</span></a>
-</span><span id="Generator.group_sql-1211"><a href="#Generator.group_sql-1211"><span class="linenos">1211</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">,</span> <span class="n">cube_sql</span><span class="p">,</span> <span class="n">rollup_sql</span><span class="p">,</span> <span class="n">sep</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="Generator.group_sql-1192"><a href="#Generator.group_sql-1192"><span class="linenos">1192</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-1193"><a href="#Generator.group_sql-1193"><span class="linenos">1193</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-1194"><a href="#Generator.group_sql-1194"><span class="linenos">1194</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-1195"><a href="#Generator.group_sql-1195"><span class="linenos">1195</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.group_sql-1196"><a href="#Generator.group_sql-1196"><span class="linenos">1196</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-1197"><a href="#Generator.group_sql-1197"><span class="linenos">1197</span></a> <span class="p">)</span>
+</span><span id="Generator.group_sql-1198"><a href="#Generator.group_sql-1198"><span class="linenos">1198</span></a>
+</span><span id="Generator.group_sql-1199"><a href="#Generator.group_sql-1199"><span class="linenos">1199</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-1200"><a href="#Generator.group_sql-1200"><span class="linenos">1200</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-1201"><a href="#Generator.group_sql-1201"><span class="linenos">1201</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-1202"><a href="#Generator.group_sql-1202"><span class="linenos">1202</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1203"><a href="#Generator.group_sql-1203"><span class="linenos">1203</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-1204"><a href="#Generator.group_sql-1204"><span class="linenos">1204</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-1205"><a href="#Generator.group_sql-1205"><span class="linenos">1205</span></a>
+</span><span id="Generator.group_sql-1206"><a href="#Generator.group_sql-1206"><span class="linenos">1206</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-1207"><a href="#Generator.group_sql-1207"><span class="linenos">1207</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-1208"><a href="#Generator.group_sql-1208"><span class="linenos">1208</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-1209"><a href="#Generator.group_sql-1209"><span class="linenos">1209</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.group_sql-1210"><a href="#Generator.group_sql-1210"><span class="linenos">1210</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-1211"><a href="#Generator.group_sql-1211"><span class="linenos">1211</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-1212"><a href="#Generator.group_sql-1212"><span class="linenos">1212</span></a>
-</span><span id="Generator.group_sql-1213"><a href="#Generator.group_sql-1213"><span class="linenos">1213</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-1214"><a href="#Generator.group_sql-1214"><span class="linenos">1214</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="s2">,&quot;</span>
-</span><span id="Generator.group_sql-1215"><a href="#Generator.group_sql-1215"><span class="linenos">1215</span></a>
-</span><span id="Generator.group_sql-1216"><a href="#Generator.group_sql-1216"><span class="linenos">1216</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.group_sql-1213"><a href="#Generator.group_sql-1213"><span class="linenos">1213</span></a> <span class="n">groupings</span> <span class="o">=</span> <span class="n">csv</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">,</span> <span class="n">cube_sql</span><span class="p">,</span> <span class="n">rollup_sql</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.group_sql-1214"><a href="#Generator.group_sql-1214"><span class="linenos">1214</span></a>
+</span><span id="Generator.group_sql-1215"><a href="#Generator.group_sql-1215"><span class="linenos">1215</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-1216"><a href="#Generator.group_sql-1216"><span class="linenos">1216</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="s2">,&quot;</span>
+</span><span id="Generator.group_sql-1217"><a href="#Generator.group_sql-1217"><span class="linenos">1217</span></a>
+</span><span id="Generator.group_sql-1218"><a href="#Generator.group_sql-1218"><span class="linenos">1218</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>
@@ -7441,9 +7472,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.having_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.having_sql-1218"><a href="#Generator.having_sql-1218"><span class="linenos">1218</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-1219"><a href="#Generator.having_sql-1219"><span class="linenos">1219</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-1220"><a href="#Generator.having_sql-1220"><span class="linenos">1220</span></a> <span class="k">return</span> <span class="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-1220"><a href="#Generator.having_sql-1220"><span class="linenos">1220</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-1221"><a href="#Generator.having_sql-1221"><span class="linenos">1221</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-1222"><a href="#Generator.having_sql-1222"><span class="linenos">1222</span></a> <span class="k">return</span> <span class="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>
@@ -7461,37 +7492,37 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.join_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.join_sql-1222"><a href="#Generator.join_sql-1222"><span class="linenos">1222</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-1223"><a href="#Generator.join_sql-1223"><span class="linenos">1223</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><span id="Generator.join_sql-1224"><a href="#Generator.join_sql-1224"><span class="linenos">1224</span></a> <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-1225"><a href="#Generator.join_sql-1225"><span class="linenos">1225</span></a> <span class="n">op</span>
-</span><span id="Generator.join_sql-1226"><a href="#Generator.join_sql-1226"><span class="linenos">1226</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-1227"><a href="#Generator.join_sql-1227"><span class="linenos">1227</span></a> <span class="s2">&quot;NATURAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;natural&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-1228"><a href="#Generator.join_sql-1228"><span class="linenos">1228</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1229"><a href="#Generator.join_sql-1229"><span class="linenos">1229</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-1230"><a href="#Generator.join_sql-1230"><span class="linenos">1230</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-1231"><a href="#Generator.join_sql-1231"><span class="linenos">1231</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">,</span>
-</span><span id="Generator.join_sql-1232"><a href="#Generator.join_sql-1232"><span class="linenos">1232</span></a> <span class="p">)</span>
-</span><span id="Generator.join_sql-1233"><a href="#Generator.join_sql-1233"><span class="linenos">1233</span></a> <span class="k">if</span> <span class="n">op</span>
-</span><span id="Generator.join_sql-1234"><a href="#Generator.join_sql-1234"><span class="linenos">1234</span></a> <span class="p">)</span>
-</span><span id="Generator.join_sql-1235"><a href="#Generator.join_sql-1235"><span class="linenos">1235</span></a> <span class="p">)</span>
-</span><span id="Generator.join_sql-1236"><a href="#Generator.join_sql-1236"><span class="linenos">1236</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-1237"><a href="#Generator.join_sql-1237"><span class="linenos">1237</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-1238"><a href="#Generator.join_sql-1238"><span class="linenos">1238</span></a>
-</span><span id="Generator.join_sql-1239"><a href="#Generator.join_sql-1239"><span class="linenos">1239</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-1240"><a href="#Generator.join_sql-1240"><span class="linenos">1240</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-1241"><a href="#Generator.join_sql-1241"><span class="linenos">1241</span></a>
-</span><span id="Generator.join_sql-1242"><a href="#Generator.join_sql-1242"><span class="linenos">1242</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1243"><a href="#Generator.join_sql-1243"><span class="linenos">1243</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-1244"><a href="#Generator.join_sql-1244"><span class="linenos">1244</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-1245"><a href="#Generator.join_sql-1245"><span class="linenos">1245</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1246"><a href="#Generator.join_sql-1246"><span class="linenos">1246</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-1247"><a href="#Generator.join_sql-1247"><span class="linenos">1247</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.join_sql-1248"><a href="#Generator.join_sql-1248"><span class="linenos">1248</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-1249"><a href="#Generator.join_sql-1249"><span class="linenos">1249</span></a>
-</span><span id="Generator.join_sql-1250"><a href="#Generator.join_sql-1250"><span class="linenos">1250</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.join_sql-1251"><a href="#Generator.join_sql-1251"><span class="linenos">1251</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.join_sql-1252"><a href="#Generator.join_sql-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="n">expression_sql</span><span class="si">}{</span><span class="n">op_sql</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-1224"><a href="#Generator.join_sql-1224"><span class="linenos">1224</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-1225"><a href="#Generator.join_sql-1225"><span class="linenos">1225</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><span id="Generator.join_sql-1226"><a href="#Generator.join_sql-1226"><span class="linenos">1226</span></a> <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-1227"><a href="#Generator.join_sql-1227"><span class="linenos">1227</span></a> <span class="n">op</span>
+</span><span id="Generator.join_sql-1228"><a href="#Generator.join_sql-1228"><span class="linenos">1228</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-1229"><a href="#Generator.join_sql-1229"><span class="linenos">1229</span></a> <span class="s2">&quot;NATURAL&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;natural&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-1230"><a href="#Generator.join_sql-1230"><span class="linenos">1230</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1231"><a href="#Generator.join_sql-1231"><span class="linenos">1231</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-1232"><a href="#Generator.join_sql-1232"><span class="linenos">1232</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-1233"><a href="#Generator.join_sql-1233"><span class="linenos">1233</span></a> <span class="s2">&quot;JOIN&quot;</span><span class="p">,</span>
+</span><span id="Generator.join_sql-1234"><a href="#Generator.join_sql-1234"><span class="linenos">1234</span></a> <span class="p">)</span>
+</span><span id="Generator.join_sql-1235"><a href="#Generator.join_sql-1235"><span class="linenos">1235</span></a> <span class="k">if</span> <span class="n">op</span>
+</span><span id="Generator.join_sql-1236"><a href="#Generator.join_sql-1236"><span class="linenos">1236</span></a> <span class="p">)</span>
+</span><span id="Generator.join_sql-1237"><a href="#Generator.join_sql-1237"><span class="linenos">1237</span></a> <span class="p">)</span>
+</span><span id="Generator.join_sql-1238"><a href="#Generator.join_sql-1238"><span class="linenos">1238</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-1239"><a href="#Generator.join_sql-1239"><span class="linenos">1239</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-1240"><a href="#Generator.join_sql-1240"><span class="linenos">1240</span></a>
+</span><span id="Generator.join_sql-1241"><a href="#Generator.join_sql-1241"><span class="linenos">1241</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-1242"><a href="#Generator.join_sql-1242"><span class="linenos">1242</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-1243"><a href="#Generator.join_sql-1243"><span class="linenos">1243</span></a>
+</span><span id="Generator.join_sql-1244"><a href="#Generator.join_sql-1244"><span class="linenos">1244</span></a> <span class="k">if</span> <span class="n">on_sql</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1245"><a href="#Generator.join_sql-1245"><span class="linenos">1245</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-1246"><a href="#Generator.join_sql-1246"><span class="linenos">1246</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-1247"><a href="#Generator.join_sql-1247"><span class="linenos">1247</span></a> <span class="k">if</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1248"><a href="#Generator.join_sql-1248"><span class="linenos">1248</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-1249"><a href="#Generator.join_sql-1249"><span class="linenos">1249</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.join_sql-1250"><a href="#Generator.join_sql-1250"><span class="linenos">1250</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-1251"><a href="#Generator.join_sql-1251"><span class="linenos">1251</span></a>
+</span><span id="Generator.join_sql-1252"><a href="#Generator.join_sql-1252"><span class="linenos">1252</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.join_sql-1253"><a href="#Generator.join_sql-1253"><span class="linenos">1253</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.join_sql-1254"><a href="#Generator.join_sql-1254"><span class="linenos">1254</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_sql</span><span class="si">}{</span><span class="n">op_sql</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>
@@ -7509,10 +7540,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.lambda_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lambda_sql-1254"><a href="#Generator.lambda_sql-1254"><span class="linenos">1254</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-1255"><a href="#Generator.lambda_sql-1255"><span class="linenos">1255</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-1256"><a href="#Generator.lambda_sql-1256"><span class="linenos">1256</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-1257"><a href="#Generator.lambda_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="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-1256"><a href="#Generator.lambda_sql-1256"><span class="linenos">1256</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-1257"><a href="#Generator.lambda_sql-1257"><span class="linenos">1257</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-1258"><a href="#Generator.lambda_sql-1258"><span class="linenos">1258</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-1259"><a href="#Generator.lambda_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">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>
@@ -7530,23 +7561,23 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.lateral_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lateral_sql-1259"><a href="#Generator.lateral_sql-1259"><span class="linenos">1259</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-1260"><a href="#Generator.lateral_sql-1260"><span class="linenos">1260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1261"><a href="#Generator.lateral_sql-1261"><span class="linenos">1261</span></a>
-</span><span id="Generator.lateral_sql-1262"><a href="#Generator.lateral_sql-1262"><span class="linenos">1262</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">Subquery</span><span class="p">):</span>
-</span><span id="Generator.lateral_sql-1263"><a href="#Generator.lateral_sql-1263"><span class="linenos">1263</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.lateral_sql-1264"><a href="#Generator.lateral_sql-1264"><span class="linenos">1264</span></a>
-</span><span id="Generator.lateral_sql-1265"><a href="#Generator.lateral_sql-1265"><span class="linenos">1265</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-1266"><a href="#Generator.lateral_sql-1266"><span class="linenos">1266</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-1267"><a href="#Generator.lateral_sql-1267"><span class="linenos">1267</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-1268"><a href="#Generator.lateral_sql-1268"><span class="linenos">1268</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-1269"><a href="#Generator.lateral_sql-1269"><span class="linenos">1269</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-1270"><a href="#Generator.lateral_sql-1270"><span class="linenos">1270</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-1271"><a href="#Generator.lateral_sql-1271"><span class="linenos">1271</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-1272"><a href="#Generator.lateral_sql-1272"><span class="linenos">1272</span></a>
-</span><span id="Generator.lateral_sql-1273"><a href="#Generator.lateral_sql-1273"><span class="linenos">1273</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-1274"><a href="#Generator.lateral_sql-1274"><span class="linenos">1274</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-1275"><a href="#Generator.lateral_sql-1275"><span class="linenos">1275</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </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-1261"><a href="#Generator.lateral_sql-1261"><span class="linenos">1261</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-1262"><a href="#Generator.lateral_sql-1262"><span class="linenos">1262</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1263"><a href="#Generator.lateral_sql-1263"><span class="linenos">1263</span></a>
+</span><span id="Generator.lateral_sql-1264"><a href="#Generator.lateral_sql-1264"><span class="linenos">1264</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">Subquery</span><span class="p">):</span>
+</span><span id="Generator.lateral_sql-1265"><a href="#Generator.lateral_sql-1265"><span class="linenos">1265</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.lateral_sql-1266"><a href="#Generator.lateral_sql-1266"><span class="linenos">1266</span></a>
+</span><span id="Generator.lateral_sql-1267"><a href="#Generator.lateral_sql-1267"><span class="linenos">1267</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-1268"><a href="#Generator.lateral_sql-1268"><span class="linenos">1268</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-1269"><a href="#Generator.lateral_sql-1269"><span class="linenos">1269</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-1270"><a href="#Generator.lateral_sql-1270"><span class="linenos">1270</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-1271"><a href="#Generator.lateral_sql-1271"><span class="linenos">1271</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-1272"><a href="#Generator.lateral_sql-1272"><span class="linenos">1272</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-1273"><a href="#Generator.lateral_sql-1273"><span class="linenos">1273</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-1274"><a href="#Generator.lateral_sql-1274"><span class="linenos">1274</span></a>
+</span><span id="Generator.lateral_sql-1275"><a href="#Generator.lateral_sql-1275"><span class="linenos">1275</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-1276"><a href="#Generator.lateral_sql-1276"><span class="linenos">1276</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-1277"><a href="#Generator.lateral_sql-1277"><span class="linenos">1277</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;LATERAL </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>
@@ -7564,9 +7595,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.limit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.limit_sql-1277"><a href="#Generator.limit_sql-1277"><span class="linenos">1277</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.limit_sql-1278"><a href="#Generator.limit_sql-1278"><span class="linenos">1278</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1279"><a href="#Generator.limit_sql-1279"><span class="linenos">1279</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;LIMIT&#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.limit_sql-1279"><a href="#Generator.limit_sql-1279"><span class="linenos">1279</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.limit_sql-1280"><a href="#Generator.limit_sql-1280"><span class="linenos">1280</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1281"><a href="#Generator.limit_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">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;LIMIT&#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>
@@ -7584,9 +7615,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.offset_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.offset_sql-1281"><a href="#Generator.offset_sql-1281"><span class="linenos">1281</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-1282"><a href="#Generator.offset_sql-1282"><span class="linenos">1282</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1283"><a href="#Generator.offset_sql-1283"><span class="linenos">1283</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="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.offset_sql-1283"><a href="#Generator.offset_sql-1283"><span class="linenos">1283</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-1284"><a href="#Generator.offset_sql-1284"><span class="linenos">1284</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1285"><a href="#Generator.offset_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">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="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>
@@ -7604,15 +7635,15 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.setitem_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.setitem_sql-1285"><a href="#Generator.setitem_sql-1285"><span class="linenos">1285</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-1286"><a href="#Generator.setitem_sql-1286"><span class="linenos">1286</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-1287"><a href="#Generator.setitem_sql-1287"><span class="linenos">1287</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-1288"><a href="#Generator.setitem_sql-1288"><span class="linenos">1288</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1289"><a href="#Generator.setitem_sql-1289"><span class="linenos">1289</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-1290"><a href="#Generator.setitem_sql-1290"><span class="linenos">1290</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-1291"><a href="#Generator.setitem_sql-1291"><span class="linenos">1291</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-1292"><a href="#Generator.setitem_sql-1292"><span class="linenos">1292</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-1293"><a href="#Generator.setitem_sql-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">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-1287"><a href="#Generator.setitem_sql-1287"><span class="linenos">1287</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-1288"><a href="#Generator.setitem_sql-1288"><span class="linenos">1288</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-1289"><a href="#Generator.setitem_sql-1289"><span class="linenos">1289</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-1290"><a href="#Generator.setitem_sql-1290"><span class="linenos">1290</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1291"><a href="#Generator.setitem_sql-1291"><span class="linenos">1291</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-1292"><a href="#Generator.setitem_sql-1292"><span class="linenos">1292</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-1293"><a href="#Generator.setitem_sql-1293"><span class="linenos">1293</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-1294"><a href="#Generator.setitem_sql-1294"><span class="linenos">1294</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-1295"><a href="#Generator.setitem_sql-1295"><span class="linenos">1295</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>
@@ -7630,11 +7661,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.set_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_sql-1295"><a href="#Generator.set_sql-1295"><span class="linenos">1295</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-1296"><a href="#Generator.set_sql-1296"><span class="linenos">1296</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.set_sql-1297"><a href="#Generator.set_sql-1297"><span class="linenos">1297</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-1298"><a href="#Generator.set_sql-1298"><span class="linenos">1298</span></a> <span class="p">)</span>
-</span><span id="Generator.set_sql-1299"><a href="#Generator.set_sql-1299"><span class="linenos">1299</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SET</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-1297"><a href="#Generator.set_sql-1297"><span class="linenos">1297</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-1298"><a href="#Generator.set_sql-1298"><span class="linenos">1298</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.set_sql-1299"><a href="#Generator.set_sql-1299"><span class="linenos">1299</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-1300"><a href="#Generator.set_sql-1300"><span class="linenos">1300</span></a> <span class="p">)</span>
+</span><span id="Generator.set_sql-1301"><a href="#Generator.set_sql-1301"><span class="linenos">1301</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;SET</span><span class="si">{</span><span class="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7652,8 +7683,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.pragma_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.pragma_sql-1301"><a href="#Generator.pragma_sql-1301"><span class="linenos">1301</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-1302"><a href="#Generator.pragma_sql-1302"><span class="linenos">1302</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-1303"><a href="#Generator.pragma_sql-1303"><span class="linenos">1303</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-1304"><a href="#Generator.pragma_sql-1304"><span class="linenos">1304</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>
@@ -7671,13 +7702,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.lock_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lock_sql-1304"><a href="#Generator.lock_sql-1304"><span class="linenos">1304</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-1305"><a href="#Generator.lock_sql-1305"><span class="linenos">1305</span></a> <span class="k">if</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-1306"><a href="#Generator.lock_sql-1306"><span class="linenos">1306</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;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;SHARE&quot;</span>
-</span><span id="Generator.lock_sql-1307"><a href="#Generator.lock_sql-1307"><span class="linenos">1307</span></a> <span class="k">return</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;FOR </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Generator.lock_sql-1308"><a href="#Generator.lock_sql-1308"><span class="linenos">1308</span></a>
-</span><span id="Generator.lock_sql-1309"><a href="#Generator.lock_sql-1309"><span class="linenos">1309</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-1310"><a href="#Generator.lock_sql-1310"><span class="linenos">1310</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lock_sql-1306"><a href="#Generator.lock_sql-1306"><span class="linenos">1306</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-1307"><a href="#Generator.lock_sql-1307"><span class="linenos">1307</span></a> <span class="k">if</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-1308"><a href="#Generator.lock_sql-1308"><span class="linenos">1308</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;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;SHARE&quot;</span>
+</span><span id="Generator.lock_sql-1309"><a href="#Generator.lock_sql-1309"><span class="linenos">1309</span></a> <span class="k">return</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;FOR </span><span class="si">{</span><span class="n">lock_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Generator.lock_sql-1310"><a href="#Generator.lock_sql-1310"><span class="linenos">1310</span></a>
+</span><span id="Generator.lock_sql-1311"><a href="#Generator.lock_sql-1311"><span class="linenos">1311</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-1312"><a href="#Generator.lock_sql-1312"><span class="linenos">1312</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</span></pre></div>
@@ -7695,14 +7726,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.literal_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.literal_sql-1312"><a href="#Generator.literal_sql-1312"><span class="linenos">1312</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-1313"><a href="#Generator.literal_sql-1313"><span class="linenos">1313</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-1314"><a href="#Generator.literal_sql-1314"><span class="linenos">1314</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-1315"><a href="#Generator.literal_sql-1315"><span class="linenos">1315</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">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.literal_sql-1316"><a href="#Generator.literal_sql-1316"><span class="linenos">1316</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.literal_sql-1317"><a href="#Generator.literal_sql-1317"><span class="linenos">1317</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.literal_sql-1318"><a href="#Generator.literal_sql-1318"><span class="linenos">1318</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">quote_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">quote_end</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.literal_sql-1319"><a href="#Generator.literal_sql-1319"><span class="linenos">1319</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-1314"><a href="#Generator.literal_sql-1314"><span class="linenos">1314</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-1315"><a href="#Generator.literal_sql-1315"><span class="linenos">1315</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-1316"><a href="#Generator.literal_sql-1316"><span class="linenos">1316</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-1317"><a href="#Generator.literal_sql-1317"><span class="linenos">1317</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">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.literal_sql-1318"><a href="#Generator.literal_sql-1318"><span class="linenos">1318</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.literal_sql-1319"><a href="#Generator.literal_sql-1319"><span class="linenos">1319</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.literal_sql-1320"><a href="#Generator.literal_sql-1320"><span class="linenos">1320</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">quote_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">quote_end</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.literal_sql-1321"><a href="#Generator.literal_sql-1321"><span class="linenos">1321</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -7720,18 +7751,18 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.loaddata_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.loaddata_sql-1321"><a href="#Generator.loaddata_sql-1321"><span class="linenos">1321</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-1322"><a href="#Generator.loaddata_sql-1322"><span class="linenos">1322</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-1323"><a href="#Generator.loaddata_sql-1323"><span class="linenos">1323</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-1324"><a href="#Generator.loaddata_sql-1324"><span class="linenos">1324</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-1325"><a href="#Generator.loaddata_sql-1325"><span class="linenos">1325</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-1326"><a href="#Generator.loaddata_sql-1326"><span class="linenos">1326</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-1327"><a href="#Generator.loaddata_sql-1327"><span class="linenos">1327</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-1328"><a href="#Generator.loaddata_sql-1328"><span class="linenos">1328</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-1329"><a href="#Generator.loaddata_sql-1329"><span class="linenos">1329</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-1330"><a href="#Generator.loaddata_sql-1330"><span class="linenos">1330</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-1331"><a href="#Generator.loaddata_sql-1331"><span class="linenos">1331</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-1332"><a href="#Generator.loaddata_sql-1332"><span class="linenos">1332</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-1323"><a href="#Generator.loaddata_sql-1323"><span class="linenos">1323</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-1324"><a href="#Generator.loaddata_sql-1324"><span class="linenos">1324</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-1325"><a href="#Generator.loaddata_sql-1325"><span class="linenos">1325</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-1326"><a href="#Generator.loaddata_sql-1326"><span class="linenos">1326</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-1327"><a href="#Generator.loaddata_sql-1327"><span class="linenos">1327</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-1328"><a href="#Generator.loaddata_sql-1328"><span class="linenos">1328</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-1329"><a href="#Generator.loaddata_sql-1329"><span class="linenos">1329</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-1330"><a href="#Generator.loaddata_sql-1330"><span class="linenos">1330</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-1331"><a href="#Generator.loaddata_sql-1331"><span class="linenos">1331</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-1332"><a href="#Generator.loaddata_sql-1332"><span class="linenos">1332</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-1333"><a href="#Generator.loaddata_sql-1333"><span class="linenos">1333</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-1334"><a href="#Generator.loaddata_sql-1334"><span class="linenos">1334</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>
@@ -7749,8 +7780,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.null_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.null_sql-1334"><a href="#Generator.null_sql-1334"><span class="linenos">1334</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-1335"><a href="#Generator.null_sql-1335"><span class="linenos">1335</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-1336"><a href="#Generator.null_sql-1336"><span class="linenos">1336</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-1337"><a href="#Generator.null_sql-1337"><span class="linenos">1337</span></a> <span class="k">return</span> <span class="s2">&quot;NULL&quot;</span>
</span></pre></div>
@@ -7768,8 +7799,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.boolean_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.boolean_sql-1337"><a href="#Generator.boolean_sql-1337"><span class="linenos">1337</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-1338"><a href="#Generator.boolean_sql-1338"><span class="linenos">1338</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-1339"><a href="#Generator.boolean_sql-1339"><span class="linenos">1339</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-1340"><a href="#Generator.boolean_sql-1340"><span class="linenos">1340</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>
@@ -7787,10 +7818,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.order_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.order_sql-1340"><a href="#Generator.order_sql-1340"><span class="linenos">1340</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-1341"><a href="#Generator.order_sql-1341"><span class="linenos">1341</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1342"><a href="#Generator.order_sql-1342"><span class="linenos">1342</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-1343"><a href="#Generator.order_sql-1343"><span class="linenos">1343</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="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 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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.order_sql-1342"><a href="#Generator.order_sql-1342"><span class="linenos">1342</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-1343"><a href="#Generator.order_sql-1343"><span class="linenos">1343</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1344"><a href="#Generator.order_sql-1344"><span class="linenos">1344</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-1345"><a href="#Generator.order_sql-1345"><span class="linenos">1345</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="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 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></pre></div>
@@ -7808,8 +7839,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.cluster_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cluster_sql-1345"><a href="#Generator.cluster_sql-1345"><span class="linenos">1345</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-1346"><a href="#Generator.cluster_sql-1346"><span class="linenos">1346</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-1347"><a href="#Generator.cluster_sql-1347"><span class="linenos">1347</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-1348"><a href="#Generator.cluster_sql-1348"><span class="linenos">1348</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>
@@ -7827,8 +7858,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.distribute_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distribute_sql-1348"><a href="#Generator.distribute_sql-1348"><span class="linenos">1348</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-1349"><a href="#Generator.distribute_sql-1349"><span class="linenos">1349</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-1350"><a href="#Generator.distribute_sql-1350"><span class="linenos">1350</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-1351"><a href="#Generator.distribute_sql-1351"><span class="linenos">1351</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>
@@ -7846,8 +7877,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.sort_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sort_sql-1351"><a href="#Generator.sort_sql-1351"><span class="linenos">1351</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-1352"><a href="#Generator.sort_sql-1352"><span class="linenos">1352</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-1353"><a href="#Generator.sort_sql-1353"><span class="linenos">1353</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-1354"><a href="#Generator.sort_sql-1354"><span class="linenos">1354</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>
@@ -7865,36 +7896,36 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.ordered_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ordered_sql-1354"><a href="#Generator.ordered_sql-1354"><span class="linenos">1354</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-1355"><a href="#Generator.ordered_sql-1355"><span class="linenos">1355</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-1356"><a href="#Generator.ordered_sql-1356"><span class="linenos">1356</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-1357"><a href="#Generator.ordered_sql-1357"><span class="linenos">1357</span></a>
-</span><span id="Generator.ordered_sql-1358"><a href="#Generator.ordered_sql-1358"><span class="linenos">1358</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-1359"><a href="#Generator.ordered_sql-1359"><span class="linenos">1359</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-1360"><a href="#Generator.ordered_sql-1360"><span class="linenos">1360</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
-</span><span id="Generator.ordered_sql-1361"><a href="#Generator.ordered_sql-1361"><span class="linenos">1361</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
-</span><span id="Generator.ordered_sql-1362"><a href="#Generator.ordered_sql-1362"><span class="linenos">1362</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="Generator.ordered_sql-1363"><a href="#Generator.ordered_sql-1363"><span class="linenos">1363</span></a>
-</span><span id="Generator.ordered_sql-1364"><a href="#Generator.ordered_sql-1364"><span class="linenos">1364</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="s2">&quot;&quot;</span>
-</span><span id="Generator.ordered_sql-1365"><a href="#Generator.ordered_sql-1365"><span class="linenos">1365</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-1366"><a href="#Generator.ordered_sql-1366"><span class="linenos">1366</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-1367"><a href="#Generator.ordered_sql-1367"><span class="linenos">1367</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-1368"><a href="#Generator.ordered_sql-1368"><span class="linenos">1368</span></a> <span class="p">):</span>
-</span><span id="Generator.ordered_sql-1369"><a href="#Generator.ordered_sql-1369"><span class="linenos">1369</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-1370"><a href="#Generator.ordered_sql-1370"><span class="linenos">1370</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="Generator.ordered_sql-1371"><a href="#Generator.ordered_sql-1371"><span class="linenos">1371</span></a> <span class="n">nulls_last</span>
-</span><span id="Generator.ordered_sql-1372"><a href="#Generator.ordered_sql-1372"><span class="linenos">1372</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-1373"><a href="#Generator.ordered_sql-1373"><span class="linenos">1373</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-1374"><a href="#Generator.ordered_sql-1374"><span class="linenos">1374</span></a> <span class="p">):</span>
-</span><span id="Generator.ordered_sql-1375"><a href="#Generator.ordered_sql-1375"><span class="linenos">1375</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-1376"><a href="#Generator.ordered_sql-1376"><span class="linenos">1376</span></a>
-</span><span id="Generator.ordered_sql-1377"><a href="#Generator.ordered_sql-1377"><span class="linenos">1377</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-1378"><a href="#Generator.ordered_sql-1378"><span class="linenos">1378</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-1379"><a href="#Generator.ordered_sql-1379"><span class="linenos">1379</span></a> <span class="s2">&quot;Sorting in an ORDER BY on NULLS FIRST/NULLS LAST is not supported by this dialect&quot;</span>
-</span><span id="Generator.ordered_sql-1380"><a href="#Generator.ordered_sql-1380"><span class="linenos">1380</span></a> <span class="p">)</span>
-</span><span id="Generator.ordered_sql-1381"><a href="#Generator.ordered_sql-1381"><span class="linenos">1381</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-1382"><a href="#Generator.ordered_sql-1382"><span class="linenos">1382</span></a>
-</span><span id="Generator.ordered_sql-1383"><a href="#Generator.ordered_sql-1383"><span class="linenos">1383</span></a> <span class="k">return</span> <span class="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">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ordered_sql-1356"><a href="#Generator.ordered_sql-1356"><span class="linenos">1356</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-1357"><a href="#Generator.ordered_sql-1357"><span class="linenos">1357</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-1358"><a href="#Generator.ordered_sql-1358"><span class="linenos">1358</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-1359"><a href="#Generator.ordered_sql-1359"><span class="linenos">1359</span></a>
+</span><span id="Generator.ordered_sql-1360"><a href="#Generator.ordered_sql-1360"><span class="linenos">1360</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-1361"><a href="#Generator.ordered_sql-1361"><span class="linenos">1361</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-1362"><a href="#Generator.ordered_sql-1362"><span class="linenos">1362</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_large&quot;</span>
+</span><span id="Generator.ordered_sql-1363"><a href="#Generator.ordered_sql-1363"><span class="linenos">1363</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span>
+</span><span id="Generator.ordered_sql-1364"><a href="#Generator.ordered_sql-1364"><span class="linenos">1364</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">null_ordering</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="Generator.ordered_sql-1365"><a href="#Generator.ordered_sql-1365"><span class="linenos">1365</span></a>
+</span><span id="Generator.ordered_sql-1366"><a href="#Generator.ordered_sql-1366"><span class="linenos">1366</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="s2">&quot;&quot;</span>
+</span><span id="Generator.ordered_sql-1367"><a href="#Generator.ordered_sql-1367"><span class="linenos">1367</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-1368"><a href="#Generator.ordered_sql-1368"><span class="linenos">1368</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-1369"><a href="#Generator.ordered_sql-1369"><span class="linenos">1369</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-1370"><a href="#Generator.ordered_sql-1370"><span class="linenos">1370</span></a> <span class="p">):</span>
+</span><span id="Generator.ordered_sql-1371"><a href="#Generator.ordered_sql-1371"><span class="linenos">1371</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-1372"><a href="#Generator.ordered_sql-1372"><span class="linenos">1372</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="Generator.ordered_sql-1373"><a href="#Generator.ordered_sql-1373"><span class="linenos">1373</span></a> <span class="n">nulls_last</span>
+</span><span id="Generator.ordered_sql-1374"><a href="#Generator.ordered_sql-1374"><span class="linenos">1374</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-1375"><a href="#Generator.ordered_sql-1375"><span class="linenos">1375</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-1376"><a href="#Generator.ordered_sql-1376"><span class="linenos">1376</span></a> <span class="p">):</span>
+</span><span id="Generator.ordered_sql-1377"><a href="#Generator.ordered_sql-1377"><span class="linenos">1377</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-1378"><a href="#Generator.ordered_sql-1378"><span class="linenos">1378</span></a>
+</span><span id="Generator.ordered_sql-1379"><a href="#Generator.ordered_sql-1379"><span class="linenos">1379</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-1380"><a href="#Generator.ordered_sql-1380"><span class="linenos">1380</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-1381"><a href="#Generator.ordered_sql-1381"><span class="linenos">1381</span></a> <span class="s2">&quot;Sorting in an ORDER BY on NULLS FIRST/NULLS LAST is not supported by this dialect&quot;</span>
+</span><span id="Generator.ordered_sql-1382"><a href="#Generator.ordered_sql-1382"><span class="linenos">1382</span></a> <span class="p">)</span>
+</span><span id="Generator.ordered_sql-1383"><a href="#Generator.ordered_sql-1383"><span class="linenos">1383</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-1384"><a href="#Generator.ordered_sql-1384"><span class="linenos">1384</span></a>
+</span><span id="Generator.ordered_sql-1385"><a href="#Generator.ordered_sql-1385"><span class="linenos">1385</span></a> <span class="k">return</span> <span class="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">sort_order</span><span class="si">}{</span><span class="n">nulls_sort_change</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -7912,37 +7943,37 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.matchrecognize_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchrecognize_sql-1385"><a href="#Generator.matchrecognize_sql-1385"><span class="linenos">1385</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-1386"><a href="#Generator.matchrecognize_sql-1386"><span class="linenos">1386</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-1387"><a href="#Generator.matchrecognize_sql-1387"><span class="linenos">1387</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-1388"><a href="#Generator.matchrecognize_sql-1388"><span class="linenos">1388</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-1389"><a href="#Generator.matchrecognize_sql-1389"><span class="linenos">1389</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-1390"><a href="#Generator.matchrecognize_sql-1390"><span class="linenos">1390</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-1391"><a href="#Generator.matchrecognize_sql-1391"><span class="linenos">1391</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-1392"><a href="#Generator.matchrecognize_sql-1392"><span class="linenos">1392</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-1393"><a href="#Generator.matchrecognize_sql-1393"><span class="linenos">1393</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-1394"><a href="#Generator.matchrecognize_sql-1394"><span class="linenos">1394</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-1395"><a href="#Generator.matchrecognize_sql-1395"><span class="linenos">1395</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-1396"><a href="#Generator.matchrecognize_sql-1396"><span class="linenos">1396</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Generator.matchrecognize_sql-1397"><a href="#Generator.matchrecognize_sql-1397"><span class="linenos">1397</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-1398"><a href="#Generator.matchrecognize_sql-1398"><span class="linenos">1398</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-1399"><a href="#Generator.matchrecognize_sql-1399"><span class="linenos">1399</span></a> <span class="p">]</span>
-</span><span id="Generator.matchrecognize_sql-1400"><a href="#Generator.matchrecognize_sql-1400"><span class="linenos">1400</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-1401"><a href="#Generator.matchrecognize_sql-1401"><span class="linenos">1401</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-1402"><a href="#Generator.matchrecognize_sql-1402"><span class="linenos">1402</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-1403"><a href="#Generator.matchrecognize_sql-1403"><span class="linenos">1403</span></a> <span class="p">(</span>
-</span><span id="Generator.matchrecognize_sql-1404"><a href="#Generator.matchrecognize_sql-1404"><span class="linenos">1404</span></a> <span class="n">partition</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1405"><a href="#Generator.matchrecognize_sql-1405"><span class="linenos">1405</span></a> <span class="n">order</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1406"><a href="#Generator.matchrecognize_sql-1406"><span class="linenos">1406</span></a> <span class="n">measures</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1407"><a href="#Generator.matchrecognize_sql-1407"><span class="linenos">1407</span></a> <span class="n">rows</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1408"><a href="#Generator.matchrecognize_sql-1408"><span class="linenos">1408</span></a> <span class="n">after</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1409"><a href="#Generator.matchrecognize_sql-1409"><span class="linenos">1409</span></a> <span class="n">pattern</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1410"><a href="#Generator.matchrecognize_sql-1410"><span class="linenos">1410</span></a> <span class="n">define</span><span class="p">,</span>
-</span><span id="Generator.matchrecognize_sql-1411"><a href="#Generator.matchrecognize_sql-1411"><span class="linenos">1411</span></a> <span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-1412"><a href="#Generator.matchrecognize_sql-1412"><span class="linenos">1412</span></a> <span class="p">)</span>
-</span><span id="Generator.matchrecognize_sql-1413"><a href="#Generator.matchrecognize_sql-1413"><span class="linenos">1413</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-1414"><a href="#Generator.matchrecognize_sql-1414"><span class="linenos">1414</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-1415"><a href="#Generator.matchrecognize_sql-1415"><span class="linenos">1415</span></a> <span class="k">return</span> <span class="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-1387"><a href="#Generator.matchrecognize_sql-1387"><span class="linenos">1387</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-1388"><a href="#Generator.matchrecognize_sql-1388"><span class="linenos">1388</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-1389"><a href="#Generator.matchrecognize_sql-1389"><span class="linenos">1389</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-1390"><a href="#Generator.matchrecognize_sql-1390"><span class="linenos">1390</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-1391"><a href="#Generator.matchrecognize_sql-1391"><span class="linenos">1391</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-1392"><a href="#Generator.matchrecognize_sql-1392"><span class="linenos">1392</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-1393"><a href="#Generator.matchrecognize_sql-1393"><span class="linenos">1393</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-1394"><a href="#Generator.matchrecognize_sql-1394"><span class="linenos">1394</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-1395"><a href="#Generator.matchrecognize_sql-1395"><span class="linenos">1395</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-1396"><a href="#Generator.matchrecognize_sql-1396"><span class="linenos">1396</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-1397"><a href="#Generator.matchrecognize_sql-1397"><span class="linenos">1397</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-1398"><a href="#Generator.matchrecognize_sql-1398"><span class="linenos">1398</span></a> <span class="n">definition_sqls</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Generator.matchrecognize_sql-1399"><a href="#Generator.matchrecognize_sql-1399"><span class="linenos">1399</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-1400"><a href="#Generator.matchrecognize_sql-1400"><span class="linenos">1400</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-1401"><a href="#Generator.matchrecognize_sql-1401"><span class="linenos">1401</span></a> <span class="p">]</span>
+</span><span id="Generator.matchrecognize_sql-1402"><a href="#Generator.matchrecognize_sql-1402"><span class="linenos">1402</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-1403"><a href="#Generator.matchrecognize_sql-1403"><span class="linenos">1403</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-1404"><a href="#Generator.matchrecognize_sql-1404"><span class="linenos">1404</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-1405"><a href="#Generator.matchrecognize_sql-1405"><span class="linenos">1405</span></a> <span class="p">(</span>
+</span><span id="Generator.matchrecognize_sql-1406"><a href="#Generator.matchrecognize_sql-1406"><span class="linenos">1406</span></a> <span class="n">partition</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1407"><a href="#Generator.matchrecognize_sql-1407"><span class="linenos">1407</span></a> <span class="n">order</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1408"><a href="#Generator.matchrecognize_sql-1408"><span class="linenos">1408</span></a> <span class="n">measures</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1409"><a href="#Generator.matchrecognize_sql-1409"><span class="linenos">1409</span></a> <span class="n">rows</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1410"><a href="#Generator.matchrecognize_sql-1410"><span class="linenos">1410</span></a> <span class="n">after</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1411"><a href="#Generator.matchrecognize_sql-1411"><span class="linenos">1411</span></a> <span class="n">pattern</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1412"><a href="#Generator.matchrecognize_sql-1412"><span class="linenos">1412</span></a> <span class="n">define</span><span class="p">,</span>
+</span><span id="Generator.matchrecognize_sql-1413"><a href="#Generator.matchrecognize_sql-1413"><span class="linenos">1413</span></a> <span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-1414"><a href="#Generator.matchrecognize_sql-1414"><span class="linenos">1414</span></a> <span class="p">)</span>
+</span><span id="Generator.matchrecognize_sql-1415"><a href="#Generator.matchrecognize_sql-1415"><span class="linenos">1415</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-1416"><a href="#Generator.matchrecognize_sql-1416"><span class="linenos">1416</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-1417"><a href="#Generator.matchrecognize_sql-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="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>
@@ -7960,38 +7991,38 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.query_modifiers"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.query_modifiers-1417"><a href="#Generator.query_modifiers-1417"><span class="linenos">1417</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-1418"><a href="#Generator.query_modifiers-1418"><span class="linenos">1418</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.query_modifiers-1419"><a href="#Generator.query_modifiers-1419"><span class="linenos">1419</span></a>
-</span><span id="Generator.query_modifiers-1420"><a href="#Generator.query_modifiers-1420"><span class="linenos">1420</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-1421"><a href="#Generator.query_modifiers-1421"><span class="linenos">1421</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">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-1422"><a href="#Generator.query_modifiers-1422"><span class="linenos">1422</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-1423"><a href="#Generator.query_modifiers-1423"><span class="linenos">1423</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">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Generator.query_modifiers-1424"><a href="#Generator.query_modifiers-1424"><span class="linenos">1424</span></a>
-</span><span id="Generator.query_modifiers-1425"><a href="#Generator.query_modifiers-1425"><span class="linenos">1425</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-1419"><a href="#Generator.query_modifiers-1419"><span class="linenos">1419</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-1420"><a href="#Generator.query_modifiers-1420"><span class="linenos">1420</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.query_modifiers-1421"><a href="#Generator.query_modifiers-1421"><span class="linenos">1421</span></a>
+</span><span id="Generator.query_modifiers-1422"><a href="#Generator.query_modifiers-1422"><span class="linenos">1422</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-1423"><a href="#Generator.query_modifiers-1423"><span class="linenos">1423</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">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-1424"><a href="#Generator.query_modifiers-1424"><span class="linenos">1424</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-1425"><a href="#Generator.query_modifiers-1425"><span class="linenos">1425</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">limit</span><span class="o">.</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Generator.query_modifiers-1426"><a href="#Generator.query_modifiers-1426"><span class="linenos">1426</span></a>
-</span><span id="Generator.query_modifiers-1427"><a href="#Generator.query_modifiers-1427"><span class="linenos">1427</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
-</span><span id="Generator.query_modifiers-1428"><a href="#Generator.query_modifiers-1428"><span class="linenos">1428</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
-</span><span id="Generator.query_modifiers-1429"><a href="#Generator.query_modifiers-1429"><span class="linenos">1429</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1430"><a href="#Generator.query_modifiers-1430"><span class="linenos">1430</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-1431"><a href="#Generator.query_modifiers-1431"><span class="linenos">1431</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1432"><a href="#Generator.query_modifiers-1432"><span class="linenos">1432</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-1433"><a href="#Generator.query_modifiers-1433"><span class="linenos">1433</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-1434"><a href="#Generator.query_modifiers-1434"><span class="linenos">1434</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-1435"><a href="#Generator.query_modifiers-1435"><span class="linenos">1435</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.query_modifiers-1436"><a href="#Generator.query_modifiers-1436"><span class="linenos">1436</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.query_modifiers-1437"><a href="#Generator.query_modifiers-1437"><span class="linenos">1437</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.query_modifiers-1438"><a href="#Generator.query_modifiers-1438"><span class="linenos">1438</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Generator.query_modifiers-1439"><a href="#Generator.query_modifiers-1439"><span class="linenos">1439</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.query_modifiers-1440"><a href="#Generator.query_modifiers-1440"><span class="linenos">1440</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.query_modifiers-1441"><a href="#Generator.query_modifiers-1441"><span class="linenos">1441</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.query_modifiers-1442"><a href="#Generator.query_modifiers-1442"><span class="linenos">1442</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-1443"><a href="#Generator.query_modifiers-1443"><span class="linenos">1443</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.query_modifiers-1444"><a href="#Generator.query_modifiers-1444"><span class="linenos">1444</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.query_modifiers-1445"><a href="#Generator.query_modifiers-1445"><span class="linenos">1445</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;lock&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-1446"><a href="#Generator.query_modifiers-1446"><span class="linenos">1446</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;sample&quot;</span><span class="p">),</span>
-</span><span id="Generator.query_modifiers-1447"><a href="#Generator.query_modifiers-1447"><span class="linenos">1447</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-1448"><a href="#Generator.query_modifiers-1448"><span class="linenos">1448</span></a> <span class="p">)</span>
+</span><span id="Generator.query_modifiers-1427"><a href="#Generator.query_modifiers-1427"><span class="linenos">1427</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-1428"><a href="#Generator.query_modifiers-1428"><span class="linenos">1428</span></a>
+</span><span id="Generator.query_modifiers-1429"><a href="#Generator.query_modifiers-1429"><span class="linenos">1429</span></a> <span class="k">return</span> <span class="n">csv</span><span class="p">(</span>
+</span><span id="Generator.query_modifiers-1430"><a href="#Generator.query_modifiers-1430"><span class="linenos">1430</span></a> <span class="o">*</span><span class="n">sqls</span><span class="p">,</span>
+</span><span id="Generator.query_modifiers-1431"><a href="#Generator.query_modifiers-1431"><span class="linenos">1431</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1432"><a href="#Generator.query_modifiers-1432"><span class="linenos">1432</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-1433"><a href="#Generator.query_modifiers-1433"><span class="linenos">1433</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">sql</span><span class="p">)</span> <span class="k">for</span> <span class="n">sql</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-1434"><a href="#Generator.query_modifiers-1434"><span class="linenos">1434</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-1435"><a href="#Generator.query_modifiers-1435"><span class="linenos">1435</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-1436"><a href="#Generator.query_modifiers-1436"><span class="linenos">1436</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-1437"><a href="#Generator.query_modifiers-1437"><span class="linenos">1437</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.query_modifiers-1438"><a href="#Generator.query_modifiers-1438"><span class="linenos">1438</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.query_modifiers-1439"><a href="#Generator.query_modifiers-1439"><span class="linenos">1439</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.query_modifiers-1440"><a href="#Generator.query_modifiers-1440"><span class="linenos">1440</span></a> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Generator.query_modifiers-1441"><a href="#Generator.query_modifiers-1441"><span class="linenos">1441</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.query_modifiers-1442"><a href="#Generator.query_modifiers-1442"><span class="linenos">1442</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.query_modifiers-1443"><a href="#Generator.query_modifiers-1443"><span class="linenos">1443</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.query_modifiers-1444"><a href="#Generator.query_modifiers-1444"><span class="linenos">1444</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-1445"><a href="#Generator.query_modifiers-1445"><span class="linenos">1445</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.query_modifiers-1446"><a href="#Generator.query_modifiers-1446"><span class="linenos">1446</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.query_modifiers-1447"><a href="#Generator.query_modifiers-1447"><span class="linenos">1447</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;lock&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-1448"><a href="#Generator.query_modifiers-1448"><span class="linenos">1448</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;sample&quot;</span><span class="p">),</span>
+</span><span id="Generator.query_modifiers-1449"><a href="#Generator.query_modifiers-1449"><span class="linenos">1449</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-1450"><a href="#Generator.query_modifiers-1450"><span class="linenos">1450</span></a> <span class="p">)</span>
</span></pre></div>
@@ -8009,21 +8040,21 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.select_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.select_sql-1450"><a href="#Generator.select_sql-1450"><span class="linenos">1450</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-1451"><a href="#Generator.select_sql-1451"><span class="linenos">1451</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.select_sql-1452"><a href="#Generator.select_sql-1452"><span class="linenos">1452</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 class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.select_sql-1453"><a href="#Generator.select_sql-1453"><span class="linenos">1453</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-1454"><a href="#Generator.select_sql-1454"><span class="linenos">1454</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-1455"><a href="#Generator.select_sql-1455"><span class="linenos">1455</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-1456"><a href="#Generator.select_sql-1456"><span class="linenos">1456</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-1457"><a href="#Generator.select_sql-1457"><span class="linenos">1457</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-1458"><a href="#Generator.select_sql-1458"><span class="linenos">1458</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-1459"><a href="#Generator.select_sql-1459"><span class="linenos">1459</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.select_sql-1460"><a href="#Generator.select_sql-1460"><span class="linenos">1460</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">kind</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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Generator.select_sql-1461"><a href="#Generator.select_sql-1461"><span class="linenos">1461</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-1462"><a href="#Generator.select_sql-1462"><span class="linenos">1462</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-1463"><a href="#Generator.select_sql-1463"><span class="linenos">1463</span></a> <span class="p">)</span>
-</span><span id="Generator.select_sql-1464"><a href="#Generator.select_sql-1464"><span class="linenos">1464</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.select_sql-1452"><a href="#Generator.select_sql-1452"><span class="linenos">1452</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-1453"><a href="#Generator.select_sql-1453"><span class="linenos">1453</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.select_sql-1454"><a href="#Generator.select_sql-1454"><span class="linenos">1454</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 class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.select_sql-1455"><a href="#Generator.select_sql-1455"><span class="linenos">1455</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-1456"><a href="#Generator.select_sql-1456"><span class="linenos">1456</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-1457"><a href="#Generator.select_sql-1457"><span class="linenos">1457</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-1458"><a href="#Generator.select_sql-1458"><span class="linenos">1458</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-1459"><a href="#Generator.select_sql-1459"><span class="linenos">1459</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-1460"><a href="#Generator.select_sql-1460"><span class="linenos">1460</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-1461"><a href="#Generator.select_sql-1461"><span class="linenos">1461</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.select_sql-1462"><a href="#Generator.select_sql-1462"><span class="linenos">1462</span></a> <span class="sa">f</span><span class="s2">&quot;SELECT</span><span class="si">{</span><span class="n">kind</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="n">expressions</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Generator.select_sql-1463"><a href="#Generator.select_sql-1463"><span class="linenos">1463</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-1464"><a href="#Generator.select_sql-1464"><span class="linenos">1464</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-1465"><a href="#Generator.select_sql-1465"><span class="linenos">1465</span></a> <span class="p">)</span>
+</span><span id="Generator.select_sql-1466"><a href="#Generator.select_sql-1466"><span class="linenos">1466</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>
@@ -8041,11 +8072,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.schema_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_sql-1466"><a href="#Generator.schema_sql-1466"><span class="linenos">1466</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-1467"><a href="#Generator.schema_sql-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="Generator.schema_sql-1468"><a href="#Generator.schema_sql-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="Generator.schema_sql-1469"><a href="#Generator.schema_sql-1469"><span class="linenos">1469</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="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_sql-1470"><a href="#Generator.schema_sql-1470"><span class="linenos">1470</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">sql</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.schema_sql-1468"><a href="#Generator.schema_sql-1468"><span class="linenos">1468</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-1469"><a href="#Generator.schema_sql-1469"><span class="linenos">1469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1470"><a href="#Generator.schema_sql-1470"><span class="linenos">1470</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.schema_sql-1471"><a href="#Generator.schema_sql-1471"><span class="linenos">1471</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="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_sql-1472"><a href="#Generator.schema_sql-1472"><span class="linenos">1472</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">sql</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8063,12 +8094,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.star_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.star_sql-1472"><a href="#Generator.star_sql-1472"><span class="linenos">1472</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-1473"><a href="#Generator.star_sql-1473"><span class="linenos">1473</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-1474"><a href="#Generator.star_sql-1474"><span class="linenos">1474</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-1475"><a href="#Generator.star_sql-1475"><span class="linenos">1475</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-1476"><a href="#Generator.star_sql-1476"><span class="linenos">1476</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-1477"><a href="#Generator.star_sql-1477"><span class="linenos">1477</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-1474"><a href="#Generator.star_sql-1474"><span class="linenos">1474</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-1475"><a href="#Generator.star_sql-1475"><span class="linenos">1475</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-1476"><a href="#Generator.star_sql-1476"><span class="linenos">1476</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-1477"><a href="#Generator.star_sql-1477"><span class="linenos">1477</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-1478"><a href="#Generator.star_sql-1478"><span class="linenos">1478</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-1479"><a href="#Generator.star_sql-1479"><span class="linenos">1479</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>
@@ -8086,8 +8117,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.structkwarg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.structkwarg_sql-1479"><a href="#Generator.structkwarg_sql-1479"><span class="linenos">1479</span></a> <span class="k">def</span> <span class="nf">structkwarg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.structkwarg_sql-1480"><a href="#Generator.structkwarg_sql-1480"><span class="linenos">1480</span></a> <span class="k">return</span> <span class="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.structkwarg_sql-1481"><a href="#Generator.structkwarg_sql-1481"><span class="linenos">1481</span></a> <span class="k">def</span> <span class="nf">structkwarg_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.structkwarg_sql-1482"><a href="#Generator.structkwarg_sql-1482"><span class="linenos">1482</span></a> <span class="k">return</span> <span class="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>
@@ -8105,10 +8136,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.parameter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.parameter_sql-1482"><a href="#Generator.parameter_sql-1482"><span class="linenos">1482</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-1483"><a href="#Generator.parameter_sql-1483"><span class="linenos">1483</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1484"><a href="#Generator.parameter_sql-1484"><span class="linenos">1484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="se">}}</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;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">this</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.parameter_sql-1485"><a href="#Generator.parameter_sql-1485"><span class="linenos">1485</span></a> <span class="k">return</span> <span class="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-1484"><a href="#Generator.parameter_sql-1484"><span class="linenos">1484</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-1485"><a href="#Generator.parameter_sql-1485"><span class="linenos">1485</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1486"><a href="#Generator.parameter_sql-1486"><span class="linenos">1486</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">{{</span><span class="si">{</span><span class="n">this</span><span class="si">}</span><span class="se">}}</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;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">this</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Generator.parameter_sql-1487"><a href="#Generator.parameter_sql-1487"><span class="linenos">1487</span></a> <span class="k">return</span> <span class="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>
@@ -8126,12 +8157,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.sessionparameter_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sessionparameter_sql-1487"><a href="#Generator.sessionparameter_sql-1487"><span class="linenos">1487</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-1488"><a href="#Generator.sessionparameter_sql-1488"><span class="linenos">1488</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1489"><a href="#Generator.sessionparameter_sql-1489"><span class="linenos">1489</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-1490"><a href="#Generator.sessionparameter_sql-1490"><span class="linenos">1490</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Generator.sessionparameter_sql-1491"><a href="#Generator.sessionparameter_sql-1491"><span class="linenos">1491</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-1492"><a href="#Generator.sessionparameter_sql-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="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-1489"><a href="#Generator.sessionparameter_sql-1489"><span class="linenos">1489</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-1490"><a href="#Generator.sessionparameter_sql-1490"><span class="linenos">1490</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1491"><a href="#Generator.sessionparameter_sql-1491"><span class="linenos">1491</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-1492"><a href="#Generator.sessionparameter_sql-1492"><span class="linenos">1492</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Generator.sessionparameter_sql-1493"><a href="#Generator.sessionparameter_sql-1493"><span class="linenos">1493</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-1494"><a href="#Generator.sessionparameter_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="n">kind</span><span class="si">}{</span><span class="n">this</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8149,8 +8180,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.placeholder_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.placeholder_sql-1494"><a href="#Generator.placeholder_sql-1494"><span class="linenos">1494</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-1495"><a href="#Generator.placeholder_sql-1495"><span class="linenos">1495</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-1496"><a href="#Generator.placeholder_sql-1496"><span class="linenos">1496</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-1497"><a href="#Generator.placeholder_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="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>
@@ -8168,18 +8199,18 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.subquery_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.subquery_sql-1497"><a href="#Generator.subquery_sql-1497"><span class="linenos">1497</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-1498"><a href="#Generator.subquery_sql-1498"><span class="linenos">1498</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-1499"><a href="#Generator.subquery_sql-1499"><span class="linenos">1499</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-1500"><a href="#Generator.subquery_sql-1500"><span class="linenos">1500</span></a>
-</span><span id="Generator.subquery_sql-1501"><a href="#Generator.subquery_sql-1501"><span class="linenos">1501</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.subquery_sql-1502"><a href="#Generator.subquery_sql-1502"><span class="linenos">1502</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.subquery_sql-1503"><a href="#Generator.subquery_sql-1503"><span class="linenos">1503</span></a> <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.subquery_sql-1504"><a href="#Generator.subquery_sql-1504"><span class="linenos">1504</span></a> <span class="n">alias</span><span class="p">,</span>
-</span><span id="Generator.subquery_sql-1505"><a href="#Generator.subquery_sql-1505"><span class="linenos">1505</span></a> <span class="bp">self</span><span 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><span id="Generator.subquery_sql-1506"><a href="#Generator.subquery_sql-1506"><span class="linenos">1506</span></a> <span class="p">)</span>
-</span><span id="Generator.subquery_sql-1507"><a href="#Generator.subquery_sql-1507"><span class="linenos">1507</span></a>
-</span><span id="Generator.subquery_sql-1508"><a href="#Generator.subquery_sql-1508"><span class="linenos">1508</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-1499"><a href="#Generator.subquery_sql-1499"><span class="linenos">1499</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-1500"><a href="#Generator.subquery_sql-1500"><span class="linenos">1500</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-1501"><a href="#Generator.subquery_sql-1501"><span class="linenos">1501</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-1502"><a href="#Generator.subquery_sql-1502"><span class="linenos">1502</span></a>
+</span><span id="Generator.subquery_sql-1503"><a href="#Generator.subquery_sql-1503"><span class="linenos">1503</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.subquery_sql-1504"><a href="#Generator.subquery_sql-1504"><span class="linenos">1504</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.subquery_sql-1505"><a href="#Generator.subquery_sql-1505"><span class="linenos">1505</span></a> <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.subquery_sql-1506"><a href="#Generator.subquery_sql-1506"><span class="linenos">1506</span></a> <span class="n">alias</span><span class="p">,</span>
+</span><span id="Generator.subquery_sql-1507"><a href="#Generator.subquery_sql-1507"><span class="linenos">1507</span></a> <span class="bp">self</span><span 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><span id="Generator.subquery_sql-1508"><a href="#Generator.subquery_sql-1508"><span class="linenos">1508</span></a> <span class="p">)</span>
+</span><span id="Generator.subquery_sql-1509"><a href="#Generator.subquery_sql-1509"><span class="linenos">1509</span></a>
+</span><span id="Generator.subquery_sql-1510"><a href="#Generator.subquery_sql-1510"><span class="linenos">1510</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>
@@ -8197,9 +8228,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.qualify_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.qualify_sql-1510"><a href="#Generator.qualify_sql-1510"><span class="linenos">1510</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-1511"><a href="#Generator.qualify_sql-1511"><span class="linenos">1511</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-1512"><a href="#Generator.qualify_sql-1512"><span class="linenos">1512</span></a> <span class="k">return</span> <span class="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-1512"><a href="#Generator.qualify_sql-1512"><span class="linenos">1512</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-1513"><a href="#Generator.qualify_sql-1513"><span class="linenos">1513</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-1514"><a href="#Generator.qualify_sql-1514"><span class="linenos">1514</span></a> <span class="k">return</span> <span class="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>
@@ -8217,11 +8248,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.union_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_sql-1514"><a href="#Generator.union_sql-1514"><span class="linenos">1514</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-1515"><a href="#Generator.union_sql-1515"><span class="linenos">1515</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-1516"><a href="#Generator.union_sql-1516"><span class="linenos">1516</span></a> <span class="n">expression</span><span class="p">,</span>
-</span><span id="Generator.union_sql-1517"><a href="#Generator.union_sql-1517"><span class="linenos">1517</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-1518"><a href="#Generator.union_sql-1518"><span class="linenos">1518</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_sql-1516"><a href="#Generator.union_sql-1516"><span class="linenos">1516</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-1517"><a href="#Generator.union_sql-1517"><span class="linenos">1517</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-1518"><a href="#Generator.union_sql-1518"><span class="linenos">1518</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Generator.union_sql-1519"><a href="#Generator.union_sql-1519"><span class="linenos">1519</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-1520"><a href="#Generator.union_sql-1520"><span class="linenos">1520</span></a> <span class="p">)</span>
</span></pre></div>
@@ -8239,10 +8270,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.union_op"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_op-1520"><a href="#Generator.union_op-1520"><span class="linenos">1520</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-1521"><a href="#Generator.union_op-1521"><span class="linenos">1521</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-1522"><a href="#Generator.union_op-1522"><span class="linenos">1522</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-1523"><a href="#Generator.union_op-1523"><span class="linenos">1523</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="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.union_op-1522"><a href="#Generator.union_op-1522"><span class="linenos">1522</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-1523"><a href="#Generator.union_op-1523"><span class="linenos">1523</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-1524"><a href="#Generator.union_op-1524"><span class="linenos">1524</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-1525"><a href="#Generator.union_op-1525"><span class="linenos">1525</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="s2">&quot;</span>
</span></pre></div>
@@ -8260,19 +8291,19 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.unnest_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unnest_sql-1525"><a href="#Generator.unnest_sql-1525"><span class="linenos">1525</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-1526"><a href="#Generator.unnest_sql-1526"><span class="linenos">1526</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-1527"><a href="#Generator.unnest_sql-1527"><span class="linenos">1527</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-1528"><a href="#Generator.unnest_sql-1528"><span class="linenos">1528</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">unnest_column_only</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-1529"><a href="#Generator.unnest_sql-1529"><span class="linenos">1529</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-1530"><a href="#Generator.unnest_sql-1530"><span class="linenos">1530</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-1531"><a href="#Generator.unnest_sql-1531"><span class="linenos">1531</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.unnest_sql-1532"><a href="#Generator.unnest_sql-1532"><span class="linenos">1532</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.unnest_sql-1533"><a href="#Generator.unnest_sql-1533"><span class="linenos">1533</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-1534"><a href="#Generator.unnest_sql-1534"><span class="linenos">1534</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="s2">&quot; WITH ORDINALITY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.unnest_sql-1535"><a href="#Generator.unnest_sql-1535"><span class="linenos">1535</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-1536"><a href="#Generator.unnest_sql-1536"><span class="linenos">1536</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; 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 class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.unnest_sql-1537"><a href="#Generator.unnest_sql-1537"><span class="linenos">1537</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">ordinality</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">offset</span><span class="si">}</span><span class="s2">&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unnest_sql-1527"><a href="#Generator.unnest_sql-1527"><span class="linenos">1527</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-1528"><a href="#Generator.unnest_sql-1528"><span class="linenos">1528</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-1529"><a href="#Generator.unnest_sql-1529"><span class="linenos">1529</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-1530"><a href="#Generator.unnest_sql-1530"><span class="linenos">1530</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">unnest_column_only</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-1531"><a href="#Generator.unnest_sql-1531"><span class="linenos">1531</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-1532"><a href="#Generator.unnest_sql-1532"><span class="linenos">1532</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-1533"><a href="#Generator.unnest_sql-1533"><span class="linenos">1533</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.unnest_sql-1534"><a href="#Generator.unnest_sql-1534"><span class="linenos">1534</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.unnest_sql-1535"><a href="#Generator.unnest_sql-1535"><span class="linenos">1535</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-1536"><a href="#Generator.unnest_sql-1536"><span class="linenos">1536</span></a> <span class="n">ordinality</span> <span class="o">=</span> <span class="s2">&quot; WITH ORDINALITY&quot;</span> <span class="k">if</span> <span class="n">expression</span><span class="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="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.unnest_sql-1537"><a href="#Generator.unnest_sql-1537"><span class="linenos">1537</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-1538"><a href="#Generator.unnest_sql-1538"><span class="linenos">1538</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; 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 class="k">if</span> <span class="n">offset</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.unnest_sql-1539"><a href="#Generator.unnest_sql-1539"><span class="linenos">1539</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">ordinality</span><span class="si">}{</span><span class="n">alias</span><span class="si">}{</span><span class="n">offset</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -8290,9 +8321,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.where_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.where_sql-1539"><a href="#Generator.where_sql-1539"><span class="linenos">1539</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-1540"><a href="#Generator.where_sql-1540"><span class="linenos">1540</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-1541"><a href="#Generator.where_sql-1541"><span class="linenos">1541</span></a> <span class="k">return</span> <span class="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-1541"><a href="#Generator.where_sql-1541"><span class="linenos">1541</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-1542"><a href="#Generator.where_sql-1542"><span class="linenos">1542</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-1543"><a href="#Generator.where_sql-1543"><span class="linenos">1543</span></a> <span class="k">return</span> <span class="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>
@@ -8310,28 +8341,34 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.window_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.window_sql-1543"><a href="#Generator.window_sql-1543"><span class="linenos">1543</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-1544"><a href="#Generator.window_sql-1544"><span class="linenos">1544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1545"><a href="#Generator.window_sql-1545"><span class="linenos">1545</span></a>
-</span><span id="Generator.window_sql-1546"><a href="#Generator.window_sql-1546"><span class="linenos">1546</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.window_sql-1545"><a href="#Generator.window_sql-1545"><span class="linenos">1545</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-1546"><a href="#Generator.window_sql-1546"><span class="linenos">1546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1547"><a href="#Generator.window_sql-1547"><span class="linenos">1547</span></a>
-</span><span id="Generator.window_sql-1548"><a href="#Generator.window_sql-1548"><span class="linenos">1548</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-1549"><a href="#Generator.window_sql-1549"><span class="linenos">1549</span></a> <span class="n">order_sql</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-1550"><a href="#Generator.window_sql-1550"><span class="linenos">1550</span></a>
-</span><span id="Generator.window_sql-1551"><a href="#Generator.window_sql-1551"><span class="linenos">1551</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="n">partition</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="ow">and</span> <span class="n">order</span> <span class="k">else</span> <span class="n">partition</span>
+</span><span id="Generator.window_sql-1548"><a href="#Generator.window_sql-1548"><span class="linenos">1548</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-1549"><a href="#Generator.window_sql-1549"><span class="linenos">1549</span></a>
+</span><span id="Generator.window_sql-1550"><a href="#Generator.window_sql-1550"><span class="linenos">1550</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-1551"><a href="#Generator.window_sql-1551"><span class="linenos">1551</span></a> <span class="n">order_sql</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-1552"><a href="#Generator.window_sql-1552"><span class="linenos">1552</span></a>
-</span><span id="Generator.window_sql-1553"><a href="#Generator.window_sql-1553"><span class="linenos">1553</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="n">expression</span><span class="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.window_sql-1554"><a href="#Generator.window_sql-1554"><span class="linenos">1554</span></a> <span class="n">spec_sql</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">window_spec_sql</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">spec</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.window_sql-1555"><a href="#Generator.window_sql-1555"><span class="linenos">1555</span></a>
-</span><span id="Generator.window_sql-1556"><a href="#Generator.window_sql-1556"><span class="linenos">1556</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-1557"><a href="#Generator.window_sql-1557"><span class="linenos">1557</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="s1">&#39;OVER&#39;</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Generator.window_sql-1558"><a href="#Generator.window_sql-1558"><span class="linenos">1558</span></a>
-</span><span id="Generator.window_sql-1559"><a href="#Generator.window_sql-1559"><span class="linenos">1559</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-1560"><a href="#Generator.window_sql-1560"><span class="linenos">1560</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-1553"><a href="#Generator.window_sql-1553"><span class="linenos">1553</span></a> <span class="n">partition_sql</span> <span class="o">=</span> <span class="n">partition</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="k">if</span> <span class="n">partition</span> <span class="ow">and</span> <span class="n">order</span> <span class="k">else</span> <span class="n">partition</span>
+</span><span id="Generator.window_sql-1554"><a href="#Generator.window_sql-1554"><span class="linenos">1554</span></a>
+</span><span id="Generator.window_sql-1555"><a href="#Generator.window_sql-1555"><span class="linenos">1555</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="n">expression</span><span class="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.window_sql-1556"><a href="#Generator.window_sql-1556"><span class="linenos">1556</span></a> <span class="n">spec_sql</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">windowspec_sql</span><span class="p">(</span><span class="n">spec</span><span class="p">)</span> <span class="k">if</span> <span class="n">spec</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.window_sql-1557"><a href="#Generator.window_sql-1557"><span class="linenos">1557</span></a>
+</span><span id="Generator.window_sql-1558"><a href="#Generator.window_sql-1558"><span class="linenos">1558</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-1559"><a href="#Generator.window_sql-1559"><span class="linenos">1559</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-1560"><a href="#Generator.window_sql-1560"><span class="linenos">1560</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-1561"><a href="#Generator.window_sql-1561"><span class="linenos">1561</span></a>
-</span><span id="Generator.window_sql-1562"><a href="#Generator.window_sql-1562"><span class="linenos">1562</span></a> <span class="n">window_args</span> <span class="o">=</span> <span class="n">alias</span> <span class="o">+</span> <span class="n">partition_sql</span> <span class="o">+</span> <span class="n">order_sql</span> <span class="o">+</span> <span class="n">spec_sql</span>
-</span><span id="Generator.window_sql-1563"><a href="#Generator.window_sql-1563"><span class="linenos">1563</span></a>
-</span><span id="Generator.window_sql-1564"><a href="#Generator.window_sql-1564"><span class="linenos">1564</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">window_args</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.window_sql-1562"><a href="#Generator.window_sql-1562"><span class="linenos">1562</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-1563"><a href="#Generator.window_sql-1563"><span class="linenos">1563</span></a> <span class="k">if</span> <span class="n">first</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Generator.window_sql-1564"><a href="#Generator.window_sql-1564"><span class="linenos">1564</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-1565"><a href="#Generator.window_sql-1565"><span class="linenos">1565</span></a> <span class="n">first</span> <span class="o">=</span> <span class="n">first</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.window_sql-1566"><a href="#Generator.window_sql-1566"><span class="linenos">1566</span></a>
+</span><span id="Generator.window_sql-1567"><a href="#Generator.window_sql-1567"><span class="linenos">1567</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-1568"><a href="#Generator.window_sql-1568"><span class="linenos">1568</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-1569"><a href="#Generator.window_sql-1569"><span class="linenos">1569</span></a>
+</span><span id="Generator.window_sql-1570"><a href="#Generator.window_sql-1570"><span class="linenos">1570</span></a> <span class="n">window_args</span> <span class="o">=</span> <span class="n">alias</span> <span class="o">+</span> <span class="n">first</span> <span class="o">+</span> <span class="n">partition_sql</span> <span class="o">+</span> <span class="n">order_sql</span> <span class="o">+</span> <span class="n">spec_sql</span>
+</span><span id="Generator.window_sql-1571"><a href="#Generator.window_sql-1571"><span class="linenos">1571</span></a>
+</span><span id="Generator.window_sql-1572"><a href="#Generator.window_sql-1572"><span class="linenos">1572</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">window_args</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>
@@ -8349,34 +8386,34 @@ Default: True</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-1566"><a href="#Generator.partition_by_sql-1566"><span class="linenos">1566</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-1567"><a href="#Generator.partition_by_sql-1567"><span class="linenos">1567</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-1568"><a href="#Generator.partition_by_sql-1568"><span class="linenos">1568</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-1574"><a href="#Generator.partition_by_sql-1574"><span class="linenos">1574</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-1575"><a href="#Generator.partition_by_sql-1575"><span class="linenos">1575</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-1576"><a href="#Generator.partition_by_sql-1576"><span class="linenos">1576</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>
</div>
- <div id="Generator.window_spec_sql" class="classattr">
- <input id="Generator.window_spec_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+ <div id="Generator.windowspec_sql" class="classattr">
+ <input id="Generator.windowspec_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
- <span class="name">window_spec_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="expressions.html#WindowSpec">sqlglot.expressions.WindowSpec</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+ <span class="name">windowspec_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="expressions.html#WindowSpec">sqlglot.expressions.WindowSpec</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
- <label class="view-source-button" for="Generator.window_spec_sql-view-source"><span>View Source</span></label>
+ <label class="view-source-button" for="Generator.windowspec_sql-view-source"><span>View Source</span></label>
</div>
- <a class="headerlink" href="#Generator.window_spec_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.window_spec_sql-1570"><a href="#Generator.window_spec_sql-1570"><span class="linenos">1570</span></a> <span class="k">def</span> <span class="nf">window_spec_sql</span><span class="p">(</span><span class="bp">self</span><span 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.window_spec_sql-1571"><a href="#Generator.window_spec_sql-1571"><span class="linenos">1571</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.window_spec_sql-1572"><a href="#Generator.window_spec_sql-1572"><span class="linenos">1572</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.window_spec_sql-1573"><a href="#Generator.window_spec_sql-1573"><span class="linenos">1573</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.window_spec_sql-1574"><a href="#Generator.window_spec_sql-1574"><span class="linenos">1574</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.window_spec_sql-1575"><a href="#Generator.window_spec_sql-1575"><span class="linenos">1575</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
-</span><span id="Generator.window_spec_sql-1576"><a href="#Generator.window_spec_sql-1576"><span class="linenos">1576</span></a> <span class="p">)</span>
-</span><span id="Generator.window_spec_sql-1577"><a href="#Generator.window_spec_sql-1577"><span class="linenos">1577</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>
+ <a class="headerlink" href="#Generator.windowspec_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.windowspec_sql-1578"><a href="#Generator.windowspec_sql-1578"><span class="linenos">1578</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-1579"><a href="#Generator.windowspec_sql-1579"><span class="linenos">1579</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-1580"><a href="#Generator.windowspec_sql-1580"><span class="linenos">1580</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-1581"><a href="#Generator.windowspec_sql-1581"><span class="linenos">1581</span></a> <span class="n">end</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.windowspec_sql-1582"><a href="#Generator.windowspec_sql-1582"><span class="linenos">1582</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-1583"><a href="#Generator.windowspec_sql-1583"><span class="linenos">1583</span></a> <span class="ow">or</span> <span class="s2">&quot;CURRENT ROW&quot;</span>
+</span><span id="Generator.windowspec_sql-1584"><a href="#Generator.windowspec_sql-1584"><span class="linenos">1584</span></a> <span class="p">)</span>
+</span><span id="Generator.windowspec_sql-1585"><a href="#Generator.windowspec_sql-1585"><span class="linenos">1585</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>
@@ -8394,10 +8431,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.withingroup_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.withingroup_sql-1579"><a href="#Generator.withingroup_sql-1579"><span class="linenos">1579</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-1580"><a href="#Generator.withingroup_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.withingroup_sql-1581"><a href="#Generator.withingroup_sql-1581"><span class="linenos">1581</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-1582"><a href="#Generator.withingroup_sql-1582"><span class="linenos">1582</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-1587"><a href="#Generator.withingroup_sql-1587"><span class="linenos">1587</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-1588"><a href="#Generator.withingroup_sql-1588"><span class="linenos">1588</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1589"><a href="#Generator.withingroup_sql-1589"><span class="linenos">1589</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-1590"><a href="#Generator.withingroup_sql-1590"><span class="linenos">1590</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>
@@ -8415,11 +8452,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.between_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.between_sql-1584"><a href="#Generator.between_sql-1584"><span class="linenos">1584</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-1585"><a href="#Generator.between_sql-1585"><span class="linenos">1585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1586"><a href="#Generator.between_sql-1586"><span class="linenos">1586</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-1587"><a href="#Generator.between_sql-1587"><span class="linenos">1587</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-1588"><a href="#Generator.between_sql-1588"><span class="linenos">1588</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-1592"><a href="#Generator.between_sql-1592"><span class="linenos">1592</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-1593"><a href="#Generator.between_sql-1593"><span class="linenos">1593</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1594"><a href="#Generator.between_sql-1594"><span class="linenos">1594</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-1595"><a href="#Generator.between_sql-1595"><span class="linenos">1595</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-1596"><a href="#Generator.between_sql-1596"><span class="linenos">1596</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>
@@ -8437,11 +8474,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.bracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bracket_sql-1590"><a href="#Generator.bracket_sql-1590"><span class="linenos">1590</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-1591"><a href="#Generator.bracket_sql-1591"><span class="linenos">1591</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">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">expressions</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">)</span>
-</span><span id="Generator.bracket_sql-1592"><a href="#Generator.bracket_sql-1592"><span class="linenos">1592</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-1593"><a href="#Generator.bracket_sql-1593"><span class="linenos">1593</span></a>
-</span><span id="Generator.bracket_sql-1594"><a href="#Generator.bracket_sql-1594"><span class="linenos">1594</span></a> <span class="k">return</span> <span class="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-1598"><a href="#Generator.bracket_sql-1598"><span class="linenos">1598</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-1599"><a href="#Generator.bracket_sql-1599"><span class="linenos">1599</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">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">expressions</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span><span class="p">)</span>
+</span><span id="Generator.bracket_sql-1600"><a href="#Generator.bracket_sql-1600"><span class="linenos">1600</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-1601"><a href="#Generator.bracket_sql-1601"><span class="linenos">1601</span></a>
+</span><span id="Generator.bracket_sql-1602"><a href="#Generator.bracket_sql-1602"><span class="linenos">1602</span></a> <span class="k">return</span> <span class="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>
@@ -8459,8 +8496,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.all_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.all_sql-1596"><a href="#Generator.all_sql-1596"><span class="linenos">1596</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-1597"><a href="#Generator.all_sql-1597"><span class="linenos">1597</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-1604"><a href="#Generator.all_sql-1604"><span class="linenos">1604</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-1605"><a href="#Generator.all_sql-1605"><span class="linenos">1605</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>
@@ -8478,11 +8515,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.any_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.any_sql-1599"><a href="#Generator.any_sql-1599"><span class="linenos">1599</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-1600"><a href="#Generator.any_sql-1600"><span class="linenos">1600</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1601"><a href="#Generator.any_sql-1601"><span class="linenos">1601</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-1602"><a href="#Generator.any_sql-1602"><span class="linenos">1602</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-1603"><a href="#Generator.any_sql-1603"><span class="linenos">1603</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-1607"><a href="#Generator.any_sql-1607"><span class="linenos">1607</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-1608"><a href="#Generator.any_sql-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="Generator.any_sql-1609"><a href="#Generator.any_sql-1609"><span class="linenos">1609</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-1610"><a href="#Generator.any_sql-1610"><span class="linenos">1610</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-1611"><a href="#Generator.any_sql-1611"><span class="linenos">1611</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>
@@ -8500,8 +8537,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.exists_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.exists_sql-1605"><a href="#Generator.exists_sql-1605"><span class="linenos">1605</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-1606"><a href="#Generator.exists_sql-1606"><span class="linenos">1606</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-1613"><a href="#Generator.exists_sql-1613"><span class="linenos">1613</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-1614"><a href="#Generator.exists_sql-1614"><span class="linenos">1614</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>
@@ -8519,25 +8556,25 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.case_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.case_sql-1608"><a href="#Generator.case_sql-1608"><span class="linenos">1608</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-1609"><a href="#Generator.case_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.case_sql-1610"><a href="#Generator.case_sql-1610"><span class="linenos">1610</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-1611"><a href="#Generator.case_sql-1611"><span class="linenos">1611</span></a>
-</span><span id="Generator.case_sql-1612"><a href="#Generator.case_sql-1612"><span class="linenos">1612</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-1613"><a href="#Generator.case_sql-1613"><span class="linenos">1613</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-1614"><a href="#Generator.case_sql-1614"><span class="linenos">1614</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-1615"><a href="#Generator.case_sql-1615"><span class="linenos">1615</span></a>
-</span><span id="Generator.case_sql-1616"><a href="#Generator.case_sql-1616"><span class="linenos">1616</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-1617"><a href="#Generator.case_sql-1617"><span class="linenos">1617</span></a>
-</span><span id="Generator.case_sql-1618"><a href="#Generator.case_sql-1618"><span class="linenos">1618</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.case_sql-1619"><a href="#Generator.case_sql-1619"><span class="linenos">1619</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-1620"><a href="#Generator.case_sql-1620"><span class="linenos">1620</span></a>
-</span><span id="Generator.case_sql-1621"><a href="#Generator.case_sql-1621"><span class="linenos">1621</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-1622"><a href="#Generator.case_sql-1622"><span class="linenos">1622</span></a>
-</span><span id="Generator.case_sql-1623"><a href="#Generator.case_sql-1623"><span class="linenos">1623</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-1624"><a href="#Generator.case_sql-1624"><span class="linenos">1624</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.case_sql-1616"><a href="#Generator.case_sql-1616"><span class="linenos">1616</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-1617"><a href="#Generator.case_sql-1617"><span class="linenos">1617</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1618"><a href="#Generator.case_sql-1618"><span class="linenos">1618</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-1619"><a href="#Generator.case_sql-1619"><span class="linenos">1619</span></a>
+</span><span id="Generator.case_sql-1620"><a href="#Generator.case_sql-1620"><span class="linenos">1620</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-1621"><a href="#Generator.case_sql-1621"><span class="linenos">1621</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-1622"><a href="#Generator.case_sql-1622"><span class="linenos">1622</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-1623"><a href="#Generator.case_sql-1623"><span class="linenos">1623</span></a>
+</span><span id="Generator.case_sql-1624"><a href="#Generator.case_sql-1624"><span class="linenos">1624</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-1625"><a href="#Generator.case_sql-1625"><span class="linenos">1625</span></a>
-</span><span id="Generator.case_sql-1626"><a href="#Generator.case_sql-1626"><span class="linenos">1626</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-1626"><a href="#Generator.case_sql-1626"><span class="linenos">1626</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.case_sql-1627"><a href="#Generator.case_sql-1627"><span class="linenos">1627</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-1628"><a href="#Generator.case_sql-1628"><span class="linenos">1628</span></a>
+</span><span id="Generator.case_sql-1629"><a href="#Generator.case_sql-1629"><span class="linenos">1629</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-1630"><a href="#Generator.case_sql-1630"><span class="linenos">1630</span></a>
+</span><span id="Generator.case_sql-1631"><a href="#Generator.case_sql-1631"><span class="linenos">1631</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-1632"><a href="#Generator.case_sql-1632"><span class="linenos">1632</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-1633"><a href="#Generator.case_sql-1633"><span class="linenos">1633</span></a>
+</span><span id="Generator.case_sql-1634"><a href="#Generator.case_sql-1634"><span class="linenos">1634</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>
@@ -8555,10 +8592,31 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.constraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.constraint_sql-1628"><a href="#Generator.constraint_sql-1628"><span class="linenos">1628</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-1629"><a href="#Generator.constraint_sql-1629"><span class="linenos">1629</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1630"><a href="#Generator.constraint_sql-1630"><span class="linenos">1630</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-1631"><a href="#Generator.constraint_sql-1631"><span class="linenos">1631</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-1636"><a href="#Generator.constraint_sql-1636"><span class="linenos">1636</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-1637"><a href="#Generator.constraint_sql-1637"><span class="linenos">1637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1638"><a href="#Generator.constraint_sql-1638"><span class="linenos">1638</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-1639"><a href="#Generator.constraint_sql-1639"><span class="linenos">1639</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>
+
+
+
+
+ </div>
+ <div id="Generator.nextvaluefor_sql" class="classattr">
+ <input id="Generator.nextvaluefor_sql-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+<div class="attr function">
+
+ <span class="def">def</span>
+ <span class="name">nextvaluefor_sql</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">expression</span><span class="p">:</span> <span class="n"><a href="expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a></span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
+
+ <label class="view-source-button" for="Generator.nextvaluefor_sql-view-source"><span>View Source</span></label>
+
+ </div>
+ <a class="headerlink" href="#Generator.nextvaluefor_sql"></a>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nextvaluefor_sql-1641"><a href="#Generator.nextvaluefor_sql-1641"><span class="linenos">1641</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-1642"><a href="#Generator.nextvaluefor_sql-1642"><span class="linenos">1642</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-1643"><a href="#Generator.nextvaluefor_sql-1643"><span class="linenos">1643</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-1644"><a href="#Generator.nextvaluefor_sql-1644"><span class="linenos">1644</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>
@@ -8576,10 +8634,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.extract_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.extract_sql-1633"><a href="#Generator.extract_sql-1633"><span class="linenos">1633</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-1634"><a href="#Generator.extract_sql-1634"><span class="linenos">1634</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.extract_sql-1635"><a href="#Generator.extract_sql-1635"><span class="linenos">1635</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-1636"><a href="#Generator.extract_sql-1636"><span class="linenos">1636</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-1646"><a href="#Generator.extract_sql-1646"><span class="linenos">1646</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-1647"><a href="#Generator.extract_sql-1647"><span class="linenos">1647</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.extract_sql-1648"><a href="#Generator.extract_sql-1648"><span class="linenos">1648</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-1649"><a href="#Generator.extract_sql-1649"><span class="linenos">1649</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>
@@ -8597,15 +8655,15 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.trim_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trim_sql-1638"><a href="#Generator.trim_sql-1638"><span class="linenos">1638</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-1639"><a href="#Generator.trim_sql-1639"><span class="linenos">1639</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-1640"><a href="#Generator.trim_sql-1640"><span class="linenos">1640</span></a>
-</span><span id="Generator.trim_sql-1641"><a href="#Generator.trim_sql-1641"><span class="linenos">1641</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-1642"><a href="#Generator.trim_sql-1642"><span class="linenos">1642</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-1643"><a href="#Generator.trim_sql-1643"><span class="linenos">1643</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-1644"><a href="#Generator.trim_sql-1644"><span class="linenos">1644</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-1645"><a href="#Generator.trim_sql-1645"><span class="linenos">1645</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.trim_sql-1646"><a href="#Generator.trim_sql-1646"><span class="linenos">1646</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-1651"><a href="#Generator.trim_sql-1651"><span class="linenos">1651</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-1652"><a href="#Generator.trim_sql-1652"><span class="linenos">1652</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-1653"><a href="#Generator.trim_sql-1653"><span class="linenos">1653</span></a>
+</span><span id="Generator.trim_sql-1654"><a href="#Generator.trim_sql-1654"><span class="linenos">1654</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-1655"><a href="#Generator.trim_sql-1655"><span class="linenos">1655</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-1656"><a href="#Generator.trim_sql-1656"><span class="linenos">1656</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-1657"><a href="#Generator.trim_sql-1657"><span class="linenos">1657</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-1658"><a href="#Generator.trim_sql-1658"><span class="linenos">1658</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.trim_sql-1659"><a href="#Generator.trim_sql-1659"><span class="linenos">1659</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>
@@ -8623,10 +8681,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.concat_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.concat_sql-1648"><a href="#Generator.concat_sql-1648"><span class="linenos">1648</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-1649"><a href="#Generator.concat_sql-1649"><span class="linenos">1649</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Generator.concat_sql-1650"><a href="#Generator.concat_sql-1650"><span class="linenos">1650</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="o">.</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-1651"><a href="#Generator.concat_sql-1651"><span class="linenos">1651</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.concat_sql-1661"><a href="#Generator.concat_sql-1661"><span class="linenos">1661</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-1662"><a href="#Generator.concat_sql-1662"><span class="linenos">1662</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Generator.concat_sql-1663"><a href="#Generator.concat_sql-1663"><span class="linenos">1663</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="o">.</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-1664"><a href="#Generator.concat_sql-1664"><span class="linenos">1664</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></pre></div>
@@ -8644,9 +8702,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.check_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.check_sql-1653"><a href="#Generator.check_sql-1653"><span class="linenos">1653</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-1654"><a href="#Generator.check_sql-1654"><span class="linenos">1654</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1655"><a href="#Generator.check_sql-1655"><span class="linenos">1655</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-1666"><a href="#Generator.check_sql-1666"><span class="linenos">1666</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-1667"><a href="#Generator.check_sql-1667"><span class="linenos">1667</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><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-1668"><a href="#Generator.check_sql-1668"><span class="linenos">1668</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>
@@ -8664,15 +8722,15 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.foreignkey_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.foreignkey_sql-1657"><a href="#Generator.foreignkey_sql-1657"><span class="linenos">1657</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-1658"><a href="#Generator.foreignkey_sql-1658"><span class="linenos">1658</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-1659"><a href="#Generator.foreignkey_sql-1659"><span class="linenos">1659</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-1660"><a href="#Generator.foreignkey_sql-1660"><span class="linenos">1660</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-1661"><a href="#Generator.foreignkey_sql-1661"><span class="linenos">1661</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-1662"><a href="#Generator.foreignkey_sql-1662"><span class="linenos">1662</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-1663"><a href="#Generator.foreignkey_sql-1663"><span class="linenos">1663</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-1664"><a href="#Generator.foreignkey_sql-1664"><span class="linenos">1664</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-1665"><a href="#Generator.foreignkey_sql-1665"><span class="linenos">1665</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-1670"><a href="#Generator.foreignkey_sql-1670"><span class="linenos">1670</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-1671"><a href="#Generator.foreignkey_sql-1671"><span class="linenos">1671</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-1672"><a href="#Generator.foreignkey_sql-1672"><span class="linenos">1672</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-1673"><a href="#Generator.foreignkey_sql-1673"><span class="linenos">1673</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-1674"><a href="#Generator.foreignkey_sql-1674"><span class="linenos">1674</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-1675"><a href="#Generator.foreignkey_sql-1675"><span class="linenos">1675</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-1676"><a href="#Generator.foreignkey_sql-1676"><span class="linenos">1676</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-1677"><a href="#Generator.foreignkey_sql-1677"><span class="linenos">1677</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-1678"><a href="#Generator.foreignkey_sql-1678"><span class="linenos">1678</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>
@@ -8690,11 +8748,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.primarykey_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.primarykey_sql-1667"><a href="#Generator.primarykey_sql-1667"><span class="linenos">1667</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-1668"><a href="#Generator.primarykey_sql-1668"><span class="linenos">1668</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-1669"><a href="#Generator.primarykey_sql-1669"><span class="linenos">1669</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-1670"><a href="#Generator.primarykey_sql-1670"><span class="linenos">1670</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-1671"><a href="#Generator.primarykey_sql-1671"><span class="linenos">1671</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-1680"><a href="#Generator.primarykey_sql-1680"><span class="linenos">1680</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-1681"><a href="#Generator.primarykey_sql-1681"><span class="linenos">1681</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-1682"><a href="#Generator.primarykey_sql-1682"><span class="linenos">1682</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-1683"><a href="#Generator.primarykey_sql-1683"><span class="linenos">1683</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-1684"><a href="#Generator.primarykey_sql-1684"><span class="linenos">1684</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>
@@ -8712,9 +8770,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.unique_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unique_sql-1673"><a href="#Generator.unique_sql-1673"><span class="linenos">1673</span></a> <span class="k">def</span> <span class="nf">unique_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unique</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.unique_sql-1674"><a href="#Generator.unique_sql-1674"><span class="linenos">1674</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;expressions&quot;</span><span class="p">)</span>
-</span><span id="Generator.unique_sql-1675"><a href="#Generator.unique_sql-1675"><span class="linenos">1675</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">columns</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.unique_sql-1686"><a href="#Generator.unique_sql-1686"><span class="linenos">1686</span></a> <span class="k">def</span> <span class="nf">unique_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unique</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.unique_sql-1687"><a href="#Generator.unique_sql-1687"><span class="linenos">1687</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;expressions&quot;</span><span class="p">)</span>
+</span><span id="Generator.unique_sql-1688"><a href="#Generator.unique_sql-1688"><span class="linenos">1688</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">columns</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -8732,10 +8790,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.if_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.if_sql-1677"><a href="#Generator.if_sql-1677"><span class="linenos">1677</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-1678"><a href="#Generator.if_sql-1678"><span class="linenos">1678</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><span id="Generator.if_sql-1679"><a href="#Generator.if_sql-1679"><span class="linenos">1679</span></a> <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="o">.</span><span class="n">copy</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.if_sql-1680"><a href="#Generator.if_sql-1680"><span class="linenos">1680</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.if_sql-1690"><a href="#Generator.if_sql-1690"><span class="linenos">1690</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-1691"><a href="#Generator.if_sql-1691"><span class="linenos">1691</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><span id="Generator.if_sql-1692"><a href="#Generator.if_sql-1692"><span class="linenos">1692</span></a> <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="o">.</span><span class="n">copy</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.if_sql-1693"><a href="#Generator.if_sql-1693"><span class="linenos">1693</span></a> <span class="p">)</span>
</span></pre></div>
@@ -8753,10 +8811,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.matchagainst_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.matchagainst_sql-1682"><a href="#Generator.matchagainst_sql-1682"><span class="linenos">1682</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-1683"><a href="#Generator.matchagainst_sql-1683"><span class="linenos">1683</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-1684"><a href="#Generator.matchagainst_sql-1684"><span class="linenos">1684</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-1685"><a href="#Generator.matchagainst_sql-1685"><span class="linenos">1685</span></a> <span class="k">return</span> <span class="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-1695"><a href="#Generator.matchagainst_sql-1695"><span class="linenos">1695</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-1696"><a href="#Generator.matchagainst_sql-1696"><span class="linenos">1696</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-1697"><a href="#Generator.matchagainst_sql-1697"><span class="linenos">1697</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-1698"><a href="#Generator.matchagainst_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="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>
@@ -8774,8 +8832,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.jsonkeyvalue_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonkeyvalue_sql-1687"><a href="#Generator.jsonkeyvalue_sql-1687"><span class="linenos">1687</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-1688"><a href="#Generator.jsonkeyvalue_sql-1688"><span class="linenos">1688</span></a> <span class="k">return</span> <span class="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.jsonkeyvalue_sql-1700"><a href="#Generator.jsonkeyvalue_sql-1700"><span class="linenos">1700</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-1701"><a href="#Generator.jsonkeyvalue_sql-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="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>
@@ -8793,21 +8851,21 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.jsonobject_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobject_sql-1690"><a href="#Generator.jsonobject_sql-1690"><span class="linenos">1690</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="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.jsonobject_sql-1691"><a href="#Generator.jsonobject_sql-1691"><span class="linenos">1691</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.jsonobject_sql-1692"><a href="#Generator.jsonobject_sql-1692"><span class="linenos">1692</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-1693"><a href="#Generator.jsonobject_sql-1693"><span class="linenos">1693</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-1694"><a href="#Generator.jsonobject_sql-1694"><span class="linenos">1694</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-1695"><a href="#Generator.jsonobject_sql-1695"><span class="linenos">1695</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-1696"><a href="#Generator.jsonobject_sql-1696"><span class="linenos">1696</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-1697"><a href="#Generator.jsonobject_sql-1697"><span class="linenos">1697</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.jsonobject_sql-1698"><a href="#Generator.jsonobject_sql-1698"><span class="linenos">1698</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonobject_sql-1699"><a href="#Generator.jsonobject_sql-1699"><span class="linenos">1699</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-1700"><a href="#Generator.jsonobject_sql-1700"><span class="linenos">1700</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-1701"><a href="#Generator.jsonobject_sql-1701"><span class="linenos">1701</span></a> <span class="n">format_json</span> <span class="o">=</span> <span class="s2">&quot; FORMAT 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;format_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.jsonobject_sql-1702"><a href="#Generator.jsonobject_sql-1702"><span class="linenos">1702</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-1703"><a href="#Generator.jsonobject_sql-1703"><span class="linenos">1703</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-1704"><a href="#Generator.jsonobject_sql-1704"><span class="linenos">1704</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;JSON_OBJECT(</span><span class="si">{</span><span class="n">expressions</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">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.jsonobject_sql-1703"><a href="#Generator.jsonobject_sql-1703"><span class="linenos">1703</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="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.jsonobject_sql-1704"><a href="#Generator.jsonobject_sql-1704"><span class="linenos">1704</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.jsonobject_sql-1705"><a href="#Generator.jsonobject_sql-1705"><span class="linenos">1705</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-1706"><a href="#Generator.jsonobject_sql-1706"><span class="linenos">1706</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-1707"><a href="#Generator.jsonobject_sql-1707"><span class="linenos">1707</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-1708"><a href="#Generator.jsonobject_sql-1708"><span class="linenos">1708</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-1709"><a href="#Generator.jsonobject_sql-1709"><span class="linenos">1709</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-1710"><a href="#Generator.jsonobject_sql-1710"><span class="linenos">1710</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.jsonobject_sql-1711"><a href="#Generator.jsonobject_sql-1711"><span class="linenos">1711</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonobject_sql-1712"><a href="#Generator.jsonobject_sql-1712"><span class="linenos">1712</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-1713"><a href="#Generator.jsonobject_sql-1713"><span class="linenos">1713</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-1714"><a href="#Generator.jsonobject_sql-1714"><span class="linenos">1714</span></a> <span class="n">format_json</span> <span class="o">=</span> <span class="s2">&quot; FORMAT 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;format_json&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.jsonobject_sql-1715"><a href="#Generator.jsonobject_sql-1715"><span class="linenos">1715</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-1716"><a href="#Generator.jsonobject_sql-1716"><span class="linenos">1716</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-1717"><a href="#Generator.jsonobject_sql-1717"><span class="linenos">1717</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;JSON_OBJECT(</span><span class="si">{</span><span class="n">expressions</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">format_json</span><span class="si">}{</span><span class="n">encoding</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -8825,22 +8883,22 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.in_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.in_sql-1706"><a href="#Generator.in_sql-1706"><span class="linenos">1706</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-1707"><a href="#Generator.in_sql-1707"><span class="linenos">1707</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-1708"><a href="#Generator.in_sql-1708"><span class="linenos">1708</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-1709"><a href="#Generator.in_sql-1709"><span class="linenos">1709</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-1710"><a href="#Generator.in_sql-1710"><span class="linenos">1710</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-1711"><a href="#Generator.in_sql-1711"><span class="linenos">1711</span></a>
-</span><span id="Generator.in_sql-1712"><a href="#Generator.in_sql-1712"><span class="linenos">1712</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Generator.in_sql-1713"><a href="#Generator.in_sql-1713"><span class="linenos">1713</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-1714"><a href="#Generator.in_sql-1714"><span class="linenos">1714</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Generator.in_sql-1715"><a href="#Generator.in_sql-1715"><span class="linenos">1715</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-1716"><a href="#Generator.in_sql-1716"><span class="linenos">1716</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Generator.in_sql-1717"><a href="#Generator.in_sql-1717"><span class="linenos">1717</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-1718"><a href="#Generator.in_sql-1718"><span class="linenos">1718</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.in_sql-1719"><a href="#Generator.in_sql-1719"><span class="linenos">1719</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-1720"><a href="#Generator.in_sql-1720"><span class="linenos">1720</span></a>
-</span><span id="Generator.in_sql-1721"><a href="#Generator.in_sql-1721"><span class="linenos">1721</span></a> <span class="k">return</span> <span class="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-1719"><a href="#Generator.in_sql-1719"><span class="linenos">1719</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-1720"><a href="#Generator.in_sql-1720"><span class="linenos">1720</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-1721"><a href="#Generator.in_sql-1721"><span class="linenos">1721</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-1722"><a href="#Generator.in_sql-1722"><span class="linenos">1722</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-1723"><a href="#Generator.in_sql-1723"><span class="linenos">1723</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-1724"><a href="#Generator.in_sql-1724"><span class="linenos">1724</span></a>
+</span><span id="Generator.in_sql-1725"><a href="#Generator.in_sql-1725"><span class="linenos">1725</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Generator.in_sql-1726"><a href="#Generator.in_sql-1726"><span class="linenos">1726</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-1727"><a href="#Generator.in_sql-1727"><span class="linenos">1727</span></a> <span class="k">elif</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Generator.in_sql-1728"><a href="#Generator.in_sql-1728"><span class="linenos">1728</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-1729"><a href="#Generator.in_sql-1729"><span class="linenos">1729</span></a> <span class="k">elif</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Generator.in_sql-1730"><a href="#Generator.in_sql-1730"><span class="linenos">1730</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-1731"><a href="#Generator.in_sql-1731"><span class="linenos">1731</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.in_sql-1732"><a href="#Generator.in_sql-1732"><span class="linenos">1732</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-1733"><a href="#Generator.in_sql-1733"><span class="linenos">1733</span></a>
+</span><span id="Generator.in_sql-1734"><a href="#Generator.in_sql-1734"><span class="linenos">1734</span></a> <span class="k">return</span> <span class="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>
@@ -8858,8 +8916,8 @@ Default: True</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-1723"><a href="#Generator.in_unnest_op-1723"><span class="linenos">1723</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-1724"><a href="#Generator.in_unnest_op-1724"><span class="linenos">1724</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-1736"><a href="#Generator.in_unnest_op-1736"><span class="linenos">1736</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-1737"><a href="#Generator.in_unnest_op-1737"><span class="linenos">1737</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>
@@ -8877,22 +8935,22 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.interval_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.interval_sql-1726"><a href="#Generator.interval_sql-1726"><span class="linenos">1726</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-1727"><a href="#Generator.interval_sql-1727"><span class="linenos">1727</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-1728"><a href="#Generator.interval_sql-1728"><span class="linenos">1728</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-1729"><a href="#Generator.interval_sql-1729"><span class="linenos">1729</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="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span>
-</span><span id="Generator.interval_sql-1730"><a href="#Generator.interval_sql-1730"><span class="linenos">1730</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-1731"><a href="#Generator.interval_sql-1731"><span class="linenos">1731</span></a>
-</span><span id="Generator.interval_sql-1732"><a href="#Generator.interval_sql-1732"><span class="linenos">1732</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-1733"><a href="#Generator.interval_sql-1733"><span class="linenos">1733</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-1734"><a href="#Generator.interval_sql-1734"><span class="linenos">1734</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><span id="Generator.interval_sql-1735"><a href="#Generator.interval_sql-1735"><span class="linenos">1735</span></a>
-</span><span id="Generator.interval_sql-1736"><a href="#Generator.interval_sql-1736"><span class="linenos">1736</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1737"><a href="#Generator.interval_sql-1737"><span class="linenos">1737</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Generator.interval_sql-1738"><a href="#Generator.interval_sql-1738"><span class="linenos">1738</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-1739"><a href="#Generator.interval_sql-1739"><span class="linenos">1739</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-1740"><a href="#Generator.interval_sql-1740"><span class="linenos">1740</span></a>
-</span><span id="Generator.interval_sql-1741"><a href="#Generator.interval_sql-1741"><span class="linenos">1741</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-1739"><a href="#Generator.interval_sql-1739"><span class="linenos">1739</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-1740"><a href="#Generator.interval_sql-1740"><span class="linenos">1740</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-1741"><a href="#Generator.interval_sql-1741"><span class="linenos">1741</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-1742"><a href="#Generator.interval_sql-1742"><span class="linenos">1742</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="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="n">unit</span><span class="p">)</span>
+</span><span id="Generator.interval_sql-1743"><a href="#Generator.interval_sql-1743"><span class="linenos">1743</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-1744"><a href="#Generator.interval_sql-1744"><span class="linenos">1744</span></a>
+</span><span id="Generator.interval_sql-1745"><a href="#Generator.interval_sql-1745"><span class="linenos">1745</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-1746"><a href="#Generator.interval_sql-1746"><span class="linenos">1746</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-1747"><a href="#Generator.interval_sql-1747"><span class="linenos">1747</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><span id="Generator.interval_sql-1748"><a href="#Generator.interval_sql-1748"><span class="linenos">1748</span></a>
+</span><span id="Generator.interval_sql-1749"><a href="#Generator.interval_sql-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">sql</span><span class="p">(</span><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-1750"><a href="#Generator.interval_sql-1750"><span class="linenos">1750</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Generator.interval_sql-1751"><a href="#Generator.interval_sql-1751"><span class="linenos">1751</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-1752"><a href="#Generator.interval_sql-1752"><span class="linenos">1752</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-1753"><a href="#Generator.interval_sql-1753"><span class="linenos">1753</span></a>
+</span><span id="Generator.interval_sql-1754"><a href="#Generator.interval_sql-1754"><span class="linenos">1754</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>
@@ -8910,8 +8968,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.return_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.return_sql-1743"><a href="#Generator.return_sql-1743"><span class="linenos">1743</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-1744"><a href="#Generator.return_sql-1744"><span class="linenos">1744</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-1756"><a href="#Generator.return_sql-1756"><span class="linenos">1756</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-1757"><a href="#Generator.return_sql-1757"><span class="linenos">1757</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>
@@ -8929,13 +8987,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.reference_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.reference_sql-1746"><a href="#Generator.reference_sql-1746"><span class="linenos">1746</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-1747"><a href="#Generator.reference_sql-1747"><span class="linenos">1747</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1748"><a href="#Generator.reference_sql-1748"><span class="linenos">1748</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-1749"><a href="#Generator.reference_sql-1749"><span class="linenos">1749</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-1750"><a href="#Generator.reference_sql-1750"><span class="linenos">1750</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-1751"><a href="#Generator.reference_sql-1751"><span class="linenos">1751</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-1752"><a href="#Generator.reference_sql-1752"><span class="linenos">1752</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-1759"><a href="#Generator.reference_sql-1759"><span class="linenos">1759</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-1760"><a href="#Generator.reference_sql-1760"><span class="linenos">1760</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1761"><a href="#Generator.reference_sql-1761"><span class="linenos">1761</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-1762"><a href="#Generator.reference_sql-1762"><span class="linenos">1762</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-1763"><a href="#Generator.reference_sql-1763"><span class="linenos">1763</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-1764"><a href="#Generator.reference_sql-1764"><span class="linenos">1764</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-1765"><a href="#Generator.reference_sql-1765"><span class="linenos">1765</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>
@@ -8953,8 +9011,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.anonymous_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.anonymous_sql-1754"><a href="#Generator.anonymous_sql-1754"><span class="linenos">1754</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-1755"><a href="#Generator.anonymous_sql-1755"><span class="linenos">1755</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-1767"><a href="#Generator.anonymous_sql-1767"><span class="linenos">1767</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-1768"><a href="#Generator.anonymous_sql-1768"><span class="linenos">1768</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>
@@ -8972,14 +9030,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.paren_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.paren_sql-1757"><a href="#Generator.paren_sql-1757"><span class="linenos">1757</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-1758"><a href="#Generator.paren_sql-1758"><span class="linenos">1758</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-1759"><a href="#Generator.paren_sql-1759"><span class="linenos">1759</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-1760"><a href="#Generator.paren_sql-1760"><span class="linenos">1760</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.paren_sql-1761"><a href="#Generator.paren_sql-1761"><span class="linenos">1761</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-1762"><a href="#Generator.paren_sql-1762"><span class="linenos">1762</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-1763"><a href="#Generator.paren_sql-1763"><span class="linenos">1763</span></a>
-</span><span id="Generator.paren_sql-1764"><a href="#Generator.paren_sql-1764"><span class="linenos">1764</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-1770"><a href="#Generator.paren_sql-1770"><span class="linenos">1770</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-1771"><a href="#Generator.paren_sql-1771"><span class="linenos">1771</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-1772"><a href="#Generator.paren_sql-1772"><span class="linenos">1772</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-1773"><a href="#Generator.paren_sql-1773"><span class="linenos">1773</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.paren_sql-1774"><a href="#Generator.paren_sql-1774"><span class="linenos">1774</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-1775"><a href="#Generator.paren_sql-1775"><span class="linenos">1775</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-1776"><a href="#Generator.paren_sql-1776"><span class="linenos">1776</span></a>
+</span><span id="Generator.paren_sql-1777"><a href="#Generator.paren_sql-1777"><span class="linenos">1777</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>
@@ -8997,11 +9055,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.neg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neg_sql-1766"><a href="#Generator.neg_sql-1766"><span class="linenos">1766</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-1767"><a href="#Generator.neg_sql-1767"><span class="linenos">1767</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-1768"><a href="#Generator.neg_sql-1768"><span class="linenos">1768</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-1769"><a href="#Generator.neg_sql-1769"><span class="linenos">1769</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-1770"><a href="#Generator.neg_sql-1770"><span class="linenos">1770</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-1779"><a href="#Generator.neg_sql-1779"><span class="linenos">1779</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-1780"><a href="#Generator.neg_sql-1780"><span class="linenos">1780</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-1781"><a href="#Generator.neg_sql-1781"><span class="linenos">1781</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-1782"><a href="#Generator.neg_sql-1782"><span class="linenos">1782</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-1783"><a href="#Generator.neg_sql-1783"><span class="linenos">1783</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>
@@ -9019,8 +9077,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.not_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.not_sql-1772"><a href="#Generator.not_sql-1772"><span class="linenos">1772</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-1773"><a href="#Generator.not_sql-1773"><span class="linenos">1773</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-1785"><a href="#Generator.not_sql-1785"><span class="linenos">1785</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-1786"><a href="#Generator.not_sql-1786"><span class="linenos">1786</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>
@@ -9038,10 +9096,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.alias_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.alias_sql-1775"><a href="#Generator.alias_sql-1775"><span class="linenos">1775</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-1776"><a href="#Generator.alias_sql-1776"><span class="linenos">1776</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-1777"><a href="#Generator.alias_sql-1777"><span class="linenos">1777</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-1778"><a href="#Generator.alias_sql-1778"><span class="linenos">1778</span></a> <span class="k">return</span> <span class="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-1788"><a href="#Generator.alias_sql-1788"><span class="linenos">1788</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-1789"><a href="#Generator.alias_sql-1789"><span class="linenos">1789</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-1790"><a href="#Generator.alias_sql-1790"><span class="linenos">1790</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-1791"><a href="#Generator.alias_sql-1791"><span class="linenos">1791</span></a> <span class="k">return</span> <span class="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>
@@ -9059,8 +9117,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.aliases_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.aliases_sql-1780"><a href="#Generator.aliases_sql-1780"><span class="linenos">1780</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-1781"><a href="#Generator.aliases_sql-1781"><span class="linenos">1781</span></a> <span class="k">return</span> <span class="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-1793"><a href="#Generator.aliases_sql-1793"><span class="linenos">1793</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-1794"><a href="#Generator.aliases_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="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>
@@ -9078,10 +9136,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.attimezone_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.attimezone_sql-1783"><a href="#Generator.attimezone_sql-1783"><span class="linenos">1783</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-1784"><a href="#Generator.attimezone_sql-1784"><span class="linenos">1784</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1785"><a href="#Generator.attimezone_sql-1785"><span class="linenos">1785</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-1786"><a href="#Generator.attimezone_sql-1786"><span class="linenos">1786</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-1796"><a href="#Generator.attimezone_sql-1796"><span class="linenos">1796</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-1797"><a href="#Generator.attimezone_sql-1797"><span class="linenos">1797</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1798"><a href="#Generator.attimezone_sql-1798"><span class="linenos">1798</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-1799"><a href="#Generator.attimezone_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="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>
@@ -9099,8 +9157,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.add_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.add_sql-1788"><a href="#Generator.add_sql-1788"><span class="linenos">1788</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-1789"><a href="#Generator.add_sql-1789"><span class="linenos">1789</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-1801"><a href="#Generator.add_sql-1801"><span class="linenos">1801</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-1802"><a href="#Generator.add_sql-1802"><span class="linenos">1802</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>
@@ -9118,8 +9176,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.and_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.and_sql-1791"><a href="#Generator.and_sql-1791"><span class="linenos">1791</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-1792"><a href="#Generator.and_sql-1792"><span class="linenos">1792</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-1804"><a href="#Generator.and_sql-1804"><span class="linenos">1804</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-1805"><a href="#Generator.and_sql-1805"><span class="linenos">1805</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>
@@ -9137,17 +9195,17 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.connector_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.connector_sql-1794"><a href="#Generator.connector_sql-1794"><span class="linenos">1794</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-1795"><a href="#Generator.connector_sql-1795"><span class="linenos">1795</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-1796"><a href="#Generator.connector_sql-1796"><span class="linenos">1796</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-1797"><a href="#Generator.connector_sql-1797"><span class="linenos">1797</span></a>
-</span><span id="Generator.connector_sql-1798"><a href="#Generator.connector_sql-1798"><span class="linenos">1798</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-1799"><a href="#Generator.connector_sql-1799"><span class="linenos">1799</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="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-1800"><a href="#Generator.connector_sql-1800"><span class="linenos">1800</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-1801"><a href="#Generator.connector_sql-1801"><span class="linenos">1801</span></a> <span class="p">)</span>
-</span><span id="Generator.connector_sql-1802"><a href="#Generator.connector_sql-1802"><span class="linenos">1802</span></a>
-</span><span id="Generator.connector_sql-1803"><a href="#Generator.connector_sql-1803"><span class="linenos">1803</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-1804"><a href="#Generator.connector_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">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-1807"><a href="#Generator.connector_sql-1807"><span class="linenos">1807</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-1808"><a href="#Generator.connector_sql-1808"><span class="linenos">1808</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-1809"><a href="#Generator.connector_sql-1809"><span class="linenos">1809</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-1810"><a href="#Generator.connector_sql-1810"><span class="linenos">1810</span></a>
+</span><span id="Generator.connector_sql-1811"><a href="#Generator.connector_sql-1811"><span class="linenos">1811</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-1812"><a href="#Generator.connector_sql-1812"><span class="linenos">1812</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="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-1813"><a href="#Generator.connector_sql-1813"><span class="linenos">1813</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-1814"><a href="#Generator.connector_sql-1814"><span class="linenos">1814</span></a> <span class="p">)</span>
+</span><span id="Generator.connector_sql-1815"><a href="#Generator.connector_sql-1815"><span class="linenos">1815</span></a>
+</span><span id="Generator.connector_sql-1816"><a href="#Generator.connector_sql-1816"><span class="linenos">1816</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-1817"><a href="#Generator.connector_sql-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">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>
@@ -9165,8 +9223,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.bitwiseand_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseand_sql-1806"><a href="#Generator.bitwiseand_sql-1806"><span class="linenos">1806</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-1807"><a href="#Generator.bitwiseand_sql-1807"><span class="linenos">1807</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-1819"><a href="#Generator.bitwiseand_sql-1819"><span class="linenos">1819</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-1820"><a href="#Generator.bitwiseand_sql-1820"><span class="linenos">1820</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>
@@ -9184,8 +9242,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.bitwiseleftshift_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseleftshift_sql-1809"><a href="#Generator.bitwiseleftshift_sql-1809"><span class="linenos">1809</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-1810"><a href="#Generator.bitwiseleftshift_sql-1810"><span class="linenos">1810</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-1822"><a href="#Generator.bitwiseleftshift_sql-1822"><span class="linenos">1822</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-1823"><a href="#Generator.bitwiseleftshift_sql-1823"><span class="linenos">1823</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>
@@ -9203,8 +9261,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.bitwisenot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwisenot_sql-1812"><a href="#Generator.bitwisenot_sql-1812"><span class="linenos">1812</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-1813"><a href="#Generator.bitwisenot_sql-1813"><span class="linenos">1813</span></a> <span class="k">return</span> <span class="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-1825"><a href="#Generator.bitwisenot_sql-1825"><span class="linenos">1825</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-1826"><a href="#Generator.bitwisenot_sql-1826"><span class="linenos">1826</span></a> <span class="k">return</span> <span class="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>
@@ -9222,8 +9280,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.bitwiseor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiseor_sql-1815"><a href="#Generator.bitwiseor_sql-1815"><span class="linenos">1815</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-1816"><a href="#Generator.bitwiseor_sql-1816"><span class="linenos">1816</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-1828"><a href="#Generator.bitwiseor_sql-1828"><span class="linenos">1828</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-1829"><a href="#Generator.bitwiseor_sql-1829"><span class="linenos">1829</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>
@@ -9241,8 +9299,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.bitwiserightshift_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwiserightshift_sql-1818"><a href="#Generator.bitwiserightshift_sql-1818"><span class="linenos">1818</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-1819"><a href="#Generator.bitwiserightshift_sql-1819"><span class="linenos">1819</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-1831"><a href="#Generator.bitwiserightshift_sql-1831"><span class="linenos">1831</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-1832"><a href="#Generator.bitwiserightshift_sql-1832"><span class="linenos">1832</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>
@@ -9260,8 +9318,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.bitwisexor_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.bitwisexor_sql-1821"><a href="#Generator.bitwisexor_sql-1821"><span class="linenos">1821</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-1822"><a href="#Generator.bitwisexor_sql-1822"><span class="linenos">1822</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-1834"><a href="#Generator.bitwisexor_sql-1834"><span class="linenos">1834</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-1835"><a href="#Generator.bitwisexor_sql-1835"><span class="linenos">1835</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>
@@ -9279,8 +9337,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.cast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.cast_sql-1824"><a href="#Generator.cast_sql-1824"><span class="linenos">1824</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.cast_sql-1825"><a href="#Generator.cast_sql-1825"><span class="linenos">1825</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#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.cast_sql-1837"><a href="#Generator.cast_sql-1837"><span class="linenos">1837</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.cast_sql-1838"><a href="#Generator.cast_sql-1838"><span class="linenos">1838</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;CAST(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2"> AS </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -9298,9 +9356,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.currentdate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.currentdate_sql-1827"><a href="#Generator.currentdate_sql-1827"><span class="linenos">1827</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-1828"><a href="#Generator.currentdate_sql-1828"><span class="linenos">1828</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-1829"><a href="#Generator.currentdate_sql-1829"><span class="linenos">1829</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-1840"><a href="#Generator.currentdate_sql-1840"><span class="linenos">1840</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-1841"><a href="#Generator.currentdate_sql-1841"><span class="linenos">1841</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-1842"><a href="#Generator.currentdate_sql-1842"><span class="linenos">1842</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>
@@ -9318,8 +9376,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.collate_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.collate_sql-1831"><a href="#Generator.collate_sql-1831"><span class="linenos">1831</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-1832"><a href="#Generator.collate_sql-1832"><span class="linenos">1832</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-1844"><a href="#Generator.collate_sql-1844"><span class="linenos">1844</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-1845"><a href="#Generator.collate_sql-1845"><span class="linenos">1845</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>
@@ -9337,8 +9395,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.command_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.command_sql-1834"><a href="#Generator.command_sql-1834"><span class="linenos">1834</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-1835"><a href="#Generator.command_sql-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">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">upper</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-1847"><a href="#Generator.command_sql-1847"><span class="linenos">1847</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-1848"><a href="#Generator.command_sql-1848"><span class="linenos">1848</span></a> <span class="k">return</span> <span class="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="o">.</span><span class="n">upper</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>
@@ -9356,12 +9414,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.comment_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.comment_sql-1837"><a href="#Generator.comment_sql-1837"><span class="linenos">1837</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-1838"><a href="#Generator.comment_sql-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="Generator.comment_sql-1839"><a href="#Generator.comment_sql-1839"><span class="linenos">1839</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-1840"><a href="#Generator.comment_sql-1840"><span class="linenos">1840</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-1841"><a href="#Generator.comment_sql-1841"><span class="linenos">1841</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-1842"><a href="#Generator.comment_sql-1842"><span class="linenos">1842</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-1850"><a href="#Generator.comment_sql-1850"><span class="linenos">1850</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-1851"><a href="#Generator.comment_sql-1851"><span class="linenos">1851</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1852"><a href="#Generator.comment_sql-1852"><span class="linenos">1852</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-1853"><a href="#Generator.comment_sql-1853"><span class="linenos">1853</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-1854"><a href="#Generator.comment_sql-1854"><span class="linenos">1854</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-1855"><a href="#Generator.comment_sql-1855"><span class="linenos">1855</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>
@@ -9379,8 +9437,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.transaction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.transaction_sql-1844"><a href="#Generator.transaction_sql-1844"><span class="linenos">1844</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-1845"><a href="#Generator.transaction_sql-1845"><span class="linenos">1845</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-1857"><a href="#Generator.transaction_sql-1857"><span class="linenos">1857</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-1858"><a href="#Generator.transaction_sql-1858"><span class="linenos">1858</span></a> <span class="k">return</span> <span class="s2">&quot;BEGIN&quot;</span>
</span></pre></div>
@@ -9398,12 +9456,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.commit_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.commit_sql-1847"><a href="#Generator.commit_sql-1847"><span class="linenos">1847</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-1848"><a href="#Generator.commit_sql-1848"><span class="linenos">1848</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-1849"><a href="#Generator.commit_sql-1849"><span class="linenos">1849</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-1850"><a href="#Generator.commit_sql-1850"><span class="linenos">1850</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-1851"><a href="#Generator.commit_sql-1851"><span class="linenos">1851</span></a>
-</span><span id="Generator.commit_sql-1852"><a href="#Generator.commit_sql-1852"><span class="linenos">1852</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-1860"><a href="#Generator.commit_sql-1860"><span class="linenos">1860</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-1861"><a href="#Generator.commit_sql-1861"><span class="linenos">1861</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-1862"><a href="#Generator.commit_sql-1862"><span class="linenos">1862</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-1863"><a href="#Generator.commit_sql-1863"><span class="linenos">1863</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-1864"><a href="#Generator.commit_sql-1864"><span class="linenos">1864</span></a>
+</span><span id="Generator.commit_sql-1865"><a href="#Generator.commit_sql-1865"><span class="linenos">1865</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>
@@ -9421,10 +9479,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.rollback_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.rollback_sql-1854"><a href="#Generator.rollback_sql-1854"><span class="linenos">1854</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-1855"><a href="#Generator.rollback_sql-1855"><span class="linenos">1855</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-1856"><a href="#Generator.rollback_sql-1856"><span class="linenos">1856</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-1857"><a href="#Generator.rollback_sql-1857"><span class="linenos">1857</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-1867"><a href="#Generator.rollback_sql-1867"><span class="linenos">1867</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-1868"><a href="#Generator.rollback_sql-1868"><span class="linenos">1868</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-1869"><a href="#Generator.rollback_sql-1869"><span class="linenos">1869</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-1870"><a href="#Generator.rollback_sql-1870"><span class="linenos">1870</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>
@@ -9442,25 +9500,25 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.altercolumn_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altercolumn_sql-1859"><a href="#Generator.altercolumn_sql-1859"><span class="linenos">1859</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-1860"><a href="#Generator.altercolumn_sql-1860"><span class="linenos">1860</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1861"><a href="#Generator.altercolumn_sql-1861"><span class="linenos">1861</span></a>
-</span><span id="Generator.altercolumn_sql-1862"><a href="#Generator.altercolumn_sql-1862"><span class="linenos">1862</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-1863"><a href="#Generator.altercolumn_sql-1863"><span class="linenos">1863</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-1864"><a href="#Generator.altercolumn_sql-1864"><span class="linenos">1864</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-1865"><a href="#Generator.altercolumn_sql-1865"><span class="linenos">1865</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-1866"><a href="#Generator.altercolumn_sql-1866"><span class="linenos">1866</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-1867"><a href="#Generator.altercolumn_sql-1867"><span class="linenos">1867</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-1868"><a href="#Generator.altercolumn_sql-1868"><span class="linenos">1868</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"> 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-1869"><a href="#Generator.altercolumn_sql-1869"><span class="linenos">1869</span></a>
-</span><span id="Generator.altercolumn_sql-1870"><a href="#Generator.altercolumn_sql-1870"><span class="linenos">1870</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-1871"><a href="#Generator.altercolumn_sql-1871"><span class="linenos">1871</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Generator.altercolumn_sql-1872"><a href="#Generator.altercolumn_sql-1872"><span class="linenos">1872</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-1873"><a href="#Generator.altercolumn_sql-1873"><span class="linenos">1873</span></a>
-</span><span id="Generator.altercolumn_sql-1874"><a href="#Generator.altercolumn_sql-1874"><span class="linenos">1874</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-1875"><a href="#Generator.altercolumn_sql-1875"><span class="linenos">1875</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-1876"><a href="#Generator.altercolumn_sql-1876"><span class="linenos">1876</span></a>
-</span><span id="Generator.altercolumn_sql-1877"><a href="#Generator.altercolumn_sql-1877"><span class="linenos">1877</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altercolumn_sql-1872"><a href="#Generator.altercolumn_sql-1872"><span class="linenos">1872</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-1873"><a href="#Generator.altercolumn_sql-1873"><span class="linenos">1873</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1874"><a href="#Generator.altercolumn_sql-1874"><span class="linenos">1874</span></a>
+</span><span id="Generator.altercolumn_sql-1875"><a href="#Generator.altercolumn_sql-1875"><span class="linenos">1875</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-1876"><a href="#Generator.altercolumn_sql-1876"><span class="linenos">1876</span></a> <span class="k">if</span> <span class="n">dtype</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-1877"><a href="#Generator.altercolumn_sql-1877"><span class="linenos">1877</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-1878"><a href="#Generator.altercolumn_sql-1878"><span class="linenos">1878</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-1879"><a href="#Generator.altercolumn_sql-1879"><span class="linenos">1879</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-1880"><a href="#Generator.altercolumn_sql-1880"><span class="linenos">1880</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-1881"><a href="#Generator.altercolumn_sql-1881"><span class="linenos">1881</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"> 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-1882"><a href="#Generator.altercolumn_sql-1882"><span class="linenos">1882</span></a>
+</span><span id="Generator.altercolumn_sql-1883"><a href="#Generator.altercolumn_sql-1883"><span class="linenos">1883</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-1884"><a href="#Generator.altercolumn_sql-1884"><span class="linenos">1884</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Generator.altercolumn_sql-1885"><a href="#Generator.altercolumn_sql-1885"><span class="linenos">1885</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-1886"><a href="#Generator.altercolumn_sql-1886"><span class="linenos">1886</span></a>
+</span><span id="Generator.altercolumn_sql-1887"><a href="#Generator.altercolumn_sql-1887"><span class="linenos">1887</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-1888"><a href="#Generator.altercolumn_sql-1888"><span class="linenos">1888</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-1889"><a href="#Generator.altercolumn_sql-1889"><span class="linenos">1889</span></a>
+</span><span id="Generator.altercolumn_sql-1890"><a href="#Generator.altercolumn_sql-1890"><span class="linenos">1890</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>
@@ -9478,9 +9536,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.renametable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.renametable_sql-1879"><a href="#Generator.renametable_sql-1879"><span class="linenos">1879</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-1880"><a href="#Generator.renametable_sql-1880"><span class="linenos">1880</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1881"><a href="#Generator.renametable_sql-1881"><span class="linenos">1881</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-1892"><a href="#Generator.renametable_sql-1892"><span class="linenos">1892</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-1893"><a href="#Generator.renametable_sql-1893"><span class="linenos">1893</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1894"><a href="#Generator.renametable_sql-1894"><span class="linenos">1894</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>
@@ -9498,20 +9556,20 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.altertable_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.altertable_sql-1883"><a href="#Generator.altertable_sql-1883"><span class="linenos">1883</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-1884"><a href="#Generator.altertable_sql-1884"><span class="linenos">1884</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-1885"><a href="#Generator.altertable_sql-1885"><span class="linenos">1885</span></a>
-</span><span id="Generator.altertable_sql-1886"><a href="#Generator.altertable_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">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-1887"><a href="#Generator.altertable_sql-1887"><span class="linenos">1887</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 COLUMN &quot;</span><span class="p">)</span>
-</span><span id="Generator.altertable_sql-1888"><a href="#Generator.altertable_sql-1888"><span class="linenos">1888</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-1889"><a href="#Generator.altertable_sql-1889"><span class="linenos">1889</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-1890"><a href="#Generator.altertable_sql-1890"><span class="linenos">1890</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-1891"><a href="#Generator.altertable_sql-1891"><span class="linenos">1891</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-1892"><a href="#Generator.altertable_sql-1892"><span class="linenos">1892</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.altertable_sql-1893"><a href="#Generator.altertable_sql-1893"><span class="linenos">1893</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><span id="Generator.altertable_sql-1894"><a href="#Generator.altertable_sql-1894"><span class="linenos">1894</span></a>
-</span><span id="Generator.altertable_sql-1895"><a href="#Generator.altertable_sql-1895"><span class="linenos">1895</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-1896"><a href="#Generator.altertable_sql-1896"><span class="linenos">1896</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="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-1896"><a href="#Generator.altertable_sql-1896"><span class="linenos">1896</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-1897"><a href="#Generator.altertable_sql-1897"><span class="linenos">1897</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-1898"><a href="#Generator.altertable_sql-1898"><span class="linenos">1898</span></a>
+</span><span id="Generator.altertable_sql-1899"><a href="#Generator.altertable_sql-1899"><span class="linenos">1899</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-1900"><a href="#Generator.altertable_sql-1900"><span class="linenos">1900</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 COLUMN &quot;</span><span class="p">)</span>
+</span><span id="Generator.altertable_sql-1901"><a href="#Generator.altertable_sql-1901"><span class="linenos">1901</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-1902"><a href="#Generator.altertable_sql-1902"><span class="linenos">1902</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-1903"><a href="#Generator.altertable_sql-1903"><span class="linenos">1903</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-1904"><a href="#Generator.altertable_sql-1904"><span class="linenos">1904</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-1905"><a href="#Generator.altertable_sql-1905"><span class="linenos">1905</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.altertable_sql-1906"><a href="#Generator.altertable_sql-1906"><span class="linenos">1906</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><span id="Generator.altertable_sql-1907"><a href="#Generator.altertable_sql-1907"><span class="linenos">1907</span></a>
+</span><span id="Generator.altertable_sql-1908"><a href="#Generator.altertable_sql-1908"><span class="linenos">1908</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-1909"><a href="#Generator.altertable_sql-1909"><span class="linenos">1909</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="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>
@@ -9529,10 +9587,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.droppartition_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.droppartition_sql-1898"><a href="#Generator.droppartition_sql-1898"><span class="linenos">1898</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-1899"><a href="#Generator.droppartition_sql-1899"><span class="linenos">1899</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-1900"><a href="#Generator.droppartition_sql-1900"><span class="linenos">1900</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-1901"><a href="#Generator.droppartition_sql-1901"><span class="linenos">1901</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-1911"><a href="#Generator.droppartition_sql-1911"><span class="linenos">1911</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-1912"><a href="#Generator.droppartition_sql-1912"><span class="linenos">1912</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-1913"><a href="#Generator.droppartition_sql-1913"><span class="linenos">1913</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-1914"><a href="#Generator.droppartition_sql-1914"><span class="linenos">1914</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>
@@ -9550,16 +9608,16 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.addconstraint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.addconstraint_sql-1903"><a href="#Generator.addconstraint_sql-1903"><span class="linenos">1903</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-1904"><a href="#Generator.addconstraint_sql-1904"><span class="linenos">1904</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1905"><a href="#Generator.addconstraint_sql-1905"><span class="linenos">1905</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-1906"><a href="#Generator.addconstraint_sql-1906"><span class="linenos">1906</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-1907"><a href="#Generator.addconstraint_sql-1907"><span class="linenos">1907</span></a>
-</span><span id="Generator.addconstraint_sql-1908"><a href="#Generator.addconstraint_sql-1908"><span class="linenos">1908</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-1909"><a href="#Generator.addconstraint_sql-1909"><span class="linenos">1909</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-1910"><a href="#Generator.addconstraint_sql-1910"><span class="linenos">1910</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-1911"><a href="#Generator.addconstraint_sql-1911"><span class="linenos">1911</span></a>
-</span><span id="Generator.addconstraint_sql-1912"><a href="#Generator.addconstraint_sql-1912"><span class="linenos">1912</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-1916"><a href="#Generator.addconstraint_sql-1916"><span class="linenos">1916</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-1917"><a href="#Generator.addconstraint_sql-1917"><span class="linenos">1917</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-1918"><a href="#Generator.addconstraint_sql-1918"><span class="linenos">1918</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-1919"><a href="#Generator.addconstraint_sql-1919"><span class="linenos">1919</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-1920"><a href="#Generator.addconstraint_sql-1920"><span class="linenos">1920</span></a>
+</span><span id="Generator.addconstraint_sql-1921"><a href="#Generator.addconstraint_sql-1921"><span class="linenos">1921</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-1922"><a href="#Generator.addconstraint_sql-1922"><span class="linenos">1922</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-1923"><a href="#Generator.addconstraint_sql-1923"><span class="linenos">1923</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-1924"><a href="#Generator.addconstraint_sql-1924"><span class="linenos">1924</span></a>
+</span><span id="Generator.addconstraint_sql-1925"><a href="#Generator.addconstraint_sql-1925"><span class="linenos">1925</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>
@@ -9577,13 +9635,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.distinct_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distinct_sql-1914"><a href="#Generator.distinct_sql-1914"><span class="linenos">1914</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-1915"><a href="#Generator.distinct_sql-1915"><span class="linenos">1915</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-1916"><a href="#Generator.distinct_sql-1916"><span class="linenos">1916</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-1917"><a href="#Generator.distinct_sql-1917"><span class="linenos">1917</span></a>
-</span><span id="Generator.distinct_sql-1918"><a href="#Generator.distinct_sql-1918"><span class="linenos">1918</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-1919"><a href="#Generator.distinct_sql-1919"><span class="linenos">1919</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-1920"><a href="#Generator.distinct_sql-1920"><span class="linenos">1920</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-1927"><a href="#Generator.distinct_sql-1927"><span class="linenos">1927</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-1928"><a href="#Generator.distinct_sql-1928"><span class="linenos">1928</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-1929"><a href="#Generator.distinct_sql-1929"><span class="linenos">1929</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-1930"><a href="#Generator.distinct_sql-1930"><span class="linenos">1930</span></a>
+</span><span id="Generator.distinct_sql-1931"><a href="#Generator.distinct_sql-1931"><span class="linenos">1931</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-1932"><a href="#Generator.distinct_sql-1932"><span class="linenos">1932</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-1933"><a href="#Generator.distinct_sql-1933"><span class="linenos">1933</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>
@@ -9601,8 +9659,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.ignorenulls_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ignorenulls_sql-1922"><a href="#Generator.ignorenulls_sql-1922"><span class="linenos">1922</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-1923"><a href="#Generator.ignorenulls_sql-1923"><span class="linenos">1923</span></a> <span class="k">return</span> <span class="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"> IGNORE NULLS&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ignorenulls_sql-1935"><a href="#Generator.ignorenulls_sql-1935"><span class="linenos">1935</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-1936"><a href="#Generator.ignorenulls_sql-1936"><span class="linenos">1936</span></a> <span class="k">return</span> <span class="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"> IGNORE NULLS&quot;</span>
</span></pre></div>
@@ -9620,8 +9678,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.respectnulls_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.respectnulls_sql-1925"><a href="#Generator.respectnulls_sql-1925"><span class="linenos">1925</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-1926"><a href="#Generator.respectnulls_sql-1926"><span class="linenos">1926</span></a> <span class="k">return</span> <span class="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"> RESPECT NULLS&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.respectnulls_sql-1938"><a href="#Generator.respectnulls_sql-1938"><span class="linenos">1938</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-1939"><a href="#Generator.respectnulls_sql-1939"><span class="linenos">1939</span></a> <span class="k">return</span> <span class="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"> RESPECT NULLS&quot;</span>
</span></pre></div>
@@ -9639,13 +9697,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.intdiv_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intdiv_sql-1928"><a href="#Generator.intdiv_sql-1928"><span class="linenos">1928</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-1929"><a href="#Generator.intdiv_sql-1929"><span class="linenos">1929</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-1930"><a href="#Generator.intdiv_sql-1930"><span class="linenos">1930</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-1931"><a href="#Generator.intdiv_sql-1931"><span class="linenos">1931</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-1932"><a href="#Generator.intdiv_sql-1932"><span class="linenos">1932</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-1933"><a href="#Generator.intdiv_sql-1933"><span class="linenos">1933</span></a> <span class="p">)</span>
-</span><span id="Generator.intdiv_sql-1934"><a href="#Generator.intdiv_sql-1934"><span class="linenos">1934</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.intdiv_sql-1941"><a href="#Generator.intdiv_sql-1941"><span class="linenos">1941</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-1942"><a href="#Generator.intdiv_sql-1942"><span class="linenos">1942</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-1943"><a href="#Generator.intdiv_sql-1943"><span class="linenos">1943</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-1944"><a href="#Generator.intdiv_sql-1944"><span class="linenos">1944</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-1945"><a href="#Generator.intdiv_sql-1945"><span class="linenos">1945</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-1946"><a href="#Generator.intdiv_sql-1946"><span class="linenos">1946</span></a> <span class="p">)</span>
+</span><span id="Generator.intdiv_sql-1947"><a href="#Generator.intdiv_sql-1947"><span class="linenos">1947</span></a> <span class="p">)</span>
</span></pre></div>
@@ -9663,8 +9721,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.dpipe_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dpipe_sql-1936"><a href="#Generator.dpipe_sql-1936"><span class="linenos">1936</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-1937"><a href="#Generator.dpipe_sql-1937"><span class="linenos">1937</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-1949"><a href="#Generator.dpipe_sql-1949"><span class="linenos">1949</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-1950"><a href="#Generator.dpipe_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">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>
@@ -9682,8 +9740,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.div_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.div_sql-1939"><a href="#Generator.div_sql-1939"><span class="linenos">1939</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-1940"><a href="#Generator.div_sql-1940"><span class="linenos">1940</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-1952"><a href="#Generator.div_sql-1952"><span class="linenos">1952</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-1953"><a href="#Generator.div_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">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>
@@ -9701,8 +9759,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.overlaps_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.overlaps_sql-1942"><a href="#Generator.overlaps_sql-1942"><span class="linenos">1942</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-1943"><a href="#Generator.overlaps_sql-1943"><span class="linenos">1943</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-1955"><a href="#Generator.overlaps_sql-1955"><span class="linenos">1955</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-1956"><a href="#Generator.overlaps_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">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>
@@ -9720,8 +9778,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.distance_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.distance_sql-1945"><a href="#Generator.distance_sql-1945"><span class="linenos">1945</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-1946"><a href="#Generator.distance_sql-1946"><span class="linenos">1946</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-1958"><a href="#Generator.distance_sql-1958"><span class="linenos">1958</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-1959"><a href="#Generator.distance_sql-1959"><span class="linenos">1959</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>
@@ -9739,8 +9797,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.dot_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.dot_sql-1948"><a href="#Generator.dot_sql-1948"><span class="linenos">1948</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-1949"><a href="#Generator.dot_sql-1949"><span class="linenos">1949</span></a> <span class="k">return</span> <span class="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-1961"><a href="#Generator.dot_sql-1961"><span class="linenos">1961</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-1962"><a href="#Generator.dot_sql-1962"><span class="linenos">1962</span></a> <span class="k">return</span> <span class="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>
@@ -9758,8 +9816,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.eq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.eq_sql-1951"><a href="#Generator.eq_sql-1951"><span class="linenos">1951</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-1952"><a href="#Generator.eq_sql-1952"><span class="linenos">1952</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-1964"><a href="#Generator.eq_sql-1964"><span class="linenos">1964</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-1965"><a href="#Generator.eq_sql-1965"><span class="linenos">1965</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>
@@ -9777,8 +9835,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.escape_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.escape_sql-1954"><a href="#Generator.escape_sql-1954"><span class="linenos">1954</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-1955"><a href="#Generator.escape_sql-1955"><span class="linenos">1955</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-1967"><a href="#Generator.escape_sql-1967"><span class="linenos">1967</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-1968"><a href="#Generator.escape_sql-1968"><span class="linenos">1968</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>
@@ -9796,8 +9854,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.glob_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.glob_sql-1957"><a href="#Generator.glob_sql-1957"><span class="linenos">1957</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-1958"><a href="#Generator.glob_sql-1958"><span class="linenos">1958</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-1970"><a href="#Generator.glob_sql-1970"><span class="linenos">1970</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-1971"><a href="#Generator.glob_sql-1971"><span class="linenos">1971</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>
@@ -9815,8 +9873,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.gt_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gt_sql-1960"><a href="#Generator.gt_sql-1960"><span class="linenos">1960</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-1961"><a href="#Generator.gt_sql-1961"><span class="linenos">1961</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-1973"><a href="#Generator.gt_sql-1973"><span class="linenos">1973</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-1974"><a href="#Generator.gt_sql-1974"><span class="linenos">1974</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>
@@ -9834,8 +9892,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.gte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.gte_sql-1963"><a href="#Generator.gte_sql-1963"><span class="linenos">1963</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-1964"><a href="#Generator.gte_sql-1964"><span class="linenos">1964</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-1976"><a href="#Generator.gte_sql-1976"><span class="linenos">1976</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-1977"><a href="#Generator.gte_sql-1977"><span class="linenos">1977</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>
@@ -9853,8 +9911,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.ilike_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilike_sql-1966"><a href="#Generator.ilike_sql-1966"><span class="linenos">1966</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-1967"><a href="#Generator.ilike_sql-1967"><span class="linenos">1967</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-1979"><a href="#Generator.ilike_sql-1979"><span class="linenos">1979</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-1980"><a href="#Generator.ilike_sql-1980"><span class="linenos">1980</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>
@@ -9872,8 +9930,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.ilikeany_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.ilikeany_sql-1969"><a href="#Generator.ilikeany_sql-1969"><span class="linenos">1969</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-1970"><a href="#Generator.ilikeany_sql-1970"><span class="linenos">1970</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-1982"><a href="#Generator.ilikeany_sql-1982"><span class="linenos">1982</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-1983"><a href="#Generator.ilikeany_sql-1983"><span class="linenos">1983</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>
@@ -9891,8 +9949,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.is_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.is_sql-1972"><a href="#Generator.is_sql-1972"><span class="linenos">1972</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-1973"><a href="#Generator.is_sql-1973"><span class="linenos">1973</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-1985"><a href="#Generator.is_sql-1985"><span class="linenos">1985</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-1986"><a href="#Generator.is_sql-1986"><span class="linenos">1986</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>
@@ -9910,8 +9968,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.like_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.like_sql-1975"><a href="#Generator.like_sql-1975"><span class="linenos">1975</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-1976"><a href="#Generator.like_sql-1976"><span class="linenos">1976</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-1988"><a href="#Generator.like_sql-1988"><span class="linenos">1988</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-1989"><a href="#Generator.like_sql-1989"><span class="linenos">1989</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>
@@ -9929,8 +9987,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.likeany_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.likeany_sql-1978"><a href="#Generator.likeany_sql-1978"><span class="linenos">1978</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-1979"><a href="#Generator.likeany_sql-1979"><span class="linenos">1979</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-1991"><a href="#Generator.likeany_sql-1991"><span class="linenos">1991</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-1992"><a href="#Generator.likeany_sql-1992"><span class="linenos">1992</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>
@@ -9948,8 +10006,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.similarto_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.similarto_sql-1981"><a href="#Generator.similarto_sql-1981"><span class="linenos">1981</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-1982"><a href="#Generator.similarto_sql-1982"><span class="linenos">1982</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-1994"><a href="#Generator.similarto_sql-1994"><span class="linenos">1994</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-1995"><a href="#Generator.similarto_sql-1995"><span class="linenos">1995</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>
@@ -9967,8 +10025,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.lt_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lt_sql-1984"><a href="#Generator.lt_sql-1984"><span class="linenos">1984</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-1985"><a href="#Generator.lt_sql-1985"><span class="linenos">1985</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-1997"><a href="#Generator.lt_sql-1997"><span class="linenos">1997</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-1998"><a href="#Generator.lt_sql-1998"><span class="linenos">1998</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>
@@ -9986,8 +10044,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.lte_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.lte_sql-1987"><a href="#Generator.lte_sql-1987"><span class="linenos">1987</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-1988"><a href="#Generator.lte_sql-1988"><span class="linenos">1988</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-2000"><a href="#Generator.lte_sql-2000"><span class="linenos">2000</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-2001"><a href="#Generator.lte_sql-2001"><span class="linenos">2001</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>
@@ -10005,8 +10063,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.mod_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mod_sql-1990"><a href="#Generator.mod_sql-1990"><span class="linenos">1990</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-1991"><a href="#Generator.mod_sql-1991"><span class="linenos">1991</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-2003"><a href="#Generator.mod_sql-2003"><span class="linenos">2003</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-2004"><a href="#Generator.mod_sql-2004"><span class="linenos">2004</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>
@@ -10024,8 +10082,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.mul_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.mul_sql-1993"><a href="#Generator.mul_sql-1993"><span class="linenos">1993</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-1994"><a href="#Generator.mul_sql-1994"><span class="linenos">1994</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-2006"><a href="#Generator.mul_sql-2006"><span class="linenos">2006</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-2007"><a href="#Generator.mul_sql-2007"><span class="linenos">2007</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>
@@ -10043,8 +10101,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.neq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.neq_sql-1996"><a href="#Generator.neq_sql-1996"><span class="linenos">1996</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-1997"><a href="#Generator.neq_sql-1997"><span class="linenos">1997</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-2009"><a href="#Generator.neq_sql-2009"><span class="linenos">2009</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-2010"><a href="#Generator.neq_sql-2010"><span class="linenos">2010</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>
@@ -10062,8 +10120,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.nullsafeeq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeeq_sql-1999"><a href="#Generator.nullsafeeq_sql-1999"><span class="linenos">1999</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-2000"><a href="#Generator.nullsafeeq_sql-2000"><span class="linenos">2000</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-2012"><a href="#Generator.nullsafeeq_sql-2012"><span class="linenos">2012</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-2013"><a href="#Generator.nullsafeeq_sql-2013"><span class="linenos">2013</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>
@@ -10081,8 +10139,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.nullsafeneq_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.nullsafeneq_sql-2002"><a href="#Generator.nullsafeneq_sql-2002"><span class="linenos">2002</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-2003"><a href="#Generator.nullsafeneq_sql-2003"><span class="linenos">2003</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-2015"><a href="#Generator.nullsafeneq_sql-2015"><span class="linenos">2015</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-2016"><a href="#Generator.nullsafeneq_sql-2016"><span class="linenos">2016</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>
@@ -10100,8 +10158,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.or_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.or_sql-2005"><a href="#Generator.or_sql-2005"><span class="linenos">2005</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-2006"><a href="#Generator.or_sql-2006"><span class="linenos">2006</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-2018"><a href="#Generator.or_sql-2018"><span class="linenos">2018</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-2019"><a href="#Generator.or_sql-2019"><span class="linenos">2019</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>
@@ -10119,8 +10177,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.slice_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.slice_sql-2008"><a href="#Generator.slice_sql-2008"><span class="linenos">2008</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-2009"><a href="#Generator.slice_sql-2009"><span class="linenos">2009</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-2021"><a href="#Generator.slice_sql-2021"><span class="linenos">2021</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-2022"><a href="#Generator.slice_sql-2022"><span class="linenos">2022</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>
@@ -10138,8 +10196,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.sub_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.sub_sql-2011"><a href="#Generator.sub_sql-2011"><span class="linenos">2011</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-2012"><a href="#Generator.sub_sql-2012"><span class="linenos">2012</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-2024"><a href="#Generator.sub_sql-2024"><span class="linenos">2024</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-2025"><a href="#Generator.sub_sql-2025"><span class="linenos">2025</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>
@@ -10157,8 +10215,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.trycast_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.trycast_sql-2014"><a href="#Generator.trycast_sql-2014"><span class="linenos">2014</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-2015"><a href="#Generator.trycast_sql-2015"><span class="linenos">2015</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRY_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#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.trycast_sql-2027"><a href="#Generator.trycast_sql-2027"><span class="linenos">2027</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-2028"><a href="#Generator.trycast_sql-2028"><span class="linenos">2028</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;TRY_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="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -10176,12 +10234,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.use_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.use_sql-2017"><a href="#Generator.use_sql-2017"><span class="linenos">2017</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-2018"><a href="#Generator.use_sql-2018"><span class="linenos">2018</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-2019"><a href="#Generator.use_sql-2019"><span class="linenos">2019</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-2020"><a href="#Generator.use_sql-2020"><span class="linenos">2020</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2021"><a href="#Generator.use_sql-2021"><span class="linenos">2021</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-2022"><a href="#Generator.use_sql-2022"><span class="linenos">2022</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-2030"><a href="#Generator.use_sql-2030"><span class="linenos">2030</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-2031"><a href="#Generator.use_sql-2031"><span class="linenos">2031</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-2032"><a href="#Generator.use_sql-2032"><span class="linenos">2032</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-2033"><a href="#Generator.use_sql-2033"><span class="linenos">2033</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2034"><a href="#Generator.use_sql-2034"><span class="linenos">2034</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-2035"><a href="#Generator.use_sql-2035"><span class="linenos">2035</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>
@@ -10199,9 +10257,9 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.binary"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.binary-2024"><a href="#Generator.binary-2024"><span class="linenos">2024</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-2025"><a href="#Generator.binary-2025"><span class="linenos">2025</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-2026"><a href="#Generator.binary-2026"><span class="linenos">2026</span></a> <span class="k">return</span> <span class="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-2037"><a href="#Generator.binary-2037"><span class="linenos">2037</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-2038"><a href="#Generator.binary-2038"><span class="linenos">2038</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-2039"><a href="#Generator.binary-2039"><span class="linenos">2039</span></a> <span class="k">return</span> <span class="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>
@@ -10219,16 +10277,16 @@ Default: True</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-2028"><a href="#Generator.function_fallback_sql-2028"><span class="linenos">2028</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-2029"><a href="#Generator.function_fallback_sql-2029"><span class="linenos">2029</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.function_fallback_sql-2030"><a href="#Generator.function_fallback_sql-2030"><span class="linenos">2030</span></a> <span class="k">for</span> <span class="n">arg_value</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">values</span><span class="p">():</span>
-</span><span id="Generator.function_fallback_sql-2031"><a href="#Generator.function_fallback_sql-2031"><span class="linenos">2031</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-2032"><a href="#Generator.function_fallback_sql-2032"><span class="linenos">2032</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-2033"><a href="#Generator.function_fallback_sql-2033"><span class="linenos">2033</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-2034"><a href="#Generator.function_fallback_sql-2034"><span class="linenos">2034</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.function_fallback_sql-2035"><a href="#Generator.function_fallback_sql-2035"><span class="linenos">2035</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-2036"><a href="#Generator.function_fallback_sql-2036"><span class="linenos">2036</span></a>
-</span><span id="Generator.function_fallback_sql-2037"><a href="#Generator.function_fallback_sql-2037"><span class="linenos">2037</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">sql_name</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.function_fallback_sql-2041"><a href="#Generator.function_fallback_sql-2041"><span class="linenos">2041</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-2042"><a href="#Generator.function_fallback_sql-2042"><span class="linenos">2042</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.function_fallback_sql-2043"><a href="#Generator.function_fallback_sql-2043"><span class="linenos">2043</span></a> <span class="k">for</span> <span class="n">arg_value</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">values</span><span class="p">():</span>
+</span><span id="Generator.function_fallback_sql-2044"><a href="#Generator.function_fallback_sql-2044"><span class="linenos">2044</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-2045"><a href="#Generator.function_fallback_sql-2045"><span class="linenos">2045</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-2046"><a href="#Generator.function_fallback_sql-2046"><span class="linenos">2046</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-2047"><a href="#Generator.function_fallback_sql-2047"><span class="linenos">2047</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.function_fallback_sql-2048"><a href="#Generator.function_fallback_sql-2048"><span class="linenos">2048</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-2049"><a href="#Generator.function_fallback_sql-2049"><span class="linenos">2049</span></a>
+</span><span id="Generator.function_fallback_sql-2050"><a href="#Generator.function_fallback_sql-2050"><span class="linenos">2050</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">sql_name</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
@@ -10246,8 +10304,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.func"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.func-2039"><a href="#Generator.func-2039"><span class="linenos">2039</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">name</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="n">t</span><span class="o">.</span><span 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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Generator.func-2040"><a href="#Generator.func-2040"><span class="linenos">2040</span></a> <span class="k">return</span> <span class="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="s2">(</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="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.func-2052"><a href="#Generator.func-2052"><span class="linenos">2052</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">name</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="n">t</span><span class="o">.</span><span 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">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Generator.func-2053"><a href="#Generator.func-2053"><span class="linenos">2053</span></a> <span class="k">return</span> <span class="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="s2">(</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="s2">)&quot;</span>
</span></pre></div>
@@ -10265,11 +10323,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.format_args"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_args-2042"><a href="#Generator.format_args-2042"><span class="linenos">2042</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-2043"><a href="#Generator.format_args-2043"><span class="linenos">2043</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-2044"><a href="#Generator.format_args-2044"><span class="linenos">2044</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-2045"><a href="#Generator.format_args-2045"><span class="linenos">2045</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="sa">f</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-2046"><a href="#Generator.format_args-2046"><span class="linenos">2046</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-2055"><a href="#Generator.format_args-2055"><span class="linenos">2055</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-2056"><a href="#Generator.format_args-2056"><span class="linenos">2056</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-2057"><a href="#Generator.format_args-2057"><span class="linenos">2057</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-2058"><a href="#Generator.format_args-2058"><span class="linenos">2058</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="sa">f</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-2059"><a href="#Generator.format_args-2059"><span class="linenos">2059</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>
@@ -10287,8 +10345,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.text_width"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.text_width-2048"><a href="#Generator.text_width-2048"><span class="linenos">2048</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-2049"><a href="#Generator.text_width-2049"><span class="linenos">2049</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-2061"><a href="#Generator.text_width-2061"><span class="linenos">2061</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-2062"><a href="#Generator.text_width-2062"><span class="linenos">2062</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>
@@ -10306,8 +10364,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.format_time"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_time-2051"><a href="#Generator.format_time-2051"><span class="linenos">2051</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-2052"><a href="#Generator.format_time-2052"><span class="linenos">2052</span></a> <span class="k">return</span> <span class="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_trie</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.format_time-2064"><a href="#Generator.format_time-2064"><span class="linenos">2064</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-2065"><a href="#Generator.format_time-2065"><span class="linenos">2065</span></a> <span class="k">return</span> <span class="n">format_time</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;format&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_mapping</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">time_trie</span><span class="p">)</span>
</span></pre></div>
@@ -10325,47 +10383,47 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.expressions"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.expressions-2054"><a href="#Generator.expressions-2054"><span class="linenos">2054</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
-</span><span id="Generator.expressions-2055"><a href="#Generator.expressions-2055"><span class="linenos">2055</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Generator.expressions-2056"><a href="#Generator.expressions-2056"><span class="linenos">2056</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-2057"><a href="#Generator.expressions-2057"><span class="linenos">2057</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-2058"><a href="#Generator.expressions-2058"><span class="linenos">2058</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">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.expressions-2059"><a href="#Generator.expressions-2059"><span class="linenos">2059</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-2060"><a href="#Generator.expressions-2060"><span class="linenos">2060</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-2061"><a href="#Generator.expressions-2061"><span class="linenos">2061</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-2062"><a href="#Generator.expressions-2062"><span class="linenos">2062</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-2063"><a href="#Generator.expressions-2063"><span class="linenos">2063</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-2064"><a href="#Generator.expressions-2064"><span class="linenos">2064</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-2065"><a href="#Generator.expressions-2065"><span class="linenos">2065</span></a>
-</span><span id="Generator.expressions-2066"><a href="#Generator.expressions-2066"><span class="linenos">2066</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-2067"><a href="#Generator.expressions-2067"><span class="linenos">2067</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Generator.expressions-2068"><a href="#Generator.expressions-2068"><span class="linenos">2068</span></a>
-</span><span id="Generator.expressions-2069"><a href="#Generator.expressions-2069"><span class="linenos">2069</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator.expressions-2070"><a href="#Generator.expressions-2070"><span class="linenos">2070</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="bp">self</span><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.expressions-2071"><a href="#Generator.expressions-2071"><span class="linenos">2071</span></a>
-</span><span id="Generator.expressions-2072"><a href="#Generator.expressions-2072"><span class="linenos">2072</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-2073"><a href="#Generator.expressions-2073"><span class="linenos">2073</span></a>
-</span><span id="Generator.expressions-2074"><a href="#Generator.expressions-2074"><span class="linenos">2074</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-2075"><a href="#Generator.expressions-2075"><span class="linenos">2075</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-2076"><a href="#Generator.expressions-2076"><span class="linenos">2076</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-2077"><a href="#Generator.expressions-2077"><span class="linenos">2077</span></a>
-</span><span id="Generator.expressions-2078"><a href="#Generator.expressions-2078"><span class="linenos">2078</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Generator.expressions-2079"><a href="#Generator.expressions-2079"><span class="linenos">2079</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-2080"><a href="#Generator.expressions-2080"><span class="linenos">2080</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-2081"><a href="#Generator.expressions-2081"><span class="linenos">2081</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-2082"><a href="#Generator.expressions-2082"><span class="linenos">2082</span></a>
-</span><span id="Generator.expressions-2083"><a href="#Generator.expressions-2083"><span class="linenos">2083</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-2084"><a href="#Generator.expressions-2084"><span class="linenos">2084</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-2085"><a href="#Generator.expressions-2085"><span class="linenos">2085</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-2086"><a href="#Generator.expressions-2086"><span class="linenos">2086</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.expressions-2087"><a href="#Generator.expressions-2087"><span class="linenos">2087</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-2088"><a href="#Generator.expressions-2088"><span class="linenos">2088</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-2089"><a href="#Generator.expressions-2089"><span class="linenos">2089</span></a> <span class="p">)</span>
-</span><span id="Generator.expressions-2090"><a href="#Generator.expressions-2090"><span class="linenos">2090</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.expressions-2091"><a href="#Generator.expressions-2091"><span class="linenos">2091</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-2092"><a href="#Generator.expressions-2092"><span class="linenos">2092</span></a>
-</span><span id="Generator.expressions-2093"><a href="#Generator.expressions-2093"><span class="linenos">2093</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-2094"><a href="#Generator.expressions-2094"><span class="linenos">2094</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="kc">False</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.expressions-2067"><a href="#Generator.expressions-2067"><span class="linenos">2067</span></a> <span class="k">def</span> <span class="nf">expressions</span><span class="p">(</span>
+</span><span id="Generator.expressions-2068"><a href="#Generator.expressions-2068"><span class="linenos">2068</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Generator.expressions-2069"><a href="#Generator.expressions-2069"><span class="linenos">2069</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-2070"><a href="#Generator.expressions-2070"><span class="linenos">2070</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-2071"><a href="#Generator.expressions-2071"><span class="linenos">2071</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">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.expressions-2072"><a href="#Generator.expressions-2072"><span class="linenos">2072</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-2073"><a href="#Generator.expressions-2073"><span class="linenos">2073</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-2074"><a href="#Generator.expressions-2074"><span class="linenos">2074</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-2075"><a href="#Generator.expressions-2075"><span class="linenos">2075</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-2076"><a href="#Generator.expressions-2076"><span class="linenos">2076</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-2077"><a href="#Generator.expressions-2077"><span class="linenos">2077</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-2078"><a href="#Generator.expressions-2078"><span class="linenos">2078</span></a>
+</span><span id="Generator.expressions-2079"><a href="#Generator.expressions-2079"><span class="linenos">2079</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-2080"><a href="#Generator.expressions-2080"><span class="linenos">2080</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Generator.expressions-2081"><a href="#Generator.expressions-2081"><span class="linenos">2081</span></a>
+</span><span id="Generator.expressions-2082"><a href="#Generator.expressions-2082"><span class="linenos">2082</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator.expressions-2083"><a href="#Generator.expressions-2083"><span class="linenos">2083</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="bp">self</span><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.expressions-2084"><a href="#Generator.expressions-2084"><span class="linenos">2084</span></a>
+</span><span id="Generator.expressions-2085"><a href="#Generator.expressions-2085"><span class="linenos">2085</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-2086"><a href="#Generator.expressions-2086"><span class="linenos">2086</span></a>
+</span><span id="Generator.expressions-2087"><a href="#Generator.expressions-2087"><span class="linenos">2087</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-2088"><a href="#Generator.expressions-2088"><span class="linenos">2088</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-2089"><a href="#Generator.expressions-2089"><span class="linenos">2089</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-2090"><a href="#Generator.expressions-2090"><span class="linenos">2090</span></a>
+</span><span id="Generator.expressions-2091"><a href="#Generator.expressions-2091"><span class="linenos">2091</span></a> <span class="n">result_sqls</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Generator.expressions-2092"><a href="#Generator.expressions-2092"><span class="linenos">2092</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-2093"><a href="#Generator.expressions-2093"><span class="linenos">2093</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-2094"><a href="#Generator.expressions-2094"><span class="linenos">2094</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-2095"><a href="#Generator.expressions-2095"><span class="linenos">2095</span></a>
+</span><span id="Generator.expressions-2096"><a href="#Generator.expressions-2096"><span class="linenos">2096</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-2097"><a href="#Generator.expressions-2097"><span class="linenos">2097</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-2098"><a href="#Generator.expressions-2098"><span class="linenos">2098</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-2099"><a href="#Generator.expressions-2099"><span class="linenos">2099</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.expressions-2100"><a href="#Generator.expressions-2100"><span class="linenos">2100</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-2101"><a href="#Generator.expressions-2101"><span class="linenos">2101</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-2102"><a href="#Generator.expressions-2102"><span class="linenos">2102</span></a> <span class="p">)</span>
+</span><span id="Generator.expressions-2103"><a href="#Generator.expressions-2103"><span class="linenos">2103</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.expressions-2104"><a href="#Generator.expressions-2104"><span class="linenos">2104</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-2105"><a href="#Generator.expressions-2105"><span class="linenos">2105</span></a>
+</span><span id="Generator.expressions-2106"><a href="#Generator.expressions-2106"><span class="linenos">2106</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-2107"><a href="#Generator.expressions-2107"><span class="linenos">2107</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="kc">False</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>
@@ -10383,12 +10441,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.op_expressions"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.op_expressions-2096"><a href="#Generator.op_expressions-2096"><span class="linenos">2096</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-2097"><a href="#Generator.op_expressions-2097"><span class="linenos">2097</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-2098"><a href="#Generator.op_expressions-2098"><span class="linenos">2098</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-2099"><a href="#Generator.op_expressions-2099"><span class="linenos">2099</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
-</span><span id="Generator.op_expressions-2100"><a href="#Generator.op_expressions-2100"><span class="linenos">2100</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-2101"><a href="#Generator.op_expressions-2101"><span class="linenos">2101</span></a> <span class="k">return</span> <span class="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-2109"><a href="#Generator.op_expressions-2109"><span class="linenos">2109</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-2110"><a href="#Generator.op_expressions-2110"><span class="linenos">2110</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-2111"><a href="#Generator.op_expressions-2111"><span class="linenos">2111</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-2112"><a href="#Generator.op_expressions-2112"><span class="linenos">2112</span></a> <span class="k">if</span> <span class="n">flat</span><span class="p">:</span>
+</span><span id="Generator.op_expressions-2113"><a href="#Generator.op_expressions-2113"><span class="linenos">2113</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-2114"><a href="#Generator.op_expressions-2114"><span class="linenos">2114</span></a> <span class="k">return</span> <span class="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>
@@ -10406,11 +10464,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.naked_property"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.naked_property-2103"><a href="#Generator.naked_property-2103"><span class="linenos">2103</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-2104"><a href="#Generator.naked_property-2104"><span class="linenos">2104</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-2105"><a href="#Generator.naked_property-2105"><span class="linenos">2105</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-2106"><a href="#Generator.naked_property-2106"><span class="linenos">2106</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-2107"><a href="#Generator.naked_property-2107"><span class="linenos">2107</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-2116"><a href="#Generator.naked_property-2116"><span class="linenos">2116</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-2117"><a href="#Generator.naked_property-2117"><span class="linenos">2117</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-2118"><a href="#Generator.naked_property-2118"><span class="linenos">2118</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-2119"><a href="#Generator.naked_property-2119"><span class="linenos">2119</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-2120"><a href="#Generator.naked_property-2120"><span class="linenos">2120</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>
@@ -10428,12 +10486,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.set_operation"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_operation-2109"><a href="#Generator.set_operation-2109"><span class="linenos">2109</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">Expression</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-2110"><a href="#Generator.set_operation-2110"><span class="linenos">2110</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.set_operation-2111"><a href="#Generator.set_operation-2111"><span class="linenos">2111</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-2112"><a href="#Generator.set_operation-2112"><span class="linenos">2112</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-2113"><a href="#Generator.set_operation-2113"><span class="linenos">2113</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-2114"><a href="#Generator.set_operation-2114"><span class="linenos">2114</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.set_operation-2122"><a href="#Generator.set_operation-2122"><span class="linenos">2122</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">Expression</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-2123"><a href="#Generator.set_operation-2123"><span class="linenos">2123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.set_operation-2124"><a href="#Generator.set_operation-2124"><span class="linenos">2124</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-2125"><a href="#Generator.set_operation-2125"><span class="linenos">2125</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-2126"><a href="#Generator.set_operation-2126"><span class="linenos">2126</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-2127"><a href="#Generator.set_operation-2127"><span class="linenos">2127</span></a> <span class="p">)</span>
</span></pre></div>
@@ -10451,8 +10509,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.tag_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tag_sql-2116"><a href="#Generator.tag_sql-2116"><span class="linenos">2116</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-2117"><a href="#Generator.tag_sql-2117"><span class="linenos">2117</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-2129"><a href="#Generator.tag_sql-2129"><span class="linenos">2129</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-2130"><a href="#Generator.tag_sql-2130"><span class="linenos">2130</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>
@@ -10470,8 +10528,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.token_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.token_sql-2119"><a href="#Generator.token_sql-2119"><span class="linenos">2119</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-2120"><a href="#Generator.token_sql-2120"><span class="linenos">2120</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-2132"><a href="#Generator.token_sql-2132"><span class="linenos">2132</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-2133"><a href="#Generator.token_sql-2133"><span class="linenos">2133</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>
@@ -10489,13 +10547,13 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.userdefinedfunction_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.userdefinedfunction_sql-2122"><a href="#Generator.userdefinedfunction_sql-2122"><span class="linenos">2122</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-2123"><a href="#Generator.userdefinedfunction_sql-2123"><span class="linenos">2123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2124"><a href="#Generator.userdefinedfunction_sql-2124"><span class="linenos">2124</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-2125"><a href="#Generator.userdefinedfunction_sql-2125"><span class="linenos">2125</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Generator.userdefinedfunction_sql-2126"><a href="#Generator.userdefinedfunction_sql-2126"><span class="linenos">2126</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-2127"><a href="#Generator.userdefinedfunction_sql-2127"><span class="linenos">2127</span></a> <span class="p">)</span>
-</span><span id="Generator.userdefinedfunction_sql-2128"><a href="#Generator.userdefinedfunction_sql-2128"><span class="linenos">2128</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-2135"><a href="#Generator.userdefinedfunction_sql-2135"><span class="linenos">2135</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-2136"><a href="#Generator.userdefinedfunction_sql-2136"><span class="linenos">2136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2137"><a href="#Generator.userdefinedfunction_sql-2137"><span class="linenos">2137</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-2138"><a href="#Generator.userdefinedfunction_sql-2138"><span class="linenos">2138</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Generator.userdefinedfunction_sql-2139"><a href="#Generator.userdefinedfunction_sql-2139"><span class="linenos">2139</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-2140"><a href="#Generator.userdefinedfunction_sql-2140"><span class="linenos">2140</span></a> <span class="p">)</span>
+</span><span id="Generator.userdefinedfunction_sql-2141"><a href="#Generator.userdefinedfunction_sql-2141"><span class="linenos">2141</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>
@@ -10513,10 +10571,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.joinhint_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.joinhint_sql-2130"><a href="#Generator.joinhint_sql-2130"><span class="linenos">2130</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-2131"><a href="#Generator.joinhint_sql-2131"><span class="linenos">2131</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2132"><a href="#Generator.joinhint_sql-2132"><span class="linenos">2132</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-2133"><a href="#Generator.joinhint_sql-2133"><span class="linenos">2133</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-2143"><a href="#Generator.joinhint_sql-2143"><span class="linenos">2143</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-2144"><a href="#Generator.joinhint_sql-2144"><span class="linenos">2144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><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-2145"><a href="#Generator.joinhint_sql-2145"><span class="linenos">2145</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-2146"><a href="#Generator.joinhint_sql-2146"><span class="linenos">2146</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>
@@ -10534,8 +10592,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.kwarg_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.kwarg_sql-2135"><a href="#Generator.kwarg_sql-2135"><span class="linenos">2135</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-2136"><a href="#Generator.kwarg_sql-2136"><span class="linenos">2136</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-2148"><a href="#Generator.kwarg_sql-2148"><span class="linenos">2148</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-2149"><a href="#Generator.kwarg_sql-2149"><span class="linenos">2149</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>
@@ -10553,25 +10611,25 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.when_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.when_sql-2138"><a href="#Generator.when_sql-2138"><span class="linenos">2138</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-2139"><a href="#Generator.when_sql-2139"><span class="linenos">2139</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-2140"><a href="#Generator.when_sql-2140"><span class="linenos">2140</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-2141"><a href="#Generator.when_sql-2141"><span class="linenos">2141</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-2142"><a href="#Generator.when_sql-2142"><span class="linenos">2142</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-2143"><a href="#Generator.when_sql-2143"><span class="linenos">2143</span></a>
-</span><span id="Generator.when_sql-2144"><a href="#Generator.when_sql-2144"><span class="linenos">2144</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-2145"><a href="#Generator.when_sql-2145"><span class="linenos">2145</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-2146"><a href="#Generator.when_sql-2146"><span class="linenos">2146</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-2147"><a href="#Generator.when_sql-2147"><span class="linenos">2147</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-2148"><a href="#Generator.when_sql-2148"><span class="linenos">2148</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-2149"><a href="#Generator.when_sql-2149"><span class="linenos">2149</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-2150"><a href="#Generator.when_sql-2150"><span class="linenos">2150</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-2151"><a href="#Generator.when_sql-2151"><span class="linenos">2151</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-2152"><a href="#Generator.when_sql-2152"><span class="linenos">2152</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.when_sql-2153"><a href="#Generator.when_sql-2153"><span class="linenos">2153</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-2154"><a href="#Generator.when_sql-2154"><span class="linenos">2154</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Generator.when_sql-2155"><a href="#Generator.when_sql-2155"><span class="linenos">2155</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-2156"><a href="#Generator.when_sql-2156"><span class="linenos">2156</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-2151"><a href="#Generator.when_sql-2151"><span class="linenos">2151</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-2152"><a href="#Generator.when_sql-2152"><span class="linenos">2152</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-2153"><a href="#Generator.when_sql-2153"><span class="linenos">2153</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-2154"><a href="#Generator.when_sql-2154"><span class="linenos">2154</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-2155"><a href="#Generator.when_sql-2155"><span class="linenos">2155</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-2156"><a href="#Generator.when_sql-2156"><span class="linenos">2156</span></a>
+</span><span id="Generator.when_sql-2157"><a href="#Generator.when_sql-2157"><span class="linenos">2157</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-2158"><a href="#Generator.when_sql-2158"><span class="linenos">2158</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-2159"><a href="#Generator.when_sql-2159"><span class="linenos">2159</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-2160"><a href="#Generator.when_sql-2160"><span class="linenos">2160</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-2161"><a href="#Generator.when_sql-2161"><span class="linenos">2161</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-2162"><a href="#Generator.when_sql-2162"><span class="linenos">2162</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-2163"><a href="#Generator.when_sql-2163"><span class="linenos">2163</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-2164"><a href="#Generator.when_sql-2164"><span class="linenos">2164</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-2165"><a href="#Generator.when_sql-2165"><span class="linenos">2165</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.when_sql-2166"><a href="#Generator.when_sql-2166"><span class="linenos">2166</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-2167"><a href="#Generator.when_sql-2167"><span class="linenos">2167</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Generator.when_sql-2168"><a href="#Generator.when_sql-2168"><span class="linenos">2168</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-2169"><a href="#Generator.when_sql-2169"><span class="linenos">2169</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>
@@ -10589,11 +10647,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.merge_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.merge_sql-2158"><a href="#Generator.merge_sql-2158"><span class="linenos">2158</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-2159"><a href="#Generator.merge_sql-2159"><span class="linenos">2159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="Generator.merge_sql-2160"><a href="#Generator.merge_sql-2160"><span class="linenos">2160</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-2161"><a href="#Generator.merge_sql-2161"><span class="linenos">2161</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-2162"><a href="#Generator.merge_sql-2162"><span class="linenos">2162</span></a> <span class="k">return</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="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="bp">self</span><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="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.merge_sql-2171"><a href="#Generator.merge_sql-2171"><span class="linenos">2171</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-2172"><a href="#Generator.merge_sql-2172"><span class="linenos">2172</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="Generator.merge_sql-2173"><a href="#Generator.merge_sql-2173"><span class="linenos">2173</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-2174"><a href="#Generator.merge_sql-2174"><span class="linenos">2174</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-2175"><a href="#Generator.merge_sql-2175"><span class="linenos">2175</span></a> <span class="k">return</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="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="bp">self</span><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="s1">&#39; &#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span></pre></div>
@@ -10611,11 +10669,11 @@ Default: True</li>
</div>
<a class="headerlink" href="#Generator.tochar_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Generator.tochar_sql-2164"><a href="#Generator.tochar_sql-2164"><span class="linenos">2164</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-2165"><a href="#Generator.tochar_sql-2165"><span class="linenos">2165</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-2166"><a href="#Generator.tochar_sql-2166"><span class="linenos">2166</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-2167"><a href="#Generator.tochar_sql-2167"><span class="linenos">2167</span></a>
-</span><span id="Generator.tochar_sql-2168"><a href="#Generator.tochar_sql-2168"><span class="linenos">2168</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-2177"><a href="#Generator.tochar_sql-2177"><span class="linenos">2177</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-2178"><a href="#Generator.tochar_sql-2178"><span class="linenos">2178</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-2179"><a href="#Generator.tochar_sql-2179"><span class="linenos">2179</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-2180"><a href="#Generator.tochar_sql-2180"><span class="linenos">2180</span></a>
+</span><span id="Generator.tochar_sql-2181"><a href="#Generator.tochar_sql-2181"><span class="linenos">2181</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>
diff --git a/docs/sqlglot/lineage.html b/docs/sqlglot/lineage.html
index 1c375ad..da53907 100644
--- a/docs/sqlglot/lineage.html
+++ b/docs/sqlglot/lineage.html
@@ -441,7 +441,7 @@
<div class="attr function">
<span class="def">def</span>
- <span class="name">lineage</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span>,</span><span class="param"> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</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="n"><a href="schema.html#Schema">sqlglot.schema.Schema</a></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">sources</span><span class="p">:</span> <span class="n">Optional</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="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Subqueryable">sqlglot.expressions.Subqueryable</a></span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">rules</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_tables</span> <span class="n">at</span> <span class="mh">0x7fac3cdc5630</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_columns</span> <span class="n">at</span> <span class="mh">0x7fac3cdc4550</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">expand_laterals</span> <span class="n">at</span> <span class="mh">0x7fac3cd8eb90</span><span class="o">&gt;</span><span class="p">)</span>,</span><span class="param"> <span class="n">dialect</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"><a href="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></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="#Node">sqlglot.lineage.Node</a></span>:</span></span>
+ <span class="name">lineage</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Column">sqlglot.expressions.Column</a></span>,</span><span class="param"> <span class="n">sql</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</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="n"><a href="schema.html#Schema">sqlglot.schema.Schema</a></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">sources</span><span class="p">:</span> <span class="n">Optional</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="nb">str</span> <span class="o">|</span> <span class="n"><a href="expressions.html#Subqueryable">sqlglot.expressions.Subqueryable</a></span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">rules</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_tables</span> <span class="n">at</span> <span class="mh">0x7fc498defd00</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_columns</span> <span class="n">at</span> <span class="mh">0x7fc498deeb90</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">expand_laterals</span> <span class="n">at</span> <span class="mh">0x7fc498deef80</span><span class="o">&gt;</span><span class="p">)</span>,</span><span class="param"> <span class="n">dialect</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"><a href="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></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="#Node">sqlglot.lineage.Node</a></span>:</span></span>
<label class="view-source-button" for="lineage-view-source"><span>View Source</span></label>
diff --git a/docs/sqlglot/optimizer/annotate_types.html b/docs/sqlglot/optimizer/annotate_types.html
index 922e282..786c144 100644
--- a/docs/sqlglot/optimizer/annotate_types.html
+++ b/docs/sqlglot/optimizer/annotate_types.html
@@ -408,7 +408,7 @@
</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">left_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><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="n">right_type</span> <span class="o">=</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><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">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">And</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</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="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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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><span id="L-344"><a href="#L-344"><span class="linenos">344</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>
@@ -417,7 +417,7 @@
</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="k">else</span><span class="p">:</span>
</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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">BOOLEAN</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Condition</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-350"><a href="#L-350"><span class="linenos">350</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-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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">BOOLEAN</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</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">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span>
@@ -864,7 +864,7 @@ Assumes that we've already executed the optimizer's qualify_columns step.</p>
</span><span id="TypeAnnotator-339"><a href="#TypeAnnotator-339"><span class="linenos">339</span></a> <span class="n">left_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><span id="TypeAnnotator-340"><a href="#TypeAnnotator-340"><span class="linenos">340</span></a> <span class="n">right_type</span> <span class="o">=</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><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">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">And</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">)):</span>
+</span><span id="TypeAnnotator-342"><a href="#TypeAnnotator-342"><span class="linenos">342</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-343"><a href="#TypeAnnotator-343"><span class="linenos">343</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-344"><a href="#TypeAnnotator-344"><span class="linenos">344</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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><span id="TypeAnnotator-345"><a href="#TypeAnnotator-345"><span class="linenos">345</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>
@@ -873,7 +873,7 @@ Assumes that we've already executed the optimizer's qualify_columns step.</p>
</span><span id="TypeAnnotator-348"><a href="#TypeAnnotator-348"><span class="linenos">348</span></a> <span class="p">)</span>
</span><span id="TypeAnnotator-349"><a href="#TypeAnnotator-349"><span class="linenos">349</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="TypeAnnotator-350"><a href="#TypeAnnotator-350"><span class="linenos">350</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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">BOOLEAN</span>
-</span><span id="TypeAnnotator-351"><a href="#TypeAnnotator-351"><span class="linenos">351</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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Condition</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-351"><a href="#TypeAnnotator-351"><span class="linenos">351</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-352"><a href="#TypeAnnotator-352"><span class="linenos">352</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">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">BOOLEAN</span>
</span><span id="TypeAnnotator-353"><a href="#TypeAnnotator-353"><span class="linenos">353</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="TypeAnnotator-354"><a href="#TypeAnnotator-354"><span class="linenos">354</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">type</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">left_type</span><span class="p">,</span> <span class="n">right_type</span><span class="p">)</span>
diff --git a/docs/sqlglot/optimizer/eliminate_joins.html b/docs/sqlglot/optimizer/eliminate_joins.html
index 009b5b5..de213e4 100644
--- a/docs/sqlglot/optimizer/eliminate_joins.html
+++ b/docs/sqlglot/optimizer/eliminate_joins.html
@@ -214,7 +214,7 @@
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="c1">#</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="c1"># should pull y.b as the join key and x.a as the source key</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="k">if</span> <span class="n">normalized</span><span class="p">(</span><span class="n">on</span><span class="p">):</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">on</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">on</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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">())</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">on</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">on</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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</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-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">for</span> <span class="n">condition</span> <span class="ow">in</span> <span class="n">on</span><span class="o">.</span><span class="n">flatten</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="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
@@ -372,7 +372,7 @@
</span><span id="join_condition-154"><a href="#join_condition-154"><span class="linenos">154</span></a> <span class="c1">#</span>
</span><span id="join_condition-155"><a href="#join_condition-155"><span class="linenos">155</span></a> <span class="c1"># should pull y.b as the join key and x.a as the source key</span>
</span><span id="join_condition-156"><a href="#join_condition-156"><span class="linenos">156</span></a> <span class="k">if</span> <span class="n">normalized</span><span class="p">(</span><span class="n">on</span><span class="p">):</span>
-</span><span id="join_condition-157"><a href="#join_condition-157"><span class="linenos">157</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">on</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">on</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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">())</span>
+</span><span id="join_condition-157"><a href="#join_condition-157"><span class="linenos">157</span></a> <span class="n">on</span> <span class="o">=</span> <span class="n">on</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">on</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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">on</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</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="join_condition-158"><a href="#join_condition-158"><span class="linenos">158</span></a>
</span><span id="join_condition-159"><a href="#join_condition-159"><span class="linenos">159</span></a> <span class="k">for</span> <span class="n">condition</span> <span class="ow">in</span> <span class="n">on</span><span class="o">.</span><span class="n">flatten</span><span class="p">():</span>
</span><span id="join_condition-160"><a href="#join_condition-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
diff --git a/docs/sqlglot/optimizer/expand_laterals.html b/docs/sqlglot/optimizer/expand_laterals.html
index c03ce41..8fcc1a1 100644
--- a/docs/sqlglot/optimizer/expand_laterals.html
+++ b/docs/sqlglot/optimizer/expand_laterals.html
@@ -87,8 +87,8 @@
</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">projection</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-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">alias_to_expression</span><span class="p">:</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">alias_to_expression</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">alias_to_expression</span><span class="p">[</span><span class="n">projection</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">projection</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">alias_to_expression</span><span class="p">[</span><span class="n">projection</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">projection</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -129,8 +129,8 @@
</span><span id="expand_laterals-30"><a href="#expand_laterals-30"><span class="linenos">30</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">projection</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="expand_laterals-31"><a href="#expand_laterals-31"><span class="linenos">31</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">alias_to_expression</span><span class="p">:</span>
</span><span id="expand_laterals-32"><a href="#expand_laterals-32"><span class="linenos">32</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">alias_to_expression</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="expand_laterals-33"><a href="#expand_laterals-33"><span class="linenos">33</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="expand_laterals-34"><a href="#expand_laterals-34"><span class="linenos">34</span></a> <span class="n">alias_to_expression</span><span class="p">[</span><span class="n">projection</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">projection</span><span class="o">.</span><span class="n">this</span>
+</span><span id="expand_laterals-33"><a href="#expand_laterals-33"><span class="linenos">33</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">projection</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="expand_laterals-34"><a href="#expand_laterals-34"><span class="linenos">34</span></a> <span class="n">alias_to_expression</span><span class="p">[</span><span class="n">projection</span><span class="o">.</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">projection</span><span class="o">.</span><span class="n">this</span>
</span><span id="expand_laterals-35"><a href="#expand_laterals-35"><span class="linenos">35</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/normalize.html b/docs/sqlglot/optimizer/normalize.html
index 2bbdd82..c83a040 100644
--- a/docs/sqlglot/optimizer/normalize.html
+++ b/docs/sqlglot/optimizer/normalize.html
@@ -219,15 +219,17 @@
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">lambda</span> <span class="n">c</span><span class="p">:</span> <span class="n">to_func</span><span class="p">(</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">left</span><span class="p">)),</span> <span class="n">cache</span><span class="p">),</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">right</span><span class="p">)),</span> <span class="n">cache</span><span class="p">),</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="p">),</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="p">)</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">to_func</span><span class="p">(</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">left</span><span class="p">)),</span> <span class="n">cache</span><span class="p">),</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">right</span><span class="p">)),</span> <span class="n">cache</span><span class="p">),</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="p">)</span>
-</span><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">a</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">copy</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="p">),</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="p">)</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">to_func</span><span class="p">(</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">left</span><span class="p">)),</span> <span class="n">cache</span><span class="p">),</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">uniq_sort</span><span class="p">(</span><span class="n">flatten</span><span class="p">(</span><span class="n">from_func</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">right</span><span class="p">)),</span> <span class="n">cache</span><span class="p">),</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="p">)</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="n">a</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/optimizer.html b/docs/sqlglot/optimizer/optimizer.html
index 030b85b..378281d 100644
--- a/docs/sqlglot/optimizer/optimizer.html
+++ b/docs/sqlglot/optimizer/optimizer.html
@@ -68,87 +68,85 @@
</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.eliminate_ctes</span> <span class="kn">import</span> <span class="n">eliminate_ctes</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.optimizer.eliminate_joins</span> <span class="kn">import</span> <span class="n">eliminate_joins</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.optimizer.eliminate_subqueries</span> <span class="kn">import</span> <span class="n">eliminate_subqueries</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.expand_laterals</span> <span class="kn">import</span> <span class="n">expand_laterals</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.expand_multi_table_selects</span> <span class="kn">import</span> <span class="n">expand_multi_table_selects</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.optimizer.isolate_table_selects</span> <span class="kn">import</span> <span class="n">isolate_table_selects</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.optimizer.lower_identities</span> <span class="kn">import</span> <span class="n">lower_identities</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.optimizer.merge_subqueries</span> <span class="kn">import</span> <span class="n">merge_subqueries</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.optimizer.normalize</span> <span class="kn">import</span> <span class="n">normalize</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.optimizer.optimize_joins</span> <span class="kn">import</span> <span class="n">optimize_joins</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.optimizer.pushdown_predicates</span> <span class="kn">import</span> <span class="n">pushdown_predicates</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.optimizer.pushdown_projections</span> <span class="kn">import</span> <span class="n">pushdown_projections</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.optimizer.qualify_columns</span> <span class="kn">import</span> <span class="n">qualify_columns</span><span class="p">,</span> <span class="n">validate_qualify_columns</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.qualify_tables</span> <span class="kn">import</span> <span class="n">qualify_tables</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos">24</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-25"><a href="#L-25"><span class="linenos">25</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.unnest_subqueries</span> <span class="kn">import</span> <span class="n">unnest_subqueries</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a><span class="kn">from</span> <span class="nn">sqlglot.schema</span> <span class="kn">import</span> <span class="n">ensure_schema</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 class="n">RULES</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">lower_identities</span><span class="p">,</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">qualify_tables</span><span class="p">,</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">isolate_table_selects</span><span class="p">,</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">qualify_columns</span><span class="p">,</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">expand_laterals</span><span class="p">,</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">pushdown_projections</span><span class="p">,</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">validate_qualify_columns</span><span class="p">,</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">normalize</span><span class="p">,</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">unnest_subqueries</span><span class="p">,</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">expand_multi_table_selects</span><span class="p">,</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">pushdown_predicates</span><span class="p">,</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="n">optimize_joins</span><span class="p">,</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="n">eliminate_subqueries</span><span class="p">,</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="n">merge_subqueries</span><span class="p">,</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="n">eliminate_joins</span><span class="p">,</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="n">eliminate_ctes</span><span class="p">,</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">annotate_types</span><span class="p">,</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a> <span class="n">canonicalize</span><span class="p">,</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a> <span class="n">simplify</span><span class="p">,</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a><span class="p">)</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a>
-</span><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="k">def</span> <span class="nf">optimize</span><span class="p">(</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a> <span class="n">expression</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-53"><a href="#L-53"><span class="linenos">53</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="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a> <span class="n">db</span><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-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="n">catalog</span><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-56"><a href="#L-56"><span class="linenos">56</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-57"><a href="#L-57"><span class="linenos">57</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</span><span class="p">,</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a> <span class="o">**</span><span class="n">kwargs</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 class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos">61</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</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="sd"> Args:</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a><span class="sd"> expression: expression to optimize</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a><span class="sd"> schema: database schema.</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a><span class="sd"> the following forms:</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a><span class="sd"> 1. {table: {col: type}}</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a><span class="sd"> Do not remove qualify_tables or qualify_columns from the sequence of rules unless you know</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a><span class="sd"> what you&#39;re doing!</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos">79</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos">80</span></a><span class="sd"> Returns:</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a><span class="sd"> sqlglot.Expression: optimized expression</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos">82</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos">83</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span> <span class="ow">or</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</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-84"><a href="#L-84"><span class="linenos">84</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</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-85"><a href="#L-85"><span class="linenos">85</span></a> <span class="n">expression</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">expression</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="kc">True</span><span class="p">)</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos">86</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos">87</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos">88</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">rule</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos">89</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos">90</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos">91</span></a> <span class="p">}</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos">92</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</span><span class="p">)</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos">93</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.expand_multi_table_selects</span> <span class="kn">import</span> <span class="n">expand_multi_table_selects</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.isolate_table_selects</span> <span class="kn">import</span> <span class="n">isolate_table_selects</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.optimizer.lower_identities</span> <span class="kn">import</span> <span class="n">lower_identities</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.optimizer.merge_subqueries</span> <span class="kn">import</span> <span class="n">merge_subqueries</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.optimizer.normalize</span> <span class="kn">import</span> <span class="n">normalize</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.optimizer.optimize_joins</span> <span class="kn">import</span> <span class="n">optimize_joins</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.optimizer.pushdown_predicates</span> <span class="kn">import</span> <span class="n">pushdown_predicates</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.optimizer.pushdown_projections</span> <span class="kn">import</span> <span class="n">pushdown_projections</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.optimizer.qualify_columns</span> <span class="kn">import</span> <span class="n">qualify_columns</span><span class="p">,</span> <span class="n">validate_qualify_columns</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.optimizer.qualify_tables</span> <span class="kn">import</span> <span class="n">qualify_tables</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos">23</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-24"><a href="#L-24"><span class="linenos">24</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.unnest_subqueries</span> <span class="kn">import</span> <span class="n">unnest_subqueries</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a><span class="kn">from</span> <span class="nn">sqlglot.schema</span> <span class="kn">import</span> <span class="n">ensure_schema</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a>
+</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a><span class="n">RULES</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">lower_identities</span><span class="p">,</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">qualify_tables</span><span class="p">,</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">isolate_table_selects</span><span class="p">,</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">qualify_columns</span><span class="p">,</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">pushdown_projections</span><span class="p">,</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="n">validate_qualify_columns</span><span class="p">,</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="n">normalize</span><span class="p">,</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">unnest_subqueries</span><span class="p">,</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">expand_multi_table_selects</span><span class="p">,</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="n">pushdown_predicates</span><span class="p">,</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="n">optimize_joins</span><span class="p">,</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="n">eliminate_subqueries</span><span class="p">,</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="n">merge_subqueries</span><span class="p">,</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="n">eliminate_joins</span><span class="p">,</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="n">eliminate_ctes</span><span class="p">,</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="n">annotate_types</span><span class="p">,</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a> <span class="n">canonicalize</span><span class="p">,</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a> <span class="n">simplify</span><span class="p">,</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a><span class="p">)</span>
+</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><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a><span class="k">def</span> <span class="nf">optimize</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="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-51"><a href="#L-51"><span class="linenos">51</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="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a> <span class="n">db</span><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-53"><a href="#L-53"><span class="linenos">53</span></a> <span class="n">catalog</span><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-54"><a href="#L-54"><span class="linenos">54</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-55"><a href="#L-55"><span class="linenos">55</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</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">kwargs</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="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</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="sd"> Args:</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos">62</span></a><span class="sd"> expression: expression to optimize</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos">63</span></a><span class="sd"> schema: database schema.</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos">64</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos">65</span></a><span class="sd"> the following forms:</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos">66</span></a><span class="sd"> 1. {table: {col: type}}</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos">67</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos">68</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos">69</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos">70</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos">71</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos">72</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos">73</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos">74</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos">75</span></a><span class="sd"> Do not remove qualify_tables or qualify_columns from the sequence of rules unless you know</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos">76</span></a><span class="sd"> what you&#39;re doing!</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos">77</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos">78</span></a><span class="sd"> Returns:</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos">79</span></a><span class="sd"> sqlglot.Expression: optimized expression</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos">80</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos">81</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span> <span class="ow">or</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</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-82"><a href="#L-82"><span class="linenos">82</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</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-83"><a href="#L-83"><span class="linenos">83</span></a> <span class="n">expression</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">expression</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="kc">True</span><span class="p">)</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos">84</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos">85</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos">86</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">rule</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos">87</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos">88</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</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 class="n">expression</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</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="n">expression</span>
</span></pre></div>
@@ -158,55 +156,55 @@
<div class="attr function">
<span class="def">def</span>
- <span class="name">optimize</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</a></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">db</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">catalog</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">dialect</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"><a href="../dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></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">rules</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="o">&lt;</span><span class="n">function</span> <span class="n">lower_identities</span> <span class="n">at</span> <span class="mh">0x7fac3cd8eef0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_tables</span> <span class="n">at</span> <span class="mh">0x7fac3cdc5630</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">isolate_table_selects</span> <span class="n">at</span> <span class="mh">0x7fac3cd8edd0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_columns</span> <span class="n">at</span> <span class="mh">0x7fac3cdc4550</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">expand_laterals</span> <span class="n">at</span> <span class="mh">0x7fac3cd8eb90</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">pushdown_projections</span> <span class="n">at</span> <span class="mh">0x7fac3cdc5000</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">validate_qualify_columns</span> <span class="n">at</span> <span class="mh">0x7fac3cdc45e0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">normalize</span> <span class="n">at</span> <span class="mh">0x7fac3cd8c9d0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">unnest_subqueries</span> <span class="n">at</span> <span class="mh">0x7fac3cdc5750</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">expand_multi_table_selects</span> <span class="n">at</span> <span class="mh">0x7fac3cd8ed40</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">pushdown_predicates</span> <span class="n">at</span> <span class="mh">0x7fac3cdc40d0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">optimize_joins</span> <span class="n">at</span> <span class="mh">0x7fac3cd8fc70</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">eliminate_subqueries</span> <span class="n">at</span> <span class="mh">0x7fac3cd8e7a0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">merge_subqueries</span> <span class="n">at</span> <span class="mh">0x7fac3cd8f1c0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">eliminate_joins</span> <span class="n">at</span> <span class="mh">0x7fac3cd8c8b0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">eliminate_ctes</span> <span class="n">at</span> <span class="mh">0x7fac3cd8c790</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">annotate_types</span> <span class="n">at</span> <span class="mh">0x7fac3cd5cdc0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">canonicalize</span> <span class="n">at</span> <span class="mh">0x7fac3cd8c1f0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">simplify</span> <span class="n">at</span> <span class="mh">0x7fac3cd8caf0</span><span class="o">&gt;</span><span class="p">)</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">):</span></span>
+ <span class="name">optimize</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n"><a href="../expressions.html#Expression">sqlglot.expressions.Expression</a></span>,</span><span class="param"> <span class="n">schema</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n"><a href="../schema.html#Schema">sqlglot.schema.Schema</a></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">db</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">catalog</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">dialect</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"><a href="../dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="../dialects/dialect.html#Dialect">sqlglot.dialects.dialect.Dialect</a></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">rules</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="o">&lt;</span><span class="n">function</span> <span class="n">lower_identities</span> <span class="n">at</span> <span class="mh">0x7fc498ded5a0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_tables</span> <span class="n">at</span> <span class="mh">0x7fc498defd00</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">isolate_table_selects</span> <span class="n">at</span> <span class="mh">0x7fc498ded480</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">qualify_columns</span> <span class="n">at</span> <span class="mh">0x7fc498deeb90</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">pushdown_projections</span> <span class="n">at</span> <span class="mh">0x7fc498def6d0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">validate_qualify_columns</span> <span class="n">at</span> <span class="mh">0x7fc498def010</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">normalize</span> <span class="n">at</span> <span class="mh">0x7fc498dc71c0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">unnest_subqueries</span> <span class="n">at</span> <span class="mh">0x7fc498defe20</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">expand_multi_table_selects</span> <span class="n">at</span> <span class="mh">0x7fc498ded3f0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">pushdown_predicates</span> <span class="n">at</span> <span class="mh">0x7fc498dee710</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">optimize_joins</span> <span class="n">at</span> <span class="mh">0x7fc498dee320</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">eliminate_subqueries</span> <span class="n">at</span> <span class="mh">0x7fc498ded000</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">merge_subqueries</span> <span class="n">at</span> <span class="mh">0x7fc498ded870</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">eliminate_joins</span> <span class="n">at</span> <span class="mh">0x7fc498dc6f80</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">eliminate_ctes</span> <span class="n">at</span> <span class="mh">0x7fc498dc6e60</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">annotate_types</span> <span class="n">at</span> <span class="mh">0x7fc498d935b0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">canonicalize</span> <span class="n">at</span> <span class="mh">0x7fc498dc68c0</span><span class="o">&gt;</span><span class="p">,</span> <span class="o">&lt;</span><span class="n">function</span> <span class="n">simplify</span> <span class="n">at</span> <span class="mh">0x7fc498dc7370</span><span class="o">&gt;</span><span class="p">)</span>,</span><span class="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="optimize-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#optimize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="optimize-52"><a href="#optimize-52"><span class="linenos">52</span></a><span class="k">def</span> <span class="nf">optimize</span><span class="p">(</span>
-</span><span id="optimize-53"><a href="#optimize-53"><span class="linenos">53</span></a> <span class="n">expression</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="optimize-54"><a href="#optimize-54"><span class="linenos">54</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="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="optimize-55"><a href="#optimize-55"><span class="linenos">55</span></a> <span class="n">db</span><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="optimize-56"><a href="#optimize-56"><span class="linenos">56</span></a> <span class="n">catalog</span><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="optimize-57"><a href="#optimize-57"><span class="linenos">57</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="optimize-58"><a href="#optimize-58"><span class="linenos">58</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</span><span class="p">,</span>
-</span><span id="optimize-59"><a href="#optimize-59"><span class="linenos">59</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
-</span><span id="optimize-60"><a href="#optimize-60"><span class="linenos">60</span></a><span class="p">):</span>
-</span><span id="optimize-61"><a href="#optimize-61"><span class="linenos">61</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="optimize-62"><a href="#optimize-62"><span class="linenos">62</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</span>
-</span><span id="optimize-63"><a href="#optimize-63"><span class="linenos">63</span></a>
-</span><span id="optimize-64"><a href="#optimize-64"><span class="linenos">64</span></a><span class="sd"> Args:</span>
-</span><span id="optimize-65"><a href="#optimize-65"><span class="linenos">65</span></a><span class="sd"> expression: expression to optimize</span>
-</span><span id="optimize-66"><a href="#optimize-66"><span class="linenos">66</span></a><span class="sd"> schema: database schema.</span>
-</span><span id="optimize-67"><a href="#optimize-67"><span class="linenos">67</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
-</span><span id="optimize-68"><a href="#optimize-68"><span class="linenos">68</span></a><span class="sd"> the following forms:</span>
-</span><span id="optimize-69"><a href="#optimize-69"><span class="linenos">69</span></a><span class="sd"> 1. {table: {col: type}}</span>
-</span><span id="optimize-70"><a href="#optimize-70"><span class="linenos">70</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
-</span><span id="optimize-71"><a href="#optimize-71"><span class="linenos">71</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
-</span><span id="optimize-72"><a href="#optimize-72"><span class="linenos">72</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
-</span><span id="optimize-73"><a href="#optimize-73"><span class="linenos">73</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
-</span><span id="optimize-74"><a href="#optimize-74"><span class="linenos">74</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
-</span><span id="optimize-75"><a href="#optimize-75"><span class="linenos">75</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
-</span><span id="optimize-76"><a href="#optimize-76"><span class="linenos">76</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
-</span><span id="optimize-77"><a href="#optimize-77"><span class="linenos">77</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
-</span><span id="optimize-78"><a href="#optimize-78"><span class="linenos">78</span></a><span class="sd"> Do not remove qualify_tables or qualify_columns from the sequence of rules unless you know</span>
-</span><span id="optimize-79"><a href="#optimize-79"><span class="linenos">79</span></a><span class="sd"> what you&#39;re doing!</span>
-</span><span id="optimize-80"><a href="#optimize-80"><span class="linenos">80</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
-</span><span id="optimize-81"><a href="#optimize-81"><span class="linenos">81</span></a><span class="sd"> Returns:</span>
-</span><span id="optimize-82"><a href="#optimize-82"><span class="linenos">82</span></a><span class="sd"> sqlglot.Expression: optimized expression</span>
-</span><span id="optimize-83"><a href="#optimize-83"><span class="linenos">83</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="optimize-84"><a href="#optimize-84"><span class="linenos">84</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span> <span class="ow">or</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</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="optimize-85"><a href="#optimize-85"><span class="linenos">85</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</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="optimize-86"><a href="#optimize-86"><span class="linenos">86</span></a> <span class="n">expression</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">expression</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="kc">True</span><span class="p">)</span>
-</span><span id="optimize-87"><a href="#optimize-87"><span class="linenos">87</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
-</span><span id="optimize-88"><a href="#optimize-88"><span class="linenos">88</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
-</span><span id="optimize-89"><a href="#optimize-89"><span class="linenos">89</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">rule</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span>
-</span><span id="optimize-90"><a href="#optimize-90"><span class="linenos">90</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="optimize-91"><a href="#optimize-91"><span class="linenos">91</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</span>
-</span><span id="optimize-92"><a href="#optimize-92"><span class="linenos">92</span></a> <span class="p">}</span>
-</span><span id="optimize-93"><a href="#optimize-93"><span class="linenos">93</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</span><span class="p">)</span>
-</span><span id="optimize-94"><a href="#optimize-94"><span class="linenos">94</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="optimize-50"><a href="#optimize-50"><span class="linenos">50</span></a><span class="k">def</span> <span class="nf">optimize</span><span class="p">(</span>
+</span><span id="optimize-51"><a href="#optimize-51"><span class="linenos">51</span></a> <span class="n">expression</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="optimize-52"><a href="#optimize-52"><span class="linenos">52</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="nb">dict</span> <span class="o">|</span> <span class="n">Schema</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="optimize-53"><a href="#optimize-53"><span class="linenos">53</span></a> <span class="n">db</span><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="optimize-54"><a href="#optimize-54"><span class="linenos">54</span></a> <span class="n">catalog</span><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="optimize-55"><a href="#optimize-55"><span class="linenos">55</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="optimize-56"><a href="#optimize-56"><span class="linenos">56</span></a> <span class="n">rules</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="n">RULES</span><span class="p">,</span>
+</span><span id="optimize-57"><a href="#optimize-57"><span class="linenos">57</span></a> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
+</span><span id="optimize-58"><a href="#optimize-58"><span class="linenos">58</span></a><span class="p">):</span>
+</span><span id="optimize-59"><a href="#optimize-59"><span class="linenos">59</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="optimize-60"><a href="#optimize-60"><span class="linenos">60</span></a><span class="sd"> Rewrite a sqlglot AST into an optimized form.</span>
+</span><span id="optimize-61"><a href="#optimize-61"><span class="linenos">61</span></a>
+</span><span id="optimize-62"><a href="#optimize-62"><span class="linenos">62</span></a><span class="sd"> Args:</span>
+</span><span id="optimize-63"><a href="#optimize-63"><span class="linenos">63</span></a><span class="sd"> expression: expression to optimize</span>
+</span><span id="optimize-64"><a href="#optimize-64"><span class="linenos">64</span></a><span class="sd"> schema: database schema.</span>
+</span><span id="optimize-65"><a href="#optimize-65"><span class="linenos">65</span></a><span class="sd"> This can either be an instance of `sqlglot.optimizer.Schema` or a mapping in one of</span>
+</span><span id="optimize-66"><a href="#optimize-66"><span class="linenos">66</span></a><span class="sd"> the following forms:</span>
+</span><span id="optimize-67"><a href="#optimize-67"><span class="linenos">67</span></a><span class="sd"> 1. {table: {col: type}}</span>
+</span><span id="optimize-68"><a href="#optimize-68"><span class="linenos">68</span></a><span class="sd"> 2. {db: {table: {col: type}}}</span>
+</span><span id="optimize-69"><a href="#optimize-69"><span class="linenos">69</span></a><span class="sd"> 3. {catalog: {db: {table: {col: type}}}}</span>
+</span><span id="optimize-70"><a href="#optimize-70"><span class="linenos">70</span></a><span class="sd"> If no schema is provided then the default schema defined at `sqlgot.schema` will be used</span>
+</span><span id="optimize-71"><a href="#optimize-71"><span class="linenos">71</span></a><span class="sd"> db: specify the default database, as might be set by a `USE DATABASE db` statement</span>
+</span><span id="optimize-72"><a href="#optimize-72"><span class="linenos">72</span></a><span class="sd"> catalog: specify the default catalog, as might be set by a `USE CATALOG c` statement</span>
+</span><span id="optimize-73"><a href="#optimize-73"><span class="linenos">73</span></a><span class="sd"> dialect: The dialect to parse the sql string.</span>
+</span><span id="optimize-74"><a href="#optimize-74"><span class="linenos">74</span></a><span class="sd"> rules: sequence of optimizer rules to use.</span>
+</span><span id="optimize-75"><a href="#optimize-75"><span class="linenos">75</span></a><span class="sd"> Many of the rules require tables and columns to be qualified.</span>
+</span><span id="optimize-76"><a href="#optimize-76"><span class="linenos">76</span></a><span class="sd"> Do not remove qualify_tables or qualify_columns from the sequence of rules unless you know</span>
+</span><span id="optimize-77"><a href="#optimize-77"><span class="linenos">77</span></a><span class="sd"> what you&#39;re doing!</span>
+</span><span id="optimize-78"><a href="#optimize-78"><span class="linenos">78</span></a><span class="sd"> **kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.</span>
+</span><span id="optimize-79"><a href="#optimize-79"><span class="linenos">79</span></a><span class="sd"> Returns:</span>
+</span><span id="optimize-80"><a href="#optimize-80"><span class="linenos">80</span></a><span class="sd"> sqlglot.Expression: optimized expression</span>
+</span><span id="optimize-81"><a href="#optimize-81"><span class="linenos">81</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="optimize-82"><a href="#optimize-82"><span class="linenos">82</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span> <span class="ow">or</span> <span class="n">sqlglot</span><span class="o">.</span><span class="n">schema</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="optimize-83"><a href="#optimize-83"><span class="linenos">83</span></a> <span class="n">possible_kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="n">db</span><span class="p">,</span> <span class="s2">&quot;catalog&quot;</span><span class="p">:</span> <span class="n">catalog</span><span class="p">,</span> <span class="s2">&quot;schema&quot;</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="optimize-84"><a href="#optimize-84"><span class="linenos">84</span></a> <span class="n">expression</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">expression</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="kc">True</span><span class="p">)</span>
+</span><span id="optimize-85"><a href="#optimize-85"><span class="linenos">85</span></a> <span class="k">for</span> <span class="n">rule</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
+</span><span id="optimize-86"><a href="#optimize-86"><span class="linenos">86</span></a> <span class="c1"># Find any additional rule parameters, beyond `expression`</span>
+</span><span id="optimize-87"><a href="#optimize-87"><span class="linenos">87</span></a> <span class="n">rule_params</span> <span class="o">=</span> <span class="n">rule</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span>
+</span><span id="optimize-88"><a href="#optimize-88"><span class="linenos">88</span></a> <span class="n">rule_kwargs</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="optimize-89"><a href="#optimize-89"><span class="linenos">89</span></a> <span class="n">param</span><span class="p">:</span> <span class="n">possible_kwargs</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">rule_params</span> <span class="k">if</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">possible_kwargs</span>
+</span><span id="optimize-90"><a href="#optimize-90"><span class="linenos">90</span></a> <span class="p">}</span>
+</span><span id="optimize-91"><a href="#optimize-91"><span class="linenos">91</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">rule</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="o">**</span><span class="n">rule_kwargs</span><span class="p">)</span>
+</span><span id="optimize-92"><a href="#optimize-92"><span class="linenos">92</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/qualify_columns.html b/docs/sqlglot/optimizer/qualify_columns.html
index 7b30b8d..2d257f2 100644
--- a/docs/sqlglot/optimizer/qualify_columns.html
+++ b/docs/sqlglot/optimizer/qualify_columns.html
@@ -82,525 +82,534 @@
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">from</span> <span class="nn">sqlglot</span> <span class="kn">import</span> <span class="n">alias</span><span class="p">,</span> <span class="n">exp</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span> <span class="nn">sqlglot.errors</span> <span class="kn">import</span> <span class="n">OptimizeError</span>
-</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">Scope</span><span class="p">,</span> <span class="n">traverse_scope</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.schema</span> <span class="kn">import</span> <span class="n">ensure_schema</span>
-</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.expand_laterals</span> <span class="kn">import</span> <span class="n">expand_laterals</span> <span class="k">as</span> <span class="n">_expand_laterals</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">Scope</span><span class="p">,</span> <span class="n">traverse_scope</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">from</span> <span class="nn">sqlglot.schema</span> <span class="kn">import</span> <span class="n">ensure_schema</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="k">def</span> <span class="nf">qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="sd"> Rewrite sqlglot AST to have fully qualified columns.</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="sd"> Example:</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="sd"> &gt;&gt;&gt; schema = {&quot;tbl&quot;: {&quot;col&quot;: &quot;INT&quot;}}</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT col FROM tbl&quot;)</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="sd"> &gt;&gt;&gt; qualify_columns(expression, schema).sql()</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="sd"> &#39;SELECT tbl.col AS col FROM tbl&#39;</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="sd"> Args:</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="sd"> expression (sqlglot.Expression): expression to qualify</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="sd"> schema (dict|sqlglot.optimizer.Schema): Database schema</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="sd"> Returns:</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="sd"> sqlglot.Expression: qualified expression</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="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-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">resolver</span> <span class="o">=</span> <span class="n">Resolver</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">derived_tables</span><span class="p">)</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">using_column_tables</span> <span class="o">=</span> <span class="n">_expand_using</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">_qualify_columns</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span 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-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">_expand_stars</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">,</span> <span class="n">using_column_tables</span><span class="p">)</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">_qualify_outputs</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">_expand_alias_refs</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="n">_expand_group_by</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">_expand_order_by</span><span class="p">(</span><span class="n">scope</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">expression</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><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="k">def</span> <span class="nf">validate_qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Raise an `OptimizeError` if any columns aren&#39;t qualified&quot;&quot;&quot;</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">unqualified_columns</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</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-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">scope</span><span class="o">.</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><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">unqualified_columns</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">unqualified_columns</span><span class="p">)</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_correlated_subquery</span><span class="p">:</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: &#39;</span><span class="si">{</span><span class="n">column</span><span class="o">.</span><span class="n">table</span><span class="si">}</span><span class="s2">&#39; for column &#39;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">&#39;&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="k">if</span> <span class="n">unqualified_columns</span><span class="p">:</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous columns: </span><span class="si">{</span><span class="n">unqualified_columns</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="k">def</span> <span class="nf">_pop_table_column_aliases</span><span class="p">(</span><span class="n">derived_tables</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;</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="sd"> Remove table column aliases.</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="sd"> (e.g. SELECT ... FROM (SELECT ...) AS foo(col1, col2)</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">for</span> <span class="n">derived_table</span> <span class="ow">in</span> <span class="n">derived_tables</span><span class="p">:</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">derived_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;alias&quot;</span><span class="p">)</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">if</span> <span class="n">table_alias</span><span class="p">:</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">table_alias</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;columns&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="k">def</span> <span class="nf">qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="n">expand_laterals</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="sd"> Rewrite sqlglot AST to have fully qualified columns.</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="sd"> Example:</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="sd"> &gt;&gt;&gt; schema = {&quot;tbl&quot;: {&quot;col&quot;: &quot;INT&quot;}}</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT col FROM tbl&quot;)</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="sd"> &gt;&gt;&gt; qualify_columns(expression, schema).sql()</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="sd"> &#39;SELECT tbl.col AS col FROM tbl&#39;</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="sd"> Args:</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="sd"> expression (sqlglot.Expression): expression to qualify</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="sd"> schema (dict|sqlglot.optimizer.Schema): Database schema</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="sd"> Returns:</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="sd"> sqlglot.Expression: qualified expression</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</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">if</span> <span class="ow">not</span> <span class="n">schema</span><span class="o">.</span><span class="n">mapping</span> <span class="ow">and</span> <span class="n">expand_laterals</span><span class="p">:</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">_expand_laterals</span><span class="p">(</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><span id="L-33"><a href="#L-33"><span class="linenos"> 33</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-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">resolver</span> <span class="o">=</span> <span class="n">Resolver</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">derived_tables</span><span class="p">)</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">using_column_tables</span> <span class="o">=</span> <span class="n">_expand_using</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">_qualify_columns</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</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="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span 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-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">_expand_stars</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">,</span> <span class="n">using_column_tables</span><span class="p">)</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">_qualify_outputs</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">_expand_alias_refs</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="n">_expand_group_by</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">_expand_order_by</span><span class="p">(</span><span class="n">scope</span><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">if</span> <span class="n">schema</span><span class="o">.</span><span class="n">mapping</span> <span class="ow">and</span> <span class="n">expand_laterals</span><span class="p">:</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">_expand_laterals</span><span class="p">(</span><span class="n">expression</span><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">return</span> <span class="n">expression</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><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="k">def</span> <span class="nf">validate_qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Raise an `OptimizeError` if any columns aren&#39;t qualified&quot;&quot;&quot;</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="n">unqualified_columns</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="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-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</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><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">unqualified_columns</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">unqualified_columns</span><span class="p">)</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_correlated_subquery</span><span class="p">:</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: &#39;</span><span class="si">{</span><span class="n">column</span><span class="o">.</span><span class="n">table</span><span class="si">}</span><span class="s2">&#39; for column &#39;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="k">if</span> <span class="n">unqualified_columns</span><span class="p">:</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous columns: </span><span class="si">{</span><span class="n">unqualified_columns</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a><span class="k">def</span> <span class="nf">_pop_table_column_aliases</span><span class="p">(</span><span class="n">derived_tables</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;</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="sd"> Remove table column aliases.</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><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="k">def</span> <span class="nf">_expand_using</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">scope</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">Join</span><span class="p">))</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">{</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">}</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">ordered</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</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="c1"># Mapping of automatically joined column names to an ordered set of source names (dict).</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">column_tables</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">:</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">using</span> <span class="o">=</span> <span class="n">join</span><span class="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-82"><a href="#L-82"><span class="linenos"> 82</span></a>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">continue</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="n">join_table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="sd"> (e.g. SELECT ... FROM (SELECT ...) AS foo(col1, col2)</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">for</span> <span class="n">derived_table</span> <span class="ow">in</span> <span class="n">derived_tables</span><span class="p">:</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">derived_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;alias&quot;</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="n">table_alias</span><span class="p">:</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">table_alias</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;columns&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="k">def</span> <span class="nf">_expand_using</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">scope</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">Join</span><span class="p">))</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">names</span> <span class="o">=</span> <span class="p">{</span><span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">}</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">ordered</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">names</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="c1"># Mapping of automatically joined column names to an ordered set of source names (dict).</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">column_tables</span> <span class="o">=</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="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="n">joins</span><span class="p">:</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">using</span> <span class="o">=</span> <span class="n">join</span><span class="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-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">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">:</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">ordered</span><span class="p">:</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">columns</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</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">source_table</span> <span class="o">=</span> <span class="n">ordered</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">ordered</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">join_table</span><span class="p">)</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">join_table</span><span class="p">)</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">conditions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">for</span> <span class="n">identifier</span> <span class="ow">in</span> <span class="n">using</span><span class="p">:</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">identifier</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="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">or</span> <span class="n">identifier</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">join_columns</span><span class="p">:</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="n">join_columns</span><span class="p">:</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot automatically join: </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</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">table</span> <span class="o">=</span> <span class="n">table</span> <span class="ow">or</span> <span class="n">source_table</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">conditions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <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="n">identifier</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">),</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">expression</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="n">identifier</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">join_table</span><span class="p">),</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <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="p">)</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="c1"># Set all values in the dict to None, because we only care about the key ordering</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">column_tables</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="p">{})</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="n">join_table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">tables</span><span class="p">[</span><span class="n">join_table</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">continue</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="n">join_table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">alias_or_name</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">columns</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><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">:</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">ordered</span><span class="p">:</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">columns</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</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="n">source_table</span> <span class="o">=</span> <span class="n">ordered</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">ordered</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">join_table</span><span class="p">)</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="n">join_columns</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">join_table</span><span class="p">)</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">conditions</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><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">for</span> <span class="n">identifier</span> <span class="ow">in</span> <span class="n">using</span><span class="p">:</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">identifier</span><span class="p">)</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">or</span> <span class="n">identifier</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">join_columns</span><span class="p">:</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="n">join_columns</span><span class="p">:</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot automatically join: </span><span class="si">{</span><span class="n">identifier</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">table</span> <span class="ow">or</span> <span class="n">source_table</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="n">conditions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <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="n">identifier</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">),</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="n">expression</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="n">identifier</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">join_table</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><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><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <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;using&quot;</span><span class="p">)</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</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">*</span><span class="n">conditions</span><span class="p">))</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="n">column_tables</span><span class="p">:</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">for</span> <span class="n">column</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-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">column_tables</span><span class="p">:</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">column_tables</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">coalesce</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">column</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">)</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">]</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">replacement</span> <span class="o">=</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">coalesce</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">expressions</span><span class="o">=</span><span class="n">coalesce</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="c1"># Set all values in the dict to None, because we only care about the key ordering</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">column_tables</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="p">{})</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">tables</span><span class="p">[</span><span class="n">table</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="n">join_table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">tables</span><span class="p">[</span><span class="n">join_table</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">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;using&quot;</span><span class="p">)</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</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">*</span><span class="n">conditions</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-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="c1"># Ensure selects keep their output name</span>
-</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">column</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-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">replacement</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">replacement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">replacement</span><span class="p">)</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">column_tables</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><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a><span class="k">def</span> <span class="nf">_expand_alias_refs</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="c1"># Replace references to select aliases</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">def</span> <span class="nf">transform</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">source_first</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">node</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</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="c1"># Source columns get priority over select aliases</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">if</span> <span class="n">source_first</span> <span class="ow">and</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">return</span> <span class="n">node</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">selects</span><span class="p">:</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">s</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">selects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">if</span> <span class="n">select</span><span class="p">:</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">return</span> <span class="n">select</span><span class="o">.</span><span class="n">copy</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="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</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">node</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-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">transform</span><span class="p">,</span> <span class="n">source_first</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">return</span> <span class="n">node</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="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">transform</span><span class="p">(</span><span class="n">select</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">for</span> <span class="n">modifier</span><span class="p">,</span> <span class="n">source_first</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="kc">True</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 class="s2">&quot;having&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="p">):</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">transform</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><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">modifier</span><span class="p">),</span> <span class="n">source_first</span><span class="o">=</span><span class="n">source_first</span><span class="p">)</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">column_tables</span><span class="p">:</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">for</span> <span class="n">column</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-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">column_tables</span><span class="p">:</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">column_tables</span><span class="p">[</span><span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">]</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="n">coalesce</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">column</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">)</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">]</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">replacement</span> <span class="o">=</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">coalesce</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">expressions</span><span class="o">=</span><span class="n">coalesce</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</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="c1"># Ensure selects keep their output name</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">column</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-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">replacement</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">replacement</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">column</span><span class="o">.</span><span class="n">name</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="n">scope</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">replacement</span><span class="p">)</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="n">column_tables</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><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="k">def</span> <span class="nf">_expand_alias_refs</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">selects</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><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="c1"># Replace references to select aliases</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">transform</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">source_first</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">node</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</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="c1"># Source columns get priority over select aliases</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="n">source_first</span> <span class="ow">and</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="n">node</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">if</span> <span class="ow">not</span> <span class="n">selects</span><span class="p">:</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">selects</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">s</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">selects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</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">select</span><span class="p">:</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="n">select</span><span class="o">.</span><span class="n">copy</span><span class="p">()</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="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</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">node</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-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">transform</span><span class="p">,</span> <span class="n">source_first</span><span class="p">)</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="k">return</span> <span class="n">node</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">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">transform</span><span class="p">(</span><span class="n">select</span><span class="p">)</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>
-</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="k">def</span> <span class="nf">_expand_group_by</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">)</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">group</span><span class="p">:</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">return</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="n">group</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">_expand_positional_references</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">group</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="n">group</span><span class="p">)</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>
-</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="k">def</span> <span class="nf">_expand_order_by</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">order</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="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-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">order</span><span class="p">:</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="k">return</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">ordereds</span> <span class="o">=</span> <span class="n">order</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="k">for</span> <span class="n">ordered</span><span class="p">,</span> <span class="n">new_expression</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">ordereds</span><span class="p">,</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">_expand_positional_references</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="p">(</span><span class="n">o</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">ordereds</span><span class="p">)),</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="p">):</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">ordered</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">new_expression</span><span class="p">)</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">for</span> <span class="n">modifier</span><span class="p">,</span> <span class="n">source_first</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="p">(</span><span class="s2">&quot;having&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="p">):</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">transform</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">expression</span><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">modifier</span><span class="p">),</span> <span class="n">source_first</span><span class="o">=</span><span class="n">source_first</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><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="k">def</span> <span class="nf">_expand_group_by</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">group</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">)</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">group</span><span class="p">:</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="k">return</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">group</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">_expand_positional_references</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">group</span><span class="o">.</span><span class="n">expressions</span><span class="p">))</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="n">group</span><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">def</span> <span class="nf">_expand_order_by</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">order</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="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-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">order</span><span class="p">:</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">return</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>
-</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="k">def</span> <span class="nf">_expand_positional_references</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">new_nodes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown output column: </span><span class="si">{</span><span class="n">node</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-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">new_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">select</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">new_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</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="k">return</span> <span class="n">new_nodes</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><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a><span class="k">def</span> <span class="nf">_qualify_columns</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</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;Disambiguate columns, ensuring each column specifies a source&quot;&quot;&quot;</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="k">for</span> <span class="n">column</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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">column_name</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">ordereds</span> <span class="o">=</span> <span class="n">order</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">for</span> <span class="n">ordered</span><span class="p">,</span> <span class="n">new_expression</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">ordereds</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">_expand_positional_references</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="p">(</span><span class="n">o</span><span class="o">.</span><span class="n">this</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">ordereds</span><span class="p">)),</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="p">):</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">ordered</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">new_expression</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><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="k">def</span> <span class="nf">_expand_positional_references</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">new_nodes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">is_int</span><span class="p">:</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown output column: </span><span class="si">{</span><span class="n">node</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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">new_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">select</span><span class="o">.</span><span class="n">copy</span><span class="p">())</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">scope</span><span class="o">.</span><span class="n">clear_cache</span><span class="p">()</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">new_nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</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="k">return</span> <span class="n">new_nodes</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="k">if</span> <span class="n">column_table</span> <span class="ow">and</span> <span class="n">column_table</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">source_columns</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">column_table</span><span class="p">)</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="k">if</span> <span class="n">source_columns</span> <span class="ow">and</span> <span class="n">column_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">source_columns</span> <span class="ow">and</span> <span class="s2">&quot;*&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">:</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown column: </span><span class="si">{</span><span class="n">column_name</span><span class="si">}</span><span class="s2">&quot;</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="k">if</span> <span class="ow">not</span> <span class="n">column_table</span><span class="p">:</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="c1"># column_table can be a &#39;&#39; because bigquery unnest has no table alias</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="n">column_table</span><span class="p">:</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">column_table</span><span class="p">)</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">elif</span> <span class="n">column_table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="c1"># structs are used like tables (e.g. &quot;struct&quot;.&quot;field&quot;), so they need to be qualified</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="c1"># separately and represented as dot(dot(...(&lt;table&gt;.&lt;column&gt;, field1), field2, ...))</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="k">def</span> <span class="nf">_qualify_columns</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">):</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Disambiguate columns, ensuring each column specifies a source&quot;&quot;&quot;</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">for</span> <span class="n">column</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-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">column_name</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">name</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="k">if</span> <span class="n">column_table</span> <span class="ow">and</span> <span class="n">column_table</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">source_columns</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">column_table</span><span class="p">)</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="n">source_columns</span> <span class="ow">and</span> <span class="n">column_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">source_columns</span> <span class="ow">and</span> <span class="s2">&quot;*&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">:</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown column: </span><span class="si">{</span><span class="n">column_name</span><span class="si">}</span><span class="s2">&quot;</span><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="k">if</span> <span class="ow">not</span> <span class="n">column_table</span><span class="p">:</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">column_name</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="n">root</span><span class="p">,</span> <span class="o">*</span><span class="n">parts</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="c1"># struct is already qualified, but we still need to change the AST representation</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">root</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="n">root</span><span class="p">,</span> <span class="o">*</span><span class="n">parts</span> <span class="o">=</span> <span class="n">parts</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="c1"># column_table can be a &#39;&#39; because bigquery unnest has no table alias</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">if</span> <span class="n">column_table</span><span class="p">:</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">column_table</span><span class="p">)</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">elif</span> <span class="n">column_table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">parent</span> <span class="ow">or</span> <span class="n">column_table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">sources</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 class="c1"># structs are used like tables (e.g. &quot;struct&quot;.&quot;field&quot;), so they need to be qualified</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="c1"># separately and represented as dot(dot(...(&lt;table&gt;.&lt;column&gt;, field1), field2, ...))</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="k">if</span> <span class="n">column_table</span><span class="p">:</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">column</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">Dot</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">column</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_table</span><span class="p">),</span> <span class="o">*</span><span class="n">parts</span><span class="p">]))</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">columns_missing_from_scope</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="c1"># Determine whether each reference in the order by clause is to a column or an alias.</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">order</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="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-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="k">if</span> <span class="n">order</span><span class="p">:</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">for</span> <span class="n">ordered</span> <span class="ow">in</span> <span class="n">order</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">ordered</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-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">ordered</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">resolver</span><span class="o">.</span><span class="n">all_columns</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="p">):</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a> <span class="n">columns_missing_from_scope</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="c1"># Determine whether each reference in the having clause is to a column or an alias.</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="n">having</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;having&quot;</span><span class="p">)</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">having</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-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="ow">and</span> <span class="n">column</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">AggFunc</span><span class="p">)</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">resolver</span><span class="o">.</span><span class="n">all_columns</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="p">):</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">columns_missing_from_scope</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">column</span><span class="p">)</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="n">root</span><span class="p">,</span> <span class="o">*</span><span class="n">parts</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</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="k">if</span> <span class="n">root</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="c1"># struct is already qualified, but we still need to change the AST representation</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">root</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">root</span><span class="p">,</span> <span class="o">*</span><span class="n">parts</span> <span class="o">=</span> <span class="n">parts</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">name</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="k">if</span> <span class="n">column_table</span><span class="p">:</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">column</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">Dot</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">column</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_table</span><span class="p">),</span> <span class="o">*</span><span class="n">parts</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">columns_missing_from_scope</span> <span class="o">=</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="c1"># Determine whether each reference in the order by clause is to a column or an alias.</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">order</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="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-272"><a href="#L-272"><span class="linenos">272</span></a>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="k">if</span> <span class="n">order</span><span class="p">:</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a> <span class="k">for</span> <span class="n">ordered</span> <span class="ow">in</span> <span class="n">order</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">ordered</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-276"><a href="#L-276"><span class="linenos">276</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">ordered</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">resolver</span><span class="o">.</span><span class="n">all_columns</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a> <span class="p">):</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a> <span class="n">columns_missing_from_scope</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">column</span><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="c1"># Determine whether each reference in the having clause is to a column or an alias.</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a> <span class="n">having</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;having&quot;</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="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns_missing_from_scope</span><span class="p">:</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">name</span><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="k">if</span> <span class="n">column_table</span><span class="p">:</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">column_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><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a><span class="k">def</span> <span class="nf">_expand_stars</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">,</span> <span class="n">using_column_tables</span><span class="p">):</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Expand stars to lists of column selections&quot;&quot;&quot;</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">new_selections</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="n">except_columns</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="n">replace_columns</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">coalesced_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="k">if</span> <span class="n">having</span><span class="p">:</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">having</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-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="ow">not</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="ow">and</span> <span class="n">column</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">AggFunc</span><span class="p">)</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">resolver</span><span class="o">.</span><span class="n">all_columns</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">columns_missing_from_scope</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">column</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="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns_missing_from_scope</span><span class="p">:</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">column_table</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_table</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">name</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">if</span> <span class="n">column_table</span><span class="p">:</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">,</span> <span class="n">column_table</span><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="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</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">Star</span><span class="p">):</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">)</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">_add_except_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">except_columns</span><span class="p">)</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a> <span class="n">_add_replace_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">replace_columns</span><span class="p">)</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_star</span><span class="p">:</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">table</span><span class="p">]</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">_add_except_columns</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">tables</span><span class="p">,</span> <span class="n">except_columns</span><span class="p">)</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="n">_add_replace_columns</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">tables</span><span class="p">,</span> <span class="n">replace_columns</span><span class="p">)</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="n">new_selections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="k">continue</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="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">only_visible</span><span class="o">=</span><span class="kc">True</span><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="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="s2">&quot;*&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">table_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">using_column_tables</span> <span class="ow">and</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">using_column_tables</span><span class="p">[</span><span class="n">name</span><span class="p">]:</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">coalesced_columns</span><span class="p">:</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">continue</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">coalesced_columns</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">using_column_tables</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">coalesce</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">name</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">)</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><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">new_selections</span><span class="o">.</span><span class="n">append</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">alias_</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">Coalesce</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">coalesce</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">expressions</span><span class="o">=</span><span class="n">coalesce</span><span class="p">[</span><span class="mi">1</span><span class="p">:]),</span> <span class="n">alias</span><span class="o">=</span><span class="n">name</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="p">)</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="p">)</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">elif</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">except_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_id</span><span class="p">,</span> <span class="nb">set</span><span class="p">()):</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">alias_</span> <span class="o">=</span> <span class="n">replace_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_id</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">column</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="n">name</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="n">new_selections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">alias</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">alias_</span><span class="p">)</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="n">column</span><span class="p">)</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="k">return</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">scope</span><span class="o">.</span><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="n">new_selections</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><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a><span class="k">def</span> <span class="nf">_add_except_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">except_columns</span><span class="p">):</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;except&quot;</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="k">if</span> <span class="ow">not</span> <span class="n">except_</span><span class="p">:</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a> <span class="k">return</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">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">except_</span><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="k">def</span> <span class="nf">_expand_stars</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">,</span> <span class="n">using_column_tables</span><span class="p">):</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Expand stars to lists of column selections&quot;&quot;&quot;</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">new_selections</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="n">except_columns</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">replace_columns</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">coalesced_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</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">Star</span><span class="p">):</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">)</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">_add_except_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">except_columns</span><span class="p">)</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="n">_add_replace_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">replace_columns</span><span class="p">)</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a> <span class="k">elif</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_star</span><span class="p">:</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="o">.</span><span class="n">table</span><span class="p">]</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a> <span class="n">_add_except_columns</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">tables</span><span class="p">,</span> <span class="n">except_columns</span><span class="p">)</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="n">_add_replace_columns</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">tables</span><span class="p">,</span> <span class="n">replace_columns</span><span class="p">)</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a> <span class="n">new_selections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">continue</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">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">resolver</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">only_visible</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="k">if</span> <span class="n">columns</span> <span class="ow">and</span> <span class="s2">&quot;*&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a> <span class="n">table_id</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">columns</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">name</span> <span class="ow">in</span> <span class="n">using_column_tables</span> <span class="ow">and</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">using_column_tables</span><span class="p">[</span><span class="n">name</span><span class="p">]:</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">coalesced_columns</span><span class="p">:</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="k">continue</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="n">coalesced_columns</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="n">using_column_tables</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">coalesce</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">name</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">)</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</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="n">new_selections</span><span class="o">.</span><span class="n">append</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">alias_</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">Coalesce</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">coalesce</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">expressions</span><span class="o">=</span><span class="n">coalesce</span><span class="p">[</span><span class="mi">1</span><span class="p">:]),</span> <span class="n">alias</span><span class="o">=</span><span class="n">name</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="p">)</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="p">)</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="k">elif</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">except_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_id</span><span class="p">,</span> <span class="nb">set</span><span class="p">()):</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="n">alias_</span> <span class="o">=</span> <span class="n">replace_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_id</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="n">column</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="n">name</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="n">new_selections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">alias</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">alias_</span><span class="p">)</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="n">column</span><span class="p">)</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="k">return</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">scope</span><span class="o">.</span><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="n">new_selections</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">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="n">except_columns</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">table</span><span class="p">)]</span> <span class="o">=</span> <span class="n">columns</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>
+</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="nf">_add_except_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">except_columns</span><span class="p">):</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="n">except_</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;except&quot;</span><span class="p">)</span>
</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a><span class="k">def</span> <span class="nf">_add_replace_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">replace_columns</span><span class="p">):</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="n">expression</span><span class="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><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">except_</span><span class="p">:</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a> <span class="k">return</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">if</span> <span class="ow">not</span> <span class="n">replace</span><span class="p">:</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">return</span>
-</span><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="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">e</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">replace</span><span class="p">}</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">except_</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">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="n">except_columns</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">table</span><span class="p">)]</span> <span class="o">=</span> <span class="n">columns</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="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="n">replace_columns</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">table</span><span class="p">)]</span> <span class="o">=</span> <span class="n">columns</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>
+</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="k">def</span> <span class="nf">_add_replace_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">tables</span><span class="p">,</span> <span class="n">replace_columns</span><span class="p">):</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="n">expression</span><span class="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><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="k">def</span> <span class="nf">_qualify_outputs</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Ensure all output columns are aliased&quot;&quot;&quot;</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">new_selections</span> <span class="o">=</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">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">aliased_column</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">itertools</span><span class="o">.</span><span class="n">zip_longest</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">,</span> <span class="n">scope</span><span class="o">.</span><span class="n">outer_column_list</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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">):</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">output_name</span><span class="p">:</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a> <span class="n">selection</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">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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;_col_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)))</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">selection</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="ow">and</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">is_star</span><span class="p">:</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">alias_</span> <span class="o">=</span> <span class="n">alias</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="s2">&quot;&quot;</span><span class="p">),</span> <span class="n">alias</span><span class="o">=</span><span class="n">selection</span><span class="o">.</span><span class="n">output_name</span> <span class="ow">or</span> <span class="sa">f</span><span class="s2">&quot;_col_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</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="n">selection</span><span class="p">)</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="n">selection</span> <span class="o">=</span> <span class="n">alias_</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">if</span> <span class="n">aliased_column</span><span class="p">:</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="n">selection</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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">aliased_column</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="n">new_selections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">selection</span><span class="p">)</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a> <span class="n">scope</span><span class="o">.</span><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="n">new_selections</span><span class="p">)</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a><span class="k">class</span> <span class="nc">Resolver</span><span class="p">:</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a><span class="sd"> Helper for resolving columns.</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">replace</span><span class="p">:</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="k">return</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="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">e</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">replace</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">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="n">replace_columns</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">table</span><span class="p">)]</span> <span class="o">=</span> <span class="n">columns</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a><span class="k">def</span> <span class="nf">_qualify_outputs</span><span class="p">(</span><span class="n">scope</span><span class="p">):</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Ensure all output columns are aliased&quot;&quot;&quot;</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a> <span class="n">new_selections</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">aliased_column</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">itertools</span><span class="o">.</span><span class="n">zip_longest</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">selects</span><span class="p">,</span> <span class="n">scope</span><span class="o">.</span><span class="n">outer_column_list</span><span class="p">)</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="p">):</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">):</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">output_name</span><span class="p">:</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <span class="n">selection</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">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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;_col_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)))</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">selection</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="ow">and</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">is_star</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="n">alias</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="s2">&quot;&quot;</span><span class="p">),</span> <span class="n">alias</span><span class="o">=</span><span class="n">selection</span><span class="o">.</span><span class="n">output_name</span> <span class="ow">or</span> <span class="sa">f</span><span class="s2">&quot;_col_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</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="n">selection</span><span class="p">)</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a> <span class="n">selection</span> <span class="o">=</span> <span class="n">alias_</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">if</span> <span class="n">aliased_column</span><span class="p">:</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <span class="n">selection</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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">aliased_column</span><span class="p">))</span>
</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a><span class="sd"> This is a class so we can lazily load some things and easily share them across functions.</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a><span class="sd"> &quot;&quot;&quot;</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">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">schema</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="o">.</span><span class="n">scope</span> <span class="o">=</span> <span class="n">scope</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</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-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="kc">None</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">_unambiguous_columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="kc">None</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">get_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column_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">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-406"><a href="#L-406"><span class="linenos">406</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a><span class="sd"> Get the table for a column name.</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="sd"> Args:</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a><span class="sd"> column_name: The column name to find the table for.</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a><span class="sd"> Returns:</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a><span class="sd"> The table name if it can be found/inferred.</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_unambiguous_columns</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="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="p">)</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column_name</span><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="k">if</span> <span class="ow">not</span> <span class="n">table_name</span><span class="p">:</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a> <span class="n">sources_without_schema</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a> <span class="n">source</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a> <span class="k">for</span> <span class="n">source</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">items</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="n">columns</span> <span class="ow">or</span> <span class="s2">&quot;*&quot;</span> <span class="ow">in</span> <span class="n">columns</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <span class="n">new_selections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">selection</span><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="n">scope</span><span class="o">.</span><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="n">new_selections</span><span class="p">)</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a><span class="k">class</span> <span class="nc">Resolver</span><span class="p">:</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a><span class="sd"> Helper for resolving columns.</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="sd"> This is a class so we can lazily load some things and easily share them across functions.</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a><span class="sd"> &quot;&quot;&quot;</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="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scope</span><span class="p">,</span> <span class="n">schema</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="o">.</span><span class="n">scope</span> <span class="o">=</span> <span class="n">scope</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</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-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="kc">None</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">_unambiguous_columns</span> <span class="o">=</span> <span class="kc">None</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">_all_columns</span> <span class="o">=</span> <span class="kc">None</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">def</span> <span class="nf">get_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column_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">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-415"><a href="#L-415"><span class="linenos">415</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a><span class="sd"> Get the table for a column name.</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"> Args:</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a><span class="sd"> column_name: The column name to find the table for.</span>
+</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"> The table name if it can be found/inferred.</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="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</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">_unambiguous_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_unambiguous_columns</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="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</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 class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sources_without_schema</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">sources_without_schema</span><span class="p">[</span><span class="mi">0</span><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="n">table_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</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">if</span> <span class="n">table_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">:</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</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="n">table_name</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">node</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">)</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">node</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-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">while</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="o">!=</span> <span class="n">table_name</span><span class="p">:</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_name</span><span class="p">:</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="n">sources_without_schema</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a> <span class="n">source</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">for</span> <span class="n">source</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span> <span class="ow">or</span> <span class="s2">&quot;*&quot;</span> <span class="ow">in</span> <span class="n">columns</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <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="nb">len</span><span class="p">(</span><span class="n">sources_without_schema</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">sources_without_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="n">node_alias</span> <span class="o">=</span> <span class="n">node</span><span class="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-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">node_alias</span><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="n">node_alias</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><span id="L-443"><a href="#L-443"><span class="linenos">443</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><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="n">table_name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="kc">None</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="nd">@property</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">def</span> <span class="nf">all_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;All available columns of all sources in this scope&quot;&quot;&quot;</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="ow">is</span> <span class="kc">None</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">_all_columns</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="n">column</span> <span class="k">for</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">table_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</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="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">table_name</span><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="n">node</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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-445"><a href="#L-445"><span class="linenos">445</span></a> <span class="k">while</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="o">!=</span> <span class="n">table_name</span><span class="p">:</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">parent</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="n">node_alias</span> <span class="o">=</span> <span class="n">node</span><span class="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-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="k">if</span> <span class="n">node_alias</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="n">node_alias</span><span class="o">.</span><span class="n">this</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">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="n">table_name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="kc">None</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><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">def</span> <span class="nf">get_source_columns</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="n">only_visible</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve the source columns for a given source `name`&quot;&quot;&quot;</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</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="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</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="c1"># If referencing a table, return the columns from the schema</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</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-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">only_visible</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="k">if</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 class="ow">and</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">Values</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="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">alias_column_names</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="nd">@property</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a> <span class="k">def</span> <span class="nf">all_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;All available columns of all sources in this scope&quot;&quot;&quot;</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="ow">is</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="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="n">column</span> <span class="k">for</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <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">_all_columns</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">get_source_columns</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="n">only_visible</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve the source columns for a given source `name`&quot;&quot;&quot;</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</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"># Otherwise, if referencing another scope, return that scope&#39;s named selects</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</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">_get_all_source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="ow">is</span> <span class="kc">None</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">_source_columns</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="n">k</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">chain</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">lateral_sources</span><span class="p">)</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a> <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">_source_columns</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">_get_unambiguous_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_columns</span><span class="p">):</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a><span class="sd"> Find all the unambiguous columns in sources.</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a><span class="sd"> Args:</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a><span class="sd"> source_columns (dict): Mapping of names to source columns</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a><span class="sd"> Returns:</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a><span class="sd"> dict: Mapping of column name to source name</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">source_columns</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><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">source_columns</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">source_columns</span><span class="o">.</span><span class="n">items</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="n">first_table</span><span class="p">,</span> <span class="n">first_columns</span> <span class="o">=</span> <span class="n">source_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="n">unambiguous_columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="n">first_table</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">first_columns</span><span class="p">)}</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">unambiguous_columns</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 class="k">for</span> <span class="n">table</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">ambiguous</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">all_columns</span><span class="p">)</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">unique</span><span class="p">)</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">all_columns</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">ambiguous</span><span class="p">:</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">unambiguous_columns</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">unique</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">ambiguous</span><span class="p">):</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="n">unambiguous_columns</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</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="c1"># If referencing a table, return the columns from the schema</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">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-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">schema</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">only_visible</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="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 class="ow">and</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">Values</span><span class="p">):</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">return</span> <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><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="c1"># Otherwise, if referencing another scope, return that scope&#39;s named selects</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</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">_get_all_source_columns</span><span class="p">(</span><span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="ow">is</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="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">k</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">chain</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">lateral_sources</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</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">_get_unambiguous_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_columns</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;</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a><span class="sd"> Find all the unambiguous columns in sources.</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="sd"> Args:</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a><span class="sd"> source_columns (dict): Mapping of names to source columns</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a><span class="sd"> Returns:</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a><span class="sd"> dict: Mapping of column name to source name</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a><span class="sd"> &quot;&quot;&quot;</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="n">source_columns</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><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a> <span class="n">source_columns</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">source_columns</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><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">first_table</span><span class="p">,</span> <span class="n">first_columns</span> <span class="o">=</span> <span class="n">source_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="n">unambiguous_columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="n">first_table</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">first_columns</span><span class="p">)}</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">unambiguous_columns</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">unambiguous_columns</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="nd">@staticmethod</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">def</span> <span class="nf">_find_unique_columns</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a><span class="sd"> Find the unique columns in a list of columns.</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="sd"> Example:</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a><span class="sd"> &gt;&gt;&gt; sorted(Resolver._find_unique_columns([&quot;a&quot;, &quot;b&quot;, &quot;b&quot;, &quot;c&quot;]))</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="k">for</span> <span class="n">table</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">[</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">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a> <span class="n">ambiguous</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">all_columns</span><span class="p">)</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">unique</span><span class="p">)</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="n">all_columns</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">ambiguous</span><span class="p">:</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <span class="n">unambiguous_columns</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">column</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">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">unique</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">ambiguous</span><span class="p">):</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a> <span class="n">unambiguous_columns</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">table</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">unambiguous_columns</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="sd"> This is necessary because duplicate column names are ambiguous.</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a> <span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a> <span class="n">counts</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">column</span> <span class="k">for</span> <span class="n">column</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">counts</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">}</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a> <span class="nd">@staticmethod</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a> <span class="k">def</span> <span class="nf">_find_unique_columns</span><span class="p">(</span><span class="n">columns</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"> Find the unique columns in a list of columns.</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"> Example:</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a><span class="sd"> &gt;&gt;&gt; sorted(Resolver._find_unique_columns([&quot;a&quot;, &quot;b&quot;, &quot;b&quot;, &quot;c&quot;]))</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
+</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="sd"> This is necessary because duplicate column names are ambiguous.</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a> <span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a> <span class="n">counts</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">column</span> <span class="k">for</span> <span class="n">column</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">counts</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">}</span>
</span></pre></div>
@@ -610,45 +619,51 @@
<div class="attr function">
<span class="def">def</span>
- <span class="name">qualify_columns</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">schema</span></span><span class="return-annotation">):</span></span>
+ <span class="name">qualify_columns</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">expression</span>, </span><span class="param"><span class="n">schema</span>, </span><span class="param"><span class="n">expand_laterals</span><span class="o">=</span><span class="kc">True</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="qualify_columns-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#qualify_columns"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="qualify_columns-11"><a href="#qualify_columns-11"><span class="linenos">11</span></a><span class="k">def</span> <span class="nf">qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
-</span><span id="qualify_columns-12"><a href="#qualify_columns-12"><span class="linenos">12</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="qualify_columns-13"><a href="#qualify_columns-13"><span class="linenos">13</span></a><span class="sd"> Rewrite sqlglot AST to have fully qualified columns.</span>
-</span><span id="qualify_columns-14"><a href="#qualify_columns-14"><span class="linenos">14</span></a>
-</span><span id="qualify_columns-15"><a href="#qualify_columns-15"><span class="linenos">15</span></a><span class="sd"> Example:</span>
-</span><span id="qualify_columns-16"><a href="#qualify_columns-16"><span class="linenos">16</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
-</span><span id="qualify_columns-17"><a href="#qualify_columns-17"><span class="linenos">17</span></a><span class="sd"> &gt;&gt;&gt; schema = {&quot;tbl&quot;: {&quot;col&quot;: &quot;INT&quot;}}</span>
-</span><span id="qualify_columns-18"><a href="#qualify_columns-18"><span class="linenos">18</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT col FROM tbl&quot;)</span>
-</span><span id="qualify_columns-19"><a href="#qualify_columns-19"><span class="linenos">19</span></a><span class="sd"> &gt;&gt;&gt; qualify_columns(expression, schema).sql()</span>
-</span><span id="qualify_columns-20"><a href="#qualify_columns-20"><span class="linenos">20</span></a><span class="sd"> &#39;SELECT tbl.col AS col FROM tbl&#39;</span>
-</span><span id="qualify_columns-21"><a href="#qualify_columns-21"><span class="linenos">21</span></a>
-</span><span id="qualify_columns-22"><a href="#qualify_columns-22"><span class="linenos">22</span></a><span class="sd"> Args:</span>
-</span><span id="qualify_columns-23"><a href="#qualify_columns-23"><span class="linenos">23</span></a><span class="sd"> expression (sqlglot.Expression): expression to qualify</span>
-</span><span id="qualify_columns-24"><a href="#qualify_columns-24"><span class="linenos">24</span></a><span class="sd"> schema (dict|sqlglot.optimizer.Schema): Database schema</span>
-</span><span id="qualify_columns-25"><a href="#qualify_columns-25"><span class="linenos">25</span></a><span class="sd"> Returns:</span>
-</span><span id="qualify_columns-26"><a href="#qualify_columns-26"><span class="linenos">26</span></a><span class="sd"> sqlglot.Expression: qualified expression</span>
-</span><span id="qualify_columns-27"><a href="#qualify_columns-27"><span class="linenos">27</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="qualify_columns-28"><a href="#qualify_columns-28"><span class="linenos">28</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="qualify_columns-29"><a href="#qualify_columns-29"><span class="linenos">29</span></a>
-</span><span id="qualify_columns-30"><a href="#qualify_columns-30"><span class="linenos">30</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="qualify_columns-31"><a href="#qualify_columns-31"><span class="linenos">31</span></a> <span class="n">resolver</span> <span class="o">=</span> <span class="n">Resolver</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
-</span><span id="qualify_columns-32"><a href="#qualify_columns-32"><span class="linenos">32</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
-</span><span id="qualify_columns-33"><a href="#qualify_columns-33"><span class="linenos">33</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">derived_tables</span><span class="p">)</span>
-</span><span id="qualify_columns-34"><a href="#qualify_columns-34"><span class="linenos">34</span></a> <span class="n">using_column_tables</span> <span class="o">=</span> <span class="n">_expand_using</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="qualify_columns-35"><a href="#qualify_columns-35"><span class="linenos">35</span></a> <span class="n">_qualify_columns</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="qualify_columns-36"><a href="#qualify_columns-36"><span class="linenos">36</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span 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="qualify_columns-37"><a href="#qualify_columns-37"><span class="linenos">37</span></a> <span class="n">_expand_stars</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">,</span> <span class="n">using_column_tables</span><span class="p">)</span>
-</span><span id="qualify_columns-38"><a href="#qualify_columns-38"><span class="linenos">38</span></a> <span class="n">_qualify_outputs</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="qualify_columns-39"><a href="#qualify_columns-39"><span class="linenos">39</span></a> <span class="n">_expand_alias_refs</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="qualify_columns-40"><a href="#qualify_columns-40"><span class="linenos">40</span></a> <span class="n">_expand_group_by</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
-</span><span id="qualify_columns-41"><a href="#qualify_columns-41"><span class="linenos">41</span></a> <span class="n">_expand_order_by</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
-</span><span id="qualify_columns-42"><a href="#qualify_columns-42"><span class="linenos">42</span></a>
-</span><span id="qualify_columns-43"><a href="#qualify_columns-43"><span class="linenos">43</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="qualify_columns-12"><a href="#qualify_columns-12"><span class="linenos">12</span></a><span class="k">def</span> <span class="nf">qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="n">expand_laterals</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="qualify_columns-13"><a href="#qualify_columns-13"><span class="linenos">13</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="qualify_columns-14"><a href="#qualify_columns-14"><span class="linenos">14</span></a><span class="sd"> Rewrite sqlglot AST to have fully qualified columns.</span>
+</span><span id="qualify_columns-15"><a href="#qualify_columns-15"><span class="linenos">15</span></a>
+</span><span id="qualify_columns-16"><a href="#qualify_columns-16"><span class="linenos">16</span></a><span class="sd"> Example:</span>
+</span><span id="qualify_columns-17"><a href="#qualify_columns-17"><span class="linenos">17</span></a><span class="sd"> &gt;&gt;&gt; import sqlglot</span>
+</span><span id="qualify_columns-18"><a href="#qualify_columns-18"><span class="linenos">18</span></a><span class="sd"> &gt;&gt;&gt; schema = {&quot;tbl&quot;: {&quot;col&quot;: &quot;INT&quot;}}</span>
+</span><span id="qualify_columns-19"><a href="#qualify_columns-19"><span class="linenos">19</span></a><span class="sd"> &gt;&gt;&gt; expression = sqlglot.parse_one(&quot;SELECT col FROM tbl&quot;)</span>
+</span><span id="qualify_columns-20"><a href="#qualify_columns-20"><span class="linenos">20</span></a><span class="sd"> &gt;&gt;&gt; qualify_columns(expression, schema).sql()</span>
+</span><span id="qualify_columns-21"><a href="#qualify_columns-21"><span class="linenos">21</span></a><span class="sd"> &#39;SELECT tbl.col AS col FROM tbl&#39;</span>
+</span><span id="qualify_columns-22"><a href="#qualify_columns-22"><span class="linenos">22</span></a>
+</span><span id="qualify_columns-23"><a href="#qualify_columns-23"><span class="linenos">23</span></a><span class="sd"> Args:</span>
+</span><span id="qualify_columns-24"><a href="#qualify_columns-24"><span class="linenos">24</span></a><span class="sd"> expression (sqlglot.Expression): expression to qualify</span>
+</span><span id="qualify_columns-25"><a href="#qualify_columns-25"><span class="linenos">25</span></a><span class="sd"> schema (dict|sqlglot.optimizer.Schema): Database schema</span>
+</span><span id="qualify_columns-26"><a href="#qualify_columns-26"><span class="linenos">26</span></a><span class="sd"> Returns:</span>
+</span><span id="qualify_columns-27"><a href="#qualify_columns-27"><span class="linenos">27</span></a><span class="sd"> sqlglot.Expression: qualified expression</span>
+</span><span id="qualify_columns-28"><a href="#qualify_columns-28"><span class="linenos">28</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="qualify_columns-29"><a href="#qualify_columns-29"><span class="linenos">29</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="n">ensure_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="qualify_columns-30"><a href="#qualify_columns-30"><span class="linenos">30</span></a>
+</span><span id="qualify_columns-31"><a href="#qualify_columns-31"><span class="linenos">31</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">schema</span><span class="o">.</span><span class="n">mapping</span> <span class="ow">and</span> <span class="n">expand_laterals</span><span class="p">:</span>
+</span><span id="qualify_columns-32"><a href="#qualify_columns-32"><span class="linenos">32</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">_expand_laterals</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="qualify_columns-33"><a href="#qualify_columns-33"><span class="linenos">33</span></a>
+</span><span id="qualify_columns-34"><a href="#qualify_columns-34"><span class="linenos">34</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="qualify_columns-35"><a href="#qualify_columns-35"><span class="linenos">35</span></a> <span class="n">resolver</span> <span class="o">=</span> <span class="n">Resolver</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
+</span><span id="qualify_columns-36"><a href="#qualify_columns-36"><span class="linenos">36</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">ctes</span><span class="p">)</span>
+</span><span id="qualify_columns-37"><a href="#qualify_columns-37"><span class="linenos">37</span></a> <span class="n">_pop_table_column_aliases</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">derived_tables</span><span class="p">)</span>
+</span><span id="qualify_columns-38"><a href="#qualify_columns-38"><span class="linenos">38</span></a> <span class="n">using_column_tables</span> <span class="o">=</span> <span class="n">_expand_using</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
+</span><span id="qualify_columns-39"><a href="#qualify_columns-39"><span class="linenos">39</span></a> <span class="n">_qualify_columns</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
+</span><span id="qualify_columns-40"><a href="#qualify_columns-40"><span class="linenos">40</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span 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="qualify_columns-41"><a href="#qualify_columns-41"><span class="linenos">41</span></a> <span class="n">_expand_stars</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">,</span> <span class="n">using_column_tables</span><span class="p">)</span>
+</span><span id="qualify_columns-42"><a href="#qualify_columns-42"><span class="linenos">42</span></a> <span class="n">_qualify_outputs</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="qualify_columns-43"><a href="#qualify_columns-43"><span class="linenos">43</span></a> <span class="n">_expand_alias_refs</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
+</span><span id="qualify_columns-44"><a href="#qualify_columns-44"><span class="linenos">44</span></a> <span class="n">_expand_group_by</span><span class="p">(</span><span class="n">scope</span><span class="p">,</span> <span class="n">resolver</span><span class="p">)</span>
+</span><span id="qualify_columns-45"><a href="#qualify_columns-45"><span class="linenos">45</span></a> <span class="n">_expand_order_by</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
+</span><span id="qualify_columns-46"><a href="#qualify_columns-46"><span class="linenos">46</span></a>
+</span><span id="qualify_columns-47"><a href="#qualify_columns-47"><span class="linenos">47</span></a> <span class="k">if</span> <span class="n">schema</span><span class="o">.</span><span class="n">mapping</span> <span class="ow">and</span> <span class="n">expand_laterals</span><span class="p">:</span>
+</span><span id="qualify_columns-48"><a href="#qualify_columns-48"><span class="linenos">48</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">_expand_laterals</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="qualify_columns-49"><a href="#qualify_columns-49"><span class="linenos">49</span></a>
+</span><span id="qualify_columns-50"><a href="#qualify_columns-50"><span class="linenos">50</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -694,19 +709,19 @@
</div>
<a class="headerlink" href="#validate_qualify_columns"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="validate_qualify_columns-46"><a href="#validate_qualify_columns-46"><span class="linenos">46</span></a><span class="k">def</span> <span class="nf">validate_qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="validate_qualify_columns-47"><a href="#validate_qualify_columns-47"><span class="linenos">47</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Raise an `OptimizeError` if any columns aren&#39;t qualified&quot;&quot;&quot;</span>
-</span><span id="validate_qualify_columns-48"><a href="#validate_qualify_columns-48"><span class="linenos">48</span></a> <span class="n">unqualified_columns</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="validate_qualify_columns-49"><a href="#validate_qualify_columns-49"><span class="linenos">49</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="validate_qualify_columns-50"><a href="#validate_qualify_columns-50"><span class="linenos">50</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</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><span id="validate_qualify_columns-51"><a href="#validate_qualify_columns-51"><span class="linenos">51</span></a> <span class="n">unqualified_columns</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">unqualified_columns</span><span class="p">)</span>
-</span><span id="validate_qualify_columns-52"><a href="#validate_qualify_columns-52"><span class="linenos">52</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_correlated_subquery</span><span class="p">:</span>
-</span><span id="validate_qualify_columns-53"><a href="#validate_qualify_columns-53"><span class="linenos">53</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="validate_qualify_columns-54"><a href="#validate_qualify_columns-54"><span class="linenos">54</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: &#39;</span><span class="si">{</span><span class="n">column</span><span class="o">.</span><span class="n">table</span><span class="si">}</span><span class="s2">&#39; for column &#39;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="validate_qualify_columns-55"><a href="#validate_qualify_columns-55"><span class="linenos">55</span></a>
-</span><span id="validate_qualify_columns-56"><a href="#validate_qualify_columns-56"><span class="linenos">56</span></a> <span class="k">if</span> <span class="n">unqualified_columns</span><span class="p">:</span>
-</span><span id="validate_qualify_columns-57"><a href="#validate_qualify_columns-57"><span class="linenos">57</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous columns: </span><span class="si">{</span><span class="n">unqualified_columns</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="validate_qualify_columns-58"><a href="#validate_qualify_columns-58"><span class="linenos">58</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="validate_qualify_columns-53"><a href="#validate_qualify_columns-53"><span class="linenos">53</span></a><span class="k">def</span> <span class="nf">validate_qualify_columns</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="validate_qualify_columns-54"><a href="#validate_qualify_columns-54"><span class="linenos">54</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Raise an `OptimizeError` if any columns aren&#39;t qualified&quot;&quot;&quot;</span>
+</span><span id="validate_qualify_columns-55"><a href="#validate_qualify_columns-55"><span class="linenos">55</span></a> <span class="n">unqualified_columns</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="validate_qualify_columns-56"><a href="#validate_qualify_columns-56"><span class="linenos">56</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="validate_qualify_columns-57"><a href="#validate_qualify_columns-57"><span class="linenos">57</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">scope</span><span class="o">.</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><span id="validate_qualify_columns-58"><a href="#validate_qualify_columns-58"><span class="linenos">58</span></a> <span class="n">unqualified_columns</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">scope</span><span class="o">.</span><span class="n">unqualified_columns</span><span class="p">)</span>
+</span><span id="validate_qualify_columns-59"><a href="#validate_qualify_columns-59"><span class="linenos">59</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_correlated_subquery</span><span class="p">:</span>
+</span><span id="validate_qualify_columns-60"><a href="#validate_qualify_columns-60"><span class="linenos">60</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">external_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="validate_qualify_columns-61"><a href="#validate_qualify_columns-61"><span class="linenos">61</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: &#39;</span><span class="si">{</span><span class="n">column</span><span class="o">.</span><span class="n">table</span><span class="si">}</span><span class="s2">&#39; for column &#39;</span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="validate_qualify_columns-62"><a href="#validate_qualify_columns-62"><span class="linenos">62</span></a>
+</span><span id="validate_qualify_columns-63"><a href="#validate_qualify_columns-63"><span class="linenos">63</span></a> <span class="k">if</span> <span class="n">unqualified_columns</span><span class="p">:</span>
+</span><span id="validate_qualify_columns-64"><a href="#validate_qualify_columns-64"><span class="linenos">64</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Ambiguous columns: </span><span class="si">{</span><span class="n">unqualified_columns</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="validate_qualify_columns-65"><a href="#validate_qualify_columns-65"><span class="linenos">65</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -726,140 +741,140 @@
</div>
<a class="headerlink" href="#Resolver"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver-392"><a href="#Resolver-392"><span class="linenos">392</span></a><span class="k">class</span> <span class="nc">Resolver</span><span class="p">:</span>
-</span><span id="Resolver-393"><a href="#Resolver-393"><span class="linenos">393</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Resolver-394"><a href="#Resolver-394"><span class="linenos">394</span></a><span class="sd"> Helper for resolving columns.</span>
-</span><span id="Resolver-395"><a href="#Resolver-395"><span class="linenos">395</span></a>
-</span><span id="Resolver-396"><a href="#Resolver-396"><span class="linenos">396</span></a><span class="sd"> This is a class so we can lazily load some things and easily share them across functions.</span>
-</span><span id="Resolver-397"><a href="#Resolver-397"><span class="linenos">397</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Resolver-398"><a href="#Resolver-398"><span class="linenos">398</span></a>
-</span><span id="Resolver-399"><a href="#Resolver-399"><span class="linenos">399</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">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
-</span><span id="Resolver-400"><a href="#Resolver-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span> <span class="o">=</span> <span class="n">scope</span>
-</span><span id="Resolver-401"><a href="#Resolver-401"><span class="linenos">401</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="Resolver-402"><a href="#Resolver-402"><span class="linenos">402</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Resolver-403"><a href="#Resolver-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Resolver-404"><a href="#Resolver-404"><span class="linenos">404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Resolver-405"><a href="#Resolver-405"><span class="linenos">405</span></a>
-</span><span id="Resolver-406"><a href="#Resolver-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">get_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column_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">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="Resolver-407"><a href="#Resolver-407"><span class="linenos">407</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Resolver-408"><a href="#Resolver-408"><span class="linenos">408</span></a><span class="sd"> Get the table for a column name.</span>
-</span><span id="Resolver-409"><a href="#Resolver-409"><span class="linenos">409</span></a>
-</span><span id="Resolver-410"><a href="#Resolver-410"><span class="linenos">410</span></a><span class="sd"> Args:</span>
-</span><span id="Resolver-411"><a href="#Resolver-411"><span class="linenos">411</span></a><span class="sd"> column_name: The column name to find the table for.</span>
-</span><span id="Resolver-412"><a href="#Resolver-412"><span class="linenos">412</span></a><span class="sd"> Returns:</span>
-</span><span id="Resolver-413"><a href="#Resolver-413"><span class="linenos">413</span></a><span class="sd"> The table name if it can be found/inferred.</span>
-</span><span id="Resolver-414"><a href="#Resolver-414"><span class="linenos">414</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Resolver-415"><a href="#Resolver-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Resolver-416"><a href="#Resolver-416"><span class="linenos">416</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_unambiguous_columns</span><span class="p">(</span>
-</span><span id="Resolver-417"><a href="#Resolver-417"><span class="linenos">417</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span>
-</span><span id="Resolver-418"><a href="#Resolver-418"><span class="linenos">418</span></a> <span class="p">)</span>
-</span><span id="Resolver-419"><a href="#Resolver-419"><span class="linenos">419</span></a>
-</span><span id="Resolver-420"><a href="#Resolver-420"><span class="linenos">420</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</span>
-</span><span id="Resolver-421"><a href="#Resolver-421"><span class="linenos">421</span></a>
-</span><span id="Resolver-422"><a href="#Resolver-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_name</span><span class="p">:</span>
-</span><span id="Resolver-423"><a href="#Resolver-423"><span class="linenos">423</span></a> <span class="n">sources_without_schema</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="Resolver-424"><a href="#Resolver-424"><span class="linenos">424</span></a> <span class="n">source</span>
-</span><span id="Resolver-425"><a href="#Resolver-425"><span class="linenos">425</span></a> <span class="k">for</span> <span class="n">source</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="Resolver-426"><a href="#Resolver-426"><span class="linenos">426</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span> <span class="ow">or</span> <span class="s2">&quot;*&quot;</span> <span class="ow">in</span> <span class="n">columns</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver-401"><a href="#Resolver-401"><span class="linenos">401</span></a><span class="k">class</span> <span class="nc">Resolver</span><span class="p">:</span>
+</span><span id="Resolver-402"><a href="#Resolver-402"><span class="linenos">402</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Resolver-403"><a href="#Resolver-403"><span class="linenos">403</span></a><span class="sd"> Helper for resolving columns.</span>
+</span><span id="Resolver-404"><a href="#Resolver-404"><span class="linenos">404</span></a>
+</span><span id="Resolver-405"><a href="#Resolver-405"><span class="linenos">405</span></a><span class="sd"> This is a class so we can lazily load some things and easily share them across functions.</span>
+</span><span id="Resolver-406"><a href="#Resolver-406"><span class="linenos">406</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Resolver-407"><a href="#Resolver-407"><span class="linenos">407</span></a>
+</span><span id="Resolver-408"><a href="#Resolver-408"><span class="linenos">408</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">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
+</span><span id="Resolver-409"><a href="#Resolver-409"><span class="linenos">409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span> <span class="o">=</span> <span class="n">scope</span>
+</span><span id="Resolver-410"><a href="#Resolver-410"><span class="linenos">410</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="Resolver-411"><a href="#Resolver-411"><span class="linenos">411</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Resolver-412"><a href="#Resolver-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Resolver-413"><a href="#Resolver-413"><span class="linenos">413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Resolver-414"><a href="#Resolver-414"><span class="linenos">414</span></a>
+</span><span id="Resolver-415"><a href="#Resolver-415"><span class="linenos">415</span></a> <span class="k">def</span> <span class="nf">get_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column_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">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="Resolver-416"><a href="#Resolver-416"><span class="linenos">416</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Resolver-417"><a href="#Resolver-417"><span class="linenos">417</span></a><span class="sd"> Get the table for a column name.</span>
+</span><span id="Resolver-418"><a href="#Resolver-418"><span class="linenos">418</span></a>
+</span><span id="Resolver-419"><a href="#Resolver-419"><span class="linenos">419</span></a><span class="sd"> Args:</span>
+</span><span id="Resolver-420"><a href="#Resolver-420"><span class="linenos">420</span></a><span class="sd"> column_name: The column name to find the table for.</span>
+</span><span id="Resolver-421"><a href="#Resolver-421"><span class="linenos">421</span></a><span class="sd"> Returns:</span>
+</span><span id="Resolver-422"><a href="#Resolver-422"><span class="linenos">422</span></a><span class="sd"> The table name if it can be found/inferred.</span>
+</span><span id="Resolver-423"><a href="#Resolver-423"><span class="linenos">423</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Resolver-424"><a href="#Resolver-424"><span class="linenos">424</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Resolver-425"><a href="#Resolver-425"><span class="linenos">425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_unambiguous_columns</span><span class="p">(</span>
+</span><span id="Resolver-426"><a href="#Resolver-426"><span class="linenos">426</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span>
</span><span id="Resolver-427"><a href="#Resolver-427"><span class="linenos">427</span></a> <span class="p">)</span>
-</span><span id="Resolver-428"><a href="#Resolver-428"><span class="linenos">428</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sources_without_schema</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Resolver-429"><a href="#Resolver-429"><span class="linenos">429</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">sources_without_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Resolver-428"><a href="#Resolver-428"><span class="linenos">428</span></a>
+</span><span id="Resolver-429"><a href="#Resolver-429"><span class="linenos">429</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</span>
</span><span id="Resolver-430"><a href="#Resolver-430"><span class="linenos">430</span></a>
-</span><span id="Resolver-431"><a href="#Resolver-431"><span class="linenos">431</span></a> <span class="k">if</span> <span class="n">table_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">:</span>
-</span><span id="Resolver-432"><a href="#Resolver-432"><span class="linenos">432</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="n">table_name</span><span class="p">)</span>
-</span><span id="Resolver-433"><a href="#Resolver-433"><span class="linenos">433</span></a>
-</span><span id="Resolver-434"><a href="#Resolver-434"><span class="linenos">434</span></a> <span class="n">node</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">)</span>
-</span><span id="Resolver-435"><a href="#Resolver-435"><span class="linenos">435</span></a>
-</span><span id="Resolver-436"><a href="#Resolver-436"><span class="linenos">436</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Resolver-437"><a href="#Resolver-437"><span class="linenos">437</span></a> <span class="k">while</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="o">!=</span> <span class="n">table_name</span><span class="p">:</span>
-</span><span id="Resolver-438"><a href="#Resolver-438"><span class="linenos">438</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Resolver-431"><a href="#Resolver-431"><span class="linenos">431</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_name</span><span class="p">:</span>
+</span><span id="Resolver-432"><a href="#Resolver-432"><span class="linenos">432</span></a> <span class="n">sources_without_schema</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="Resolver-433"><a href="#Resolver-433"><span class="linenos">433</span></a> <span class="n">source</span>
+</span><span id="Resolver-434"><a href="#Resolver-434"><span class="linenos">434</span></a> <span class="k">for</span> <span class="n">source</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="Resolver-435"><a href="#Resolver-435"><span class="linenos">435</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span> <span class="ow">or</span> <span class="s2">&quot;*&quot;</span> <span class="ow">in</span> <span class="n">columns</span>
+</span><span id="Resolver-436"><a href="#Resolver-436"><span class="linenos">436</span></a> <span class="p">)</span>
+</span><span id="Resolver-437"><a href="#Resolver-437"><span class="linenos">437</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sources_without_schema</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Resolver-438"><a href="#Resolver-438"><span class="linenos">438</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">sources_without_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Resolver-439"><a href="#Resolver-439"><span class="linenos">439</span></a>
-</span><span id="Resolver-440"><a href="#Resolver-440"><span class="linenos">440</span></a> <span class="n">node_alias</span> <span class="o">=</span> <span class="n">node</span><span class="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="Resolver-441"><a href="#Resolver-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="n">node_alias</span><span class="p">:</span>
-</span><span id="Resolver-442"><a href="#Resolver-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="n">node_alias</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Resolver-443"><a href="#Resolver-443"><span class="linenos">443</span></a>
-</span><span id="Resolver-444"><a href="#Resolver-444"><span class="linenos">444</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><span id="Resolver-445"><a href="#Resolver-445"><span class="linenos">445</span></a> <span class="n">table_name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="kc">None</span>
-</span><span id="Resolver-446"><a href="#Resolver-446"><span class="linenos">446</span></a> <span class="p">)</span>
-</span><span id="Resolver-447"><a href="#Resolver-447"><span class="linenos">447</span></a>
-</span><span id="Resolver-448"><a href="#Resolver-448"><span class="linenos">448</span></a> <span class="nd">@property</span>
-</span><span id="Resolver-449"><a href="#Resolver-449"><span class="linenos">449</span></a> <span class="k">def</span> <span class="nf">all_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Resolver-450"><a href="#Resolver-450"><span class="linenos">450</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;All available columns of all sources in this scope&quot;&quot;&quot;</span>
-</span><span id="Resolver-451"><a href="#Resolver-451"><span class="linenos">451</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Resolver-452"><a href="#Resolver-452"><span class="linenos">452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Resolver-453"><a href="#Resolver-453"><span class="linenos">453</span></a> <span class="n">column</span> <span class="k">for</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span>
-</span><span id="Resolver-454"><a href="#Resolver-454"><span class="linenos">454</span></a> <span class="p">}</span>
-</span><span id="Resolver-455"><a href="#Resolver-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span>
+</span><span id="Resolver-440"><a href="#Resolver-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">table_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">:</span>
+</span><span id="Resolver-441"><a href="#Resolver-441"><span class="linenos">441</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="n">table_name</span><span class="p">)</span>
+</span><span id="Resolver-442"><a href="#Resolver-442"><span class="linenos">442</span></a>
+</span><span id="Resolver-443"><a href="#Resolver-443"><span class="linenos">443</span></a> <span class="n">node</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">)</span>
+</span><span id="Resolver-444"><a href="#Resolver-444"><span class="linenos">444</span></a>
+</span><span id="Resolver-445"><a href="#Resolver-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Resolver-446"><a href="#Resolver-446"><span class="linenos">446</span></a> <span class="k">while</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="o">!=</span> <span class="n">table_name</span><span class="p">:</span>
+</span><span id="Resolver-447"><a href="#Resolver-447"><span class="linenos">447</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Resolver-448"><a href="#Resolver-448"><span class="linenos">448</span></a>
+</span><span id="Resolver-449"><a href="#Resolver-449"><span class="linenos">449</span></a> <span class="n">node_alias</span> <span class="o">=</span> <span class="n">node</span><span class="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="Resolver-450"><a href="#Resolver-450"><span class="linenos">450</span></a> <span class="k">if</span> <span class="n">node_alias</span><span class="p">:</span>
+</span><span id="Resolver-451"><a href="#Resolver-451"><span class="linenos">451</span></a> <span class="k">return</span> <span class="n">node_alias</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Resolver-452"><a href="#Resolver-452"><span class="linenos">452</span></a>
+</span><span id="Resolver-453"><a href="#Resolver-453"><span class="linenos">453</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><span id="Resolver-454"><a href="#Resolver-454"><span class="linenos">454</span></a> <span class="n">table_name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="kc">None</span>
+</span><span id="Resolver-455"><a href="#Resolver-455"><span class="linenos">455</span></a> <span class="p">)</span>
</span><span id="Resolver-456"><a href="#Resolver-456"><span class="linenos">456</span></a>
-</span><span id="Resolver-457"><a href="#Resolver-457"><span class="linenos">457</span></a> <span class="k">def</span> <span class="nf">get_source_columns</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="n">only_visible</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Resolver-458"><a href="#Resolver-458"><span class="linenos">458</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve the source columns for a given source `name`&quot;&quot;&quot;</span>
-</span><span id="Resolver-459"><a href="#Resolver-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="Resolver-460"><a href="#Resolver-460"><span class="linenos">460</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Resolver-461"><a href="#Resolver-461"><span class="linenos">461</span></a>
-</span><span id="Resolver-462"><a href="#Resolver-462"><span class="linenos">462</span></a> <span class="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
-</span><span id="Resolver-463"><a href="#Resolver-463"><span class="linenos">463</span></a>
-</span><span id="Resolver-464"><a href="#Resolver-464"><span class="linenos">464</span></a> <span class="c1"># If referencing a table, return the columns from the schema</span>
-</span><span id="Resolver-465"><a href="#Resolver-465"><span class="linenos">465</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="Resolver-466"><a href="#Resolver-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">only_visible</span><span class="p">)</span>
-</span><span id="Resolver-467"><a href="#Resolver-467"><span class="linenos">467</span></a>
-</span><span id="Resolver-468"><a href="#Resolver-468"><span class="linenos">468</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">Scope</span><span class="p">)</span> <span class="ow">and</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">Values</span><span class="p">):</span>
-</span><span id="Resolver-469"><a href="#Resolver-469"><span class="linenos">469</span></a> <span class="k">return</span> <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><span id="Resolver-457"><a href="#Resolver-457"><span class="linenos">457</span></a> <span class="nd">@property</span>
+</span><span id="Resolver-458"><a href="#Resolver-458"><span class="linenos">458</span></a> <span class="k">def</span> <span class="nf">all_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Resolver-459"><a href="#Resolver-459"><span class="linenos">459</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;All available columns of all sources in this scope&quot;&quot;&quot;</span>
+</span><span id="Resolver-460"><a href="#Resolver-460"><span class="linenos">460</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Resolver-461"><a href="#Resolver-461"><span class="linenos">461</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Resolver-462"><a href="#Resolver-462"><span class="linenos">462</span></a> <span class="n">column</span> <span class="k">for</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span>
+</span><span id="Resolver-463"><a href="#Resolver-463"><span class="linenos">463</span></a> <span class="p">}</span>
+</span><span id="Resolver-464"><a href="#Resolver-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span>
+</span><span id="Resolver-465"><a href="#Resolver-465"><span class="linenos">465</span></a>
+</span><span id="Resolver-466"><a href="#Resolver-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">get_source_columns</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="n">only_visible</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Resolver-467"><a href="#Resolver-467"><span class="linenos">467</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve the source columns for a given source `name`&quot;&quot;&quot;</span>
+</span><span id="Resolver-468"><a href="#Resolver-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="Resolver-469"><a href="#Resolver-469"><span class="linenos">469</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Resolver-470"><a href="#Resolver-470"><span class="linenos">470</span></a>
-</span><span id="Resolver-471"><a href="#Resolver-471"><span class="linenos">471</span></a> <span class="c1"># Otherwise, if referencing another scope, return that scope&#39;s named selects</span>
-</span><span id="Resolver-472"><a href="#Resolver-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
-</span><span id="Resolver-473"><a href="#Resolver-473"><span class="linenos">473</span></a>
-</span><span id="Resolver-474"><a href="#Resolver-474"><span class="linenos">474</span></a> <span class="k">def</span> <span class="nf">_get_all_source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Resolver-475"><a href="#Resolver-475"><span class="linenos">475</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Resolver-476"><a href="#Resolver-476"><span class="linenos">476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Resolver-477"><a href="#Resolver-477"><span class="linenos">477</span></a> <span class="n">k</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
-</span><span id="Resolver-478"><a href="#Resolver-478"><span class="linenos">478</span></a> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">chain</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">lateral_sources</span><span class="p">)</span>
-</span><span id="Resolver-479"><a href="#Resolver-479"><span class="linenos">479</span></a> <span class="p">}</span>
-</span><span id="Resolver-480"><a href="#Resolver-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span>
-</span><span id="Resolver-481"><a href="#Resolver-481"><span class="linenos">481</span></a>
-</span><span id="Resolver-482"><a href="#Resolver-482"><span class="linenos">482</span></a> <span class="k">def</span> <span class="nf">_get_unambiguous_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_columns</span><span class="p">):</span>
-</span><span id="Resolver-483"><a href="#Resolver-483"><span class="linenos">483</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Resolver-484"><a href="#Resolver-484"><span class="linenos">484</span></a><span class="sd"> Find all the unambiguous columns in sources.</span>
-</span><span id="Resolver-485"><a href="#Resolver-485"><span class="linenos">485</span></a>
-</span><span id="Resolver-486"><a href="#Resolver-486"><span class="linenos">486</span></a><span class="sd"> Args:</span>
-</span><span id="Resolver-487"><a href="#Resolver-487"><span class="linenos">487</span></a><span class="sd"> source_columns (dict): Mapping of names to source columns</span>
-</span><span id="Resolver-488"><a href="#Resolver-488"><span class="linenos">488</span></a><span class="sd"> Returns:</span>
-</span><span id="Resolver-489"><a href="#Resolver-489"><span class="linenos">489</span></a><span class="sd"> dict: Mapping of column name to source name</span>
-</span><span id="Resolver-490"><a href="#Resolver-490"><span class="linenos">490</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Resolver-491"><a href="#Resolver-491"><span class="linenos">491</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">source_columns</span><span class="p">:</span>
-</span><span id="Resolver-492"><a href="#Resolver-492"><span class="linenos">492</span></a> <span class="k">return</span> <span class="p">{}</span>
-</span><span id="Resolver-493"><a href="#Resolver-493"><span class="linenos">493</span></a>
-</span><span id="Resolver-494"><a href="#Resolver-494"><span class="linenos">494</span></a> <span class="n">source_columns</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">source_columns</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
-</span><span id="Resolver-495"><a href="#Resolver-495"><span class="linenos">495</span></a>
-</span><span id="Resolver-496"><a href="#Resolver-496"><span class="linenos">496</span></a> <span class="n">first_table</span><span class="p">,</span> <span class="n">first_columns</span> <span class="o">=</span> <span class="n">source_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="Resolver-497"><a href="#Resolver-497"><span class="linenos">497</span></a> <span class="n">unambiguous_columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="n">first_table</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">first_columns</span><span class="p">)}</span>
-</span><span id="Resolver-498"><a href="#Resolver-498"><span class="linenos">498</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">unambiguous_columns</span><span class="p">)</span>
-</span><span id="Resolver-499"><a href="#Resolver-499"><span class="linenos">499</span></a>
-</span><span id="Resolver-500"><a href="#Resolver-500"><span class="linenos">500</span></a> <span class="k">for</span> <span class="n">table</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="Resolver-501"><a href="#Resolver-501"><span class="linenos">501</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Resolver-502"><a href="#Resolver-502"><span class="linenos">502</span></a> <span class="n">ambiguous</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">all_columns</span><span class="p">)</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">unique</span><span class="p">)</span>
-</span><span id="Resolver-503"><a href="#Resolver-503"><span class="linenos">503</span></a> <span class="n">all_columns</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Resolver-504"><a href="#Resolver-504"><span class="linenos">504</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">ambiguous</span><span class="p">:</span>
-</span><span id="Resolver-505"><a href="#Resolver-505"><span class="linenos">505</span></a> <span class="n">unambiguous_columns</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Resolver-506"><a href="#Resolver-506"><span class="linenos">506</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">unique</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">ambiguous</span><span class="p">):</span>
-</span><span id="Resolver-507"><a href="#Resolver-507"><span class="linenos">507</span></a> <span class="n">unambiguous_columns</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Resolver-471"><a href="#Resolver-471"><span class="linenos">471</span></a> <span class="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+</span><span id="Resolver-472"><a href="#Resolver-472"><span class="linenos">472</span></a>
+</span><span id="Resolver-473"><a href="#Resolver-473"><span class="linenos">473</span></a> <span class="c1"># If referencing a table, return the columns from the schema</span>
+</span><span id="Resolver-474"><a href="#Resolver-474"><span class="linenos">474</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="Resolver-475"><a href="#Resolver-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">only_visible</span><span class="p">)</span>
+</span><span id="Resolver-476"><a href="#Resolver-476"><span class="linenos">476</span></a>
+</span><span id="Resolver-477"><a href="#Resolver-477"><span class="linenos">477</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">Scope</span><span class="p">)</span> <span class="ow">and</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">Values</span><span class="p">):</span>
+</span><span id="Resolver-478"><a href="#Resolver-478"><span class="linenos">478</span></a> <span class="k">return</span> <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><span id="Resolver-479"><a href="#Resolver-479"><span class="linenos">479</span></a>
+</span><span id="Resolver-480"><a href="#Resolver-480"><span class="linenos">480</span></a> <span class="c1"># Otherwise, if referencing another scope, return that scope&#39;s named selects</span>
+</span><span id="Resolver-481"><a href="#Resolver-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
+</span><span id="Resolver-482"><a href="#Resolver-482"><span class="linenos">482</span></a>
+</span><span id="Resolver-483"><a href="#Resolver-483"><span class="linenos">483</span></a> <span class="k">def</span> <span class="nf">_get_all_source_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Resolver-484"><a href="#Resolver-484"><span class="linenos">484</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Resolver-485"><a href="#Resolver-485"><span class="linenos">485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Resolver-486"><a href="#Resolver-486"><span class="linenos">486</span></a> <span class="n">k</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_source_columns</span><span class="p">(</span><span class="n">k</span><span class="p">)</span>
+</span><span id="Resolver-487"><a href="#Resolver-487"><span class="linenos">487</span></a> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">chain</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">lateral_sources</span><span class="p">)</span>
+</span><span id="Resolver-488"><a href="#Resolver-488"><span class="linenos">488</span></a> <span class="p">}</span>
+</span><span id="Resolver-489"><a href="#Resolver-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span>
+</span><span id="Resolver-490"><a href="#Resolver-490"><span class="linenos">490</span></a>
+</span><span id="Resolver-491"><a href="#Resolver-491"><span class="linenos">491</span></a> <span class="k">def</span> <span class="nf">_get_unambiguous_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_columns</span><span class="p">):</span>
+</span><span id="Resolver-492"><a href="#Resolver-492"><span class="linenos">492</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Resolver-493"><a href="#Resolver-493"><span class="linenos">493</span></a><span class="sd"> Find all the unambiguous columns in sources.</span>
+</span><span id="Resolver-494"><a href="#Resolver-494"><span class="linenos">494</span></a>
+</span><span id="Resolver-495"><a href="#Resolver-495"><span class="linenos">495</span></a><span class="sd"> Args:</span>
+</span><span id="Resolver-496"><a href="#Resolver-496"><span class="linenos">496</span></a><span class="sd"> source_columns (dict): Mapping of names to source columns</span>
+</span><span id="Resolver-497"><a href="#Resolver-497"><span class="linenos">497</span></a><span class="sd"> Returns:</span>
+</span><span id="Resolver-498"><a href="#Resolver-498"><span class="linenos">498</span></a><span class="sd"> dict: Mapping of column name to source name</span>
+</span><span id="Resolver-499"><a href="#Resolver-499"><span class="linenos">499</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Resolver-500"><a href="#Resolver-500"><span class="linenos">500</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">source_columns</span><span class="p">:</span>
+</span><span id="Resolver-501"><a href="#Resolver-501"><span class="linenos">501</span></a> <span class="k">return</span> <span class="p">{}</span>
+</span><span id="Resolver-502"><a href="#Resolver-502"><span class="linenos">502</span></a>
+</span><span id="Resolver-503"><a href="#Resolver-503"><span class="linenos">503</span></a> <span class="n">source_columns</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">source_columns</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
+</span><span id="Resolver-504"><a href="#Resolver-504"><span class="linenos">504</span></a>
+</span><span id="Resolver-505"><a href="#Resolver-505"><span class="linenos">505</span></a> <span class="n">first_table</span><span class="p">,</span> <span class="n">first_columns</span> <span class="o">=</span> <span class="n">source_columns</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Resolver-506"><a href="#Resolver-506"><span class="linenos">506</span></a> <span class="n">unambiguous_columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">col</span><span class="p">:</span> <span class="n">first_table</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">first_columns</span><span class="p">)}</span>
+</span><span id="Resolver-507"><a href="#Resolver-507"><span class="linenos">507</span></a> <span class="n">all_columns</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">unambiguous_columns</span><span class="p">)</span>
</span><span id="Resolver-508"><a href="#Resolver-508"><span class="linenos">508</span></a>
-</span><span id="Resolver-509"><a href="#Resolver-509"><span class="linenos">509</span></a> <span class="k">return</span> <span class="n">unambiguous_columns</span>
-</span><span id="Resolver-510"><a href="#Resolver-510"><span class="linenos">510</span></a>
-</span><span id="Resolver-511"><a href="#Resolver-511"><span class="linenos">511</span></a> <span class="nd">@staticmethod</span>
-</span><span id="Resolver-512"><a href="#Resolver-512"><span class="linenos">512</span></a> <span class="k">def</span> <span class="nf">_find_unique_columns</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
-</span><span id="Resolver-513"><a href="#Resolver-513"><span class="linenos">513</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Resolver-514"><a href="#Resolver-514"><span class="linenos">514</span></a><span class="sd"> Find the unique columns in a list of columns.</span>
-</span><span id="Resolver-515"><a href="#Resolver-515"><span class="linenos">515</span></a>
-</span><span id="Resolver-516"><a href="#Resolver-516"><span class="linenos">516</span></a><span class="sd"> Example:</span>
-</span><span id="Resolver-517"><a href="#Resolver-517"><span class="linenos">517</span></a><span class="sd"> &gt;&gt;&gt; sorted(Resolver._find_unique_columns([&quot;a&quot;, &quot;b&quot;, &quot;b&quot;, &quot;c&quot;]))</span>
-</span><span id="Resolver-518"><a href="#Resolver-518"><span class="linenos">518</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
+</span><span id="Resolver-509"><a href="#Resolver-509"><span class="linenos">509</span></a> <span class="k">for</span> <span class="n">table</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="n">source_columns</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="Resolver-510"><a href="#Resolver-510"><span class="linenos">510</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_unique_columns</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Resolver-511"><a href="#Resolver-511"><span class="linenos">511</span></a> <span class="n">ambiguous</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">all_columns</span><span class="p">)</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">unique</span><span class="p">)</span>
+</span><span id="Resolver-512"><a href="#Resolver-512"><span class="linenos">512</span></a> <span class="n">all_columns</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Resolver-513"><a href="#Resolver-513"><span class="linenos">513</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">ambiguous</span><span class="p">:</span>
+</span><span id="Resolver-514"><a href="#Resolver-514"><span class="linenos">514</span></a> <span class="n">unambiguous_columns</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Resolver-515"><a href="#Resolver-515"><span class="linenos">515</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">unique</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">ambiguous</span><span class="p">):</span>
+</span><span id="Resolver-516"><a href="#Resolver-516"><span class="linenos">516</span></a> <span class="n">unambiguous_columns</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Resolver-517"><a href="#Resolver-517"><span class="linenos">517</span></a>
+</span><span id="Resolver-518"><a href="#Resolver-518"><span class="linenos">518</span></a> <span class="k">return</span> <span class="n">unambiguous_columns</span>
</span><span id="Resolver-519"><a href="#Resolver-519"><span class="linenos">519</span></a>
-</span><span id="Resolver-520"><a href="#Resolver-520"><span class="linenos">520</span></a><span class="sd"> This is necessary because duplicate column names are ambiguous.</span>
-</span><span id="Resolver-521"><a href="#Resolver-521"><span class="linenos">521</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Resolver-522"><a href="#Resolver-522"><span class="linenos">522</span></a> <span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Resolver-523"><a href="#Resolver-523"><span class="linenos">523</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="Resolver-524"><a href="#Resolver-524"><span class="linenos">524</span></a> <span class="n">counts</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
-</span><span id="Resolver-525"><a href="#Resolver-525"><span class="linenos">525</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">column</span> <span class="k">for</span> <span class="n">column</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">counts</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">}</span>
+</span><span id="Resolver-520"><a href="#Resolver-520"><span class="linenos">520</span></a> <span class="nd">@staticmethod</span>
+</span><span id="Resolver-521"><a href="#Resolver-521"><span class="linenos">521</span></a> <span class="k">def</span> <span class="nf">_find_unique_columns</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
+</span><span id="Resolver-522"><a href="#Resolver-522"><span class="linenos">522</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Resolver-523"><a href="#Resolver-523"><span class="linenos">523</span></a><span class="sd"> Find the unique columns in a list of columns.</span>
+</span><span id="Resolver-524"><a href="#Resolver-524"><span class="linenos">524</span></a>
+</span><span id="Resolver-525"><a href="#Resolver-525"><span class="linenos">525</span></a><span class="sd"> Example:</span>
+</span><span id="Resolver-526"><a href="#Resolver-526"><span class="linenos">526</span></a><span class="sd"> &gt;&gt;&gt; sorted(Resolver._find_unique_columns([&quot;a&quot;, &quot;b&quot;, &quot;b&quot;, &quot;c&quot;]))</span>
+</span><span id="Resolver-527"><a href="#Resolver-527"><span class="linenos">527</span></a><span class="sd"> [&#39;a&#39;, &#39;c&#39;]</span>
+</span><span id="Resolver-528"><a href="#Resolver-528"><span class="linenos">528</span></a>
+</span><span id="Resolver-529"><a href="#Resolver-529"><span class="linenos">529</span></a><span class="sd"> This is necessary because duplicate column names are ambiguous.</span>
+</span><span id="Resolver-530"><a href="#Resolver-530"><span class="linenos">530</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Resolver-531"><a href="#Resolver-531"><span class="linenos">531</span></a> <span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Resolver-532"><a href="#Resolver-532"><span class="linenos">532</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="Resolver-533"><a href="#Resolver-533"><span class="linenos">533</span></a> <span class="n">counts</span><span class="p">[</span><span class="n">column</span><span class="p">]</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
+</span><span id="Resolver-534"><a href="#Resolver-534"><span class="linenos">534</span></a> <span class="k">return</span> <span class="p">{</span><span class="n">column</span> <span class="k">for</span> <span class="n">column</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">counts</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">}</span>
</span></pre></div>
@@ -879,12 +894,12 @@
</div>
<a class="headerlink" href="#Resolver.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver.__init__-399"><a href="#Resolver.__init__-399"><span class="linenos">399</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">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
-</span><span id="Resolver.__init__-400"><a href="#Resolver.__init__-400"><span class="linenos">400</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span> <span class="o">=</span> <span class="n">scope</span>
-</span><span id="Resolver.__init__-401"><a href="#Resolver.__init__-401"><span class="linenos">401</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="Resolver.__init__-402"><a href="#Resolver.__init__-402"><span class="linenos">402</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Resolver.__init__-403"><a href="#Resolver.__init__-403"><span class="linenos">403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Resolver.__init__-404"><a href="#Resolver.__init__-404"><span class="linenos">404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver.__init__-408"><a href="#Resolver.__init__-408"><span class="linenos">408</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">scope</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
+</span><span id="Resolver.__init__-409"><a href="#Resolver.__init__-409"><span class="linenos">409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span> <span class="o">=</span> <span class="n">scope</span>
+</span><span id="Resolver.__init__-410"><a href="#Resolver.__init__-410"><span class="linenos">410</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="Resolver.__init__-411"><a href="#Resolver.__init__-411"><span class="linenos">411</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_source_columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Resolver.__init__-412"><a href="#Resolver.__init__-412"><span class="linenos">412</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Resolver.__init__-413"><a href="#Resolver.__init__-413"><span class="linenos">413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_all_columns</span> <span class="o">=</span> <span class="kc">None</span>
</span></pre></div>
@@ -902,47 +917,47 @@
</div>
<a class="headerlink" href="#Resolver.get_table"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver.get_table-406"><a href="#Resolver.get_table-406"><span class="linenos">406</span></a> <span class="k">def</span> <span class="nf">get_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column_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">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="Resolver.get_table-407"><a href="#Resolver.get_table-407"><span class="linenos">407</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Resolver.get_table-408"><a href="#Resolver.get_table-408"><span class="linenos">408</span></a><span class="sd"> Get the table for a column name.</span>
-</span><span id="Resolver.get_table-409"><a href="#Resolver.get_table-409"><span class="linenos">409</span></a>
-</span><span id="Resolver.get_table-410"><a href="#Resolver.get_table-410"><span class="linenos">410</span></a><span class="sd"> Args:</span>
-</span><span id="Resolver.get_table-411"><a href="#Resolver.get_table-411"><span class="linenos">411</span></a><span class="sd"> column_name: The column name to find the table for.</span>
-</span><span id="Resolver.get_table-412"><a href="#Resolver.get_table-412"><span class="linenos">412</span></a><span class="sd"> Returns:</span>
-</span><span id="Resolver.get_table-413"><a href="#Resolver.get_table-413"><span class="linenos">413</span></a><span class="sd"> The table name if it can be found/inferred.</span>
-</span><span id="Resolver.get_table-414"><a href="#Resolver.get_table-414"><span class="linenos">414</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Resolver.get_table-415"><a href="#Resolver.get_table-415"><span class="linenos">415</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Resolver.get_table-416"><a href="#Resolver.get_table-416"><span class="linenos">416</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_unambiguous_columns</span><span class="p">(</span>
-</span><span id="Resolver.get_table-417"><a href="#Resolver.get_table-417"><span class="linenos">417</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span>
-</span><span id="Resolver.get_table-418"><a href="#Resolver.get_table-418"><span class="linenos">418</span></a> <span class="p">)</span>
-</span><span id="Resolver.get_table-419"><a href="#Resolver.get_table-419"><span class="linenos">419</span></a>
-</span><span id="Resolver.get_table-420"><a href="#Resolver.get_table-420"><span class="linenos">420</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</span>
-</span><span id="Resolver.get_table-421"><a href="#Resolver.get_table-421"><span class="linenos">421</span></a>
-</span><span id="Resolver.get_table-422"><a href="#Resolver.get_table-422"><span class="linenos">422</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_name</span><span class="p">:</span>
-</span><span id="Resolver.get_table-423"><a href="#Resolver.get_table-423"><span class="linenos">423</span></a> <span class="n">sources_without_schema</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
-</span><span id="Resolver.get_table-424"><a href="#Resolver.get_table-424"><span class="linenos">424</span></a> <span class="n">source</span>
-</span><span id="Resolver.get_table-425"><a href="#Resolver.get_table-425"><span class="linenos">425</span></a> <span class="k">for</span> <span class="n">source</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="Resolver.get_table-426"><a href="#Resolver.get_table-426"><span class="linenos">426</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span> <span class="ow">or</span> <span class="s2">&quot;*&quot;</span> <span class="ow">in</span> <span class="n">columns</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver.get_table-415"><a href="#Resolver.get_table-415"><span class="linenos">415</span></a> <span class="k">def</span> <span class="nf">get_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column_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">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="Resolver.get_table-416"><a href="#Resolver.get_table-416"><span class="linenos">416</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Resolver.get_table-417"><a href="#Resolver.get_table-417"><span class="linenos">417</span></a><span class="sd"> Get the table for a column name.</span>
+</span><span id="Resolver.get_table-418"><a href="#Resolver.get_table-418"><span class="linenos">418</span></a>
+</span><span id="Resolver.get_table-419"><a href="#Resolver.get_table-419"><span class="linenos">419</span></a><span class="sd"> Args:</span>
+</span><span id="Resolver.get_table-420"><a href="#Resolver.get_table-420"><span class="linenos">420</span></a><span class="sd"> column_name: The column name to find the table for.</span>
+</span><span id="Resolver.get_table-421"><a href="#Resolver.get_table-421"><span class="linenos">421</span></a><span class="sd"> Returns:</span>
+</span><span id="Resolver.get_table-422"><a href="#Resolver.get_table-422"><span class="linenos">422</span></a><span class="sd"> The table name if it can be found/inferred.</span>
+</span><span id="Resolver.get_table-423"><a href="#Resolver.get_table-423"><span class="linenos">423</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Resolver.get_table-424"><a href="#Resolver.get_table-424"><span class="linenos">424</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Resolver.get_table-425"><a href="#Resolver.get_table-425"><span class="linenos">425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_unambiguous_columns</span><span class="p">(</span>
+</span><span id="Resolver.get_table-426"><a href="#Resolver.get_table-426"><span class="linenos">426</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span>
</span><span id="Resolver.get_table-427"><a href="#Resolver.get_table-427"><span class="linenos">427</span></a> <span class="p">)</span>
-</span><span id="Resolver.get_table-428"><a href="#Resolver.get_table-428"><span class="linenos">428</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sources_without_schema</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Resolver.get_table-429"><a href="#Resolver.get_table-429"><span class="linenos">429</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">sources_without_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Resolver.get_table-428"><a href="#Resolver.get_table-428"><span class="linenos">428</span></a>
+</span><span id="Resolver.get_table-429"><a href="#Resolver.get_table-429"><span class="linenos">429</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unambiguous_columns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column_name</span><span class="p">)</span>
</span><span id="Resolver.get_table-430"><a href="#Resolver.get_table-430"><span class="linenos">430</span></a>
-</span><span id="Resolver.get_table-431"><a href="#Resolver.get_table-431"><span class="linenos">431</span></a> <span class="k">if</span> <span class="n">table_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">:</span>
-</span><span id="Resolver.get_table-432"><a href="#Resolver.get_table-432"><span class="linenos">432</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="n">table_name</span><span class="p">)</span>
-</span><span id="Resolver.get_table-433"><a href="#Resolver.get_table-433"><span class="linenos">433</span></a>
-</span><span id="Resolver.get_table-434"><a href="#Resolver.get_table-434"><span class="linenos">434</span></a> <span class="n">node</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">)</span>
-</span><span id="Resolver.get_table-435"><a href="#Resolver.get_table-435"><span class="linenos">435</span></a>
-</span><span id="Resolver.get_table-436"><a href="#Resolver.get_table-436"><span class="linenos">436</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Resolver.get_table-437"><a href="#Resolver.get_table-437"><span class="linenos">437</span></a> <span class="k">while</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="o">!=</span> <span class="n">table_name</span><span class="p">:</span>
-</span><span id="Resolver.get_table-438"><a href="#Resolver.get_table-438"><span class="linenos">438</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Resolver.get_table-431"><a href="#Resolver.get_table-431"><span class="linenos">431</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table_name</span><span class="p">:</span>
+</span><span id="Resolver.get_table-432"><a href="#Resolver.get_table-432"><span class="linenos">432</span></a> <span class="n">sources_without_schema</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
+</span><span id="Resolver.get_table-433"><a href="#Resolver.get_table-433"><span class="linenos">433</span></a> <span class="n">source</span>
+</span><span id="Resolver.get_table-434"><a href="#Resolver.get_table-434"><span class="linenos">434</span></a> <span class="k">for</span> <span class="n">source</span><span class="p">,</span> <span class="n">columns</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_all_source_columns</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+</span><span id="Resolver.get_table-435"><a href="#Resolver.get_table-435"><span class="linenos">435</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">columns</span> <span class="ow">or</span> <span class="s2">&quot;*&quot;</span> <span class="ow">in</span> <span class="n">columns</span>
+</span><span id="Resolver.get_table-436"><a href="#Resolver.get_table-436"><span class="linenos">436</span></a> <span class="p">)</span>
+</span><span id="Resolver.get_table-437"><a href="#Resolver.get_table-437"><span class="linenos">437</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sources_without_schema</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Resolver.get_table-438"><a href="#Resolver.get_table-438"><span class="linenos">438</span></a> <span class="n">table_name</span> <span class="o">=</span> <span class="n">sources_without_schema</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Resolver.get_table-439"><a href="#Resolver.get_table-439"><span class="linenos">439</span></a>
-</span><span id="Resolver.get_table-440"><a href="#Resolver.get_table-440"><span class="linenos">440</span></a> <span class="n">node_alias</span> <span class="o">=</span> <span class="n">node</span><span class="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="Resolver.get_table-441"><a href="#Resolver.get_table-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="n">node_alias</span><span class="p">:</span>
-</span><span id="Resolver.get_table-442"><a href="#Resolver.get_table-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="n">node_alias</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Resolver.get_table-443"><a href="#Resolver.get_table-443"><span class="linenos">443</span></a>
-</span><span id="Resolver.get_table-444"><a href="#Resolver.get_table-444"><span class="linenos">444</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><span id="Resolver.get_table-445"><a href="#Resolver.get_table-445"><span class="linenos">445</span></a> <span class="n">table_name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="kc">None</span>
-</span><span id="Resolver.get_table-446"><a href="#Resolver.get_table-446"><span class="linenos">446</span></a> <span class="p">)</span>
+</span><span id="Resolver.get_table-440"><a href="#Resolver.get_table-440"><span class="linenos">440</span></a> <span class="k">if</span> <span class="n">table_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">:</span>
+</span><span id="Resolver.get_table-441"><a href="#Resolver.get_table-441"><span class="linenos">441</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="n">table_name</span><span class="p">)</span>
+</span><span id="Resolver.get_table-442"><a href="#Resolver.get_table-442"><span class="linenos">442</span></a>
+</span><span id="Resolver.get_table-443"><a href="#Resolver.get_table-443"><span class="linenos">443</span></a> <span class="n">node</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">table_name</span><span class="p">)</span>
+</span><span id="Resolver.get_table-444"><a href="#Resolver.get_table-444"><span class="linenos">444</span></a>
+</span><span id="Resolver.get_table-445"><a href="#Resolver.get_table-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="Resolver.get_table-446"><a href="#Resolver.get_table-446"><span class="linenos">446</span></a> <span class="k">while</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="o">.</span><span class="n">alias</span> <span class="o">!=</span> <span class="n">table_name</span><span class="p">:</span>
+</span><span id="Resolver.get_table-447"><a href="#Resolver.get_table-447"><span class="linenos">447</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Resolver.get_table-448"><a href="#Resolver.get_table-448"><span class="linenos">448</span></a>
+</span><span id="Resolver.get_table-449"><a href="#Resolver.get_table-449"><span class="linenos">449</span></a> <span class="n">node_alias</span> <span class="o">=</span> <span class="n">node</span><span class="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="Resolver.get_table-450"><a href="#Resolver.get_table-450"><span class="linenos">450</span></a> <span class="k">if</span> <span class="n">node_alias</span><span class="p">:</span>
+</span><span id="Resolver.get_table-451"><a href="#Resolver.get_table-451"><span class="linenos">451</span></a> <span class="k">return</span> <span class="n">node_alias</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Resolver.get_table-452"><a href="#Resolver.get_table-452"><span class="linenos">452</span></a>
+</span><span id="Resolver.get_table-453"><a href="#Resolver.get_table-453"><span class="linenos">453</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><span id="Resolver.get_table-454"><a href="#Resolver.get_table-454"><span class="linenos">454</span></a> <span class="n">table_name</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="kc">None</span>
+</span><span id="Resolver.get_table-455"><a href="#Resolver.get_table-455"><span class="linenos">455</span></a> <span class="p">)</span>
</span></pre></div>
@@ -987,22 +1002,22 @@
</div>
<a class="headerlink" href="#Resolver.get_source_columns"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver.get_source_columns-457"><a href="#Resolver.get_source_columns-457"><span class="linenos">457</span></a> <span class="k">def</span> <span class="nf">get_source_columns</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="n">only_visible</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Resolver.get_source_columns-458"><a href="#Resolver.get_source_columns-458"><span class="linenos">458</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve the source columns for a given source `name`&quot;&quot;&quot;</span>
-</span><span id="Resolver.get_source_columns-459"><a href="#Resolver.get_source_columns-459"><span class="linenos">459</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
-</span><span id="Resolver.get_source_columns-460"><a href="#Resolver.get_source_columns-460"><span class="linenos">460</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Resolver.get_source_columns-461"><a href="#Resolver.get_source_columns-461"><span class="linenos">461</span></a>
-</span><span id="Resolver.get_source_columns-462"><a href="#Resolver.get_source_columns-462"><span class="linenos">462</span></a> <span class="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
-</span><span id="Resolver.get_source_columns-463"><a href="#Resolver.get_source_columns-463"><span class="linenos">463</span></a>
-</span><span id="Resolver.get_source_columns-464"><a href="#Resolver.get_source_columns-464"><span class="linenos">464</span></a> <span class="c1"># If referencing a table, return the columns from the schema</span>
-</span><span id="Resolver.get_source_columns-465"><a href="#Resolver.get_source_columns-465"><span class="linenos">465</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="Resolver.get_source_columns-466"><a href="#Resolver.get_source_columns-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">only_visible</span><span class="p">)</span>
-</span><span id="Resolver.get_source_columns-467"><a href="#Resolver.get_source_columns-467"><span class="linenos">467</span></a>
-</span><span id="Resolver.get_source_columns-468"><a href="#Resolver.get_source_columns-468"><span class="linenos">468</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">Scope</span><span class="p">)</span> <span class="ow">and</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">Values</span><span class="p">):</span>
-</span><span id="Resolver.get_source_columns-469"><a href="#Resolver.get_source_columns-469"><span class="linenos">469</span></a> <span class="k">return</span> <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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Resolver.get_source_columns-466"><a href="#Resolver.get_source_columns-466"><span class="linenos">466</span></a> <span class="k">def</span> <span class="nf">get_source_columns</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="n">only_visible</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Resolver.get_source_columns-467"><a href="#Resolver.get_source_columns-467"><span class="linenos">467</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Resolve the source columns for a given source `name`&quot;&quot;&quot;</span>
+</span><span id="Resolver.get_source_columns-468"><a href="#Resolver.get_source_columns-468"><span class="linenos">468</span></a> <span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">:</span>
+</span><span id="Resolver.get_source_columns-469"><a href="#Resolver.get_source_columns-469"><span class="linenos">469</span></a> <span class="k">raise</span> <span class="n">OptimizeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown table: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Resolver.get_source_columns-470"><a href="#Resolver.get_source_columns-470"><span class="linenos">470</span></a>
-</span><span id="Resolver.get_source_columns-471"><a href="#Resolver.get_source_columns-471"><span class="linenos">471</span></a> <span class="c1"># Otherwise, if referencing another scope, return that scope&#39;s named selects</span>
-</span><span id="Resolver.get_source_columns-472"><a href="#Resolver.get_source_columns-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
+</span><span id="Resolver.get_source_columns-471"><a href="#Resolver.get_source_columns-471"><span class="linenos">471</span></a> <span class="n">source</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">scope</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
+</span><span id="Resolver.get_source_columns-472"><a href="#Resolver.get_source_columns-472"><span class="linenos">472</span></a>
+</span><span id="Resolver.get_source_columns-473"><a href="#Resolver.get_source_columns-473"><span class="linenos">473</span></a> <span class="c1"># If referencing a table, return the columns from the schema</span>
+</span><span id="Resolver.get_source_columns-474"><a href="#Resolver.get_source_columns-474"><span class="linenos">474</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="Resolver.get_source_columns-475"><a href="#Resolver.get_source_columns-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="o">.</span><span class="n">column_names</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">only_visible</span><span class="p">)</span>
+</span><span id="Resolver.get_source_columns-476"><a href="#Resolver.get_source_columns-476"><span class="linenos">476</span></a>
+</span><span id="Resolver.get_source_columns-477"><a href="#Resolver.get_source_columns-477"><span class="linenos">477</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">Scope</span><span class="p">)</span> <span class="ow">and</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">Values</span><span class="p">):</span>
+</span><span id="Resolver.get_source_columns-478"><a href="#Resolver.get_source_columns-478"><span class="linenos">478</span></a> <span class="k">return</span> <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><span id="Resolver.get_source_columns-479"><a href="#Resolver.get_source_columns-479"><span class="linenos">479</span></a>
+</span><span id="Resolver.get_source_columns-480"><a href="#Resolver.get_source_columns-480"><span class="linenos">480</span></a> <span class="c1"># Otherwise, if referencing another scope, return that scope&#39;s named selects</span>
+</span><span id="Resolver.get_source_columns-481"><a href="#Resolver.get_source_columns-481"><span class="linenos">481</span></a> <span class="k">return</span> <span class="n">source</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span>
</span></pre></div>
diff --git a/docs/sqlglot/optimizer/simplify.html b/docs/sqlglot/optimizer/simplify.html
index 5ba4a5e..598977c 100644
--- a/docs/sqlglot/optimizer/simplify.html
+++ b/docs/sqlglot/optimizer/simplify.html
@@ -175,449 +175,458 @@
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</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">expression</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;low&quot;</span><span class="p">]),</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</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">expression</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;high&quot;</span><span class="p">]),</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="p">)</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="p">)</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="k">return</span> <span class="n">expression</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="k">def</span> <span class="nf">simplify_not</span><span class="p">(</span><span class="n">expression</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;</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="sd"> Demorgan&#39;s Law</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</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">Not</span><span class="p">):</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">if</span> <span class="n">is_null</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-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</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">Paren</span><span class="p">):</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">condition</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">unnest</span><span class="p">()</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">):</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</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">condition</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">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</span><span class="p">))</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">):</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</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">condition</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">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</span><span class="p">))</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="k">if</span> <span class="n">always_true</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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">if</span> <span class="n">is_false</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-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">if</span> <span class="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">Not</span><span class="p">):</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="c1"># double negation</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="c1"># NOT NOT x -&gt; x</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a><span class="k">def</span> <span class="nf">flatten</span><span class="p">(</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="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</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-101"><a href="#L-101"><span class="linenos">101</span></a> <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">args</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">child</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">child</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-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">node</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="k">def</span> <span class="nf">simplify_connectors</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">def</span> <span class="nf">_simplify_connectors</span><span class="p">(</span><span class="n">expression</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-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="k">if</span> <span class="n">left</span> <span class="o">==</span> <span class="n">right</span><span class="p">:</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</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">And</span><span class="p">):</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</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">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</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="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">right</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</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-124"><a href="#L-124"><span class="linenos">124</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">Or</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">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</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">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">if</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 class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="p">):</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="n">right</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</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">left</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">or_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="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-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_connectors</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a><span class="n">LT_LTE</span> <span class="o">=</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="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">)</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a><span class="n">GT_GTE</span> <span class="o">=</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="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">)</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="n">COMPARISONS</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="o">*</span><span class="n">LT_LTE</span><span class="p">,</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="o">*</span><span class="n">GT_GTE</span><span class="p">,</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</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><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">INVERSE_COMPARISONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="p">}</span>
-</span><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><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="k">def</span> <span class="nf">_simplify_comparison</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">or_</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">COMPARISONS</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">COMPARISONS</span><span class="p">):</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">ll</span><span class="p">,</span> <span class="n">lr</span> <span class="o">=</span> <span class="n">left</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-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">rl</span><span class="p">,</span> <span class="n">rr</span> <span class="o">=</span> <span class="n">right</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-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">largs</span> <span class="o">=</span> <span class="p">{</span><span class="n">ll</span><span class="p">,</span> <span class="n">lr</span><span class="p">}</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">rargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">rl</span><span class="p">,</span> <span class="n">rr</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="k">def</span> <span class="nf">simplify_not</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd"> Demorgan&#39;s Law</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</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">Not</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="n">is_null</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-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</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="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">Paren</span><span class="p">):</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">condition</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">unnest</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">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</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="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">left</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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</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-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="p">)</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">):</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">left</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-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</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-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="p">)</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">if</span> <span class="n">always_true</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-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">if</span> <span class="n">is_false</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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</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">Not</span><span class="p">):</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="c1"># double negation</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="c1"># NOT NOT x -&gt; x</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a><span class="k">def</span> <span class="nf">flatten</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</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="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-110"><a href="#L-110"><span class="linenos">110</span></a> <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">args</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">child</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">child</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-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="n">node</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="k">def</span> <span class="nf">simplify_connectors</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">def</span> <span class="nf">_simplify_connectors</span><span class="p">(</span><span class="n">expression</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-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="k">if</span> <span class="n">left</span> <span class="o">==</span> <span class="n">right</span><span class="p">:</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</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">And</span><span class="p">):</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</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="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</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="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</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="n">left</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</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-133"><a href="#L-133"><span class="linenos">133</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">Or</span><span class="p">):</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</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="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="p">(</span><span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</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 class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</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">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">or_</span><span class="o">=</span><span class="kc">True</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">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-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_connectors</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="n">LT_LTE</span> <span class="o">=</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="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">)</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="n">GT_GTE</span> <span class="o">=</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="n">exp</span><span class="o">.</span><span class="n">GTE</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="n">COMPARISONS</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="o">*</span><span class="n">LT_LTE</span><span class="p">,</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="o">*</span><span class="n">GT_GTE</span><span class="p">,</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="p">)</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="n">INVERSE_COMPARISONS</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">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a><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="n">matching</span> <span class="o">=</span> <span class="n">largs</span> <span class="o">&amp;</span> <span class="n">rargs</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">matching</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</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-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="k">if</span> <span class="n">matching</span> <span class="ow">and</span> <span class="n">columns</span><span class="p">:</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="n">l</span> <span class="o">=</span> <span class="n">first</span><span class="p">(</span><span class="n">largs</span> <span class="o">-</span> <span class="n">columns</span><span class="p">)</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">first</span><span class="p">(</span><span class="n">rargs</span> <span class="o">-</span> <span class="n">columns</span><span class="p">)</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="n">expression</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="c1"># make sure the comparison is always of the form x &gt; 1 instead of 1 &lt; x</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="n">left</span><span class="o">.</span><span class="vm">__class__</span> <span class="ow">in</span> <span class="n">INVERSE_COMPARISONS</span> <span class="ow">and</span> <span class="n">l</span> <span class="o">==</span> <span class="n">ll</span><span class="p">:</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">INVERSE_COMPARISONS</span><span class="p">[</span><span class="n">left</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">lr</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">ll</span><span class="p">)</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">if</span> <span class="n">right</span><span class="o">.</span><span class="vm">__class__</span> <span class="ow">in</span> <span class="n">INVERSE_COMPARISONS</span> <span class="ow">and</span> <span class="n">r</span> <span class="o">==</span> <span class="n">rl</span><span class="p">:</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">INVERSE_COMPARISONS</span><span class="p">[</span><span class="n">right</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">rr</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">rl</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="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_number</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">l</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">elif</span> <span class="n">l</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">l</span> <span class="o">=</span> <span class="n">l</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">else</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="kc">None</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">def</span> <span class="nf">_simplify_comparison</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">or_</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">COMPARISONS</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">COMPARISONS</span><span class="p">):</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">ll</span><span class="p">,</span> <span class="n">lr</span> <span class="o">=</span> <span class="n">left</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-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">rl</span><span class="p">,</span> <span class="n">rr</span> <span class="o">=</span> <span class="n">right</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-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">largs</span> <span class="o">=</span> <span class="p">{</span><span class="n">ll</span><span class="p">,</span> <span class="n">lr</span><span class="p">}</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">rargs</span> <span class="o">=</span> <span class="p">{</span><span class="n">rl</span><span class="p">,</span> <span class="n">rr</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="n">matching</span> <span class="o">=</span> <span class="n">largs</span> <span class="o">&amp;</span> <span class="n">rargs</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">matching</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">m</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-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="k">if</span> <span class="n">matching</span> <span class="ow">and</span> <span class="n">columns</span><span class="p">:</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">l</span> <span class="o">=</span> <span class="n">first</span><span class="p">(</span><span class="n">largs</span> <span class="o">-</span> <span class="n">columns</span><span class="p">)</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">first</span><span class="p">(</span><span class="n">rargs</span> <span class="o">-</span> <span class="n">columns</span><span class="p">)</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="n">expression</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="c1"># make sure the comparison is always of the form x &gt; 1 instead of 1 &lt; x</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="n">left</span><span class="o">.</span><span class="vm">__class__</span> <span class="ow">in</span> <span class="n">INVERSE_COMPARISONS</span> <span class="ow">and</span> <span class="n">l</span> <span class="o">==</span> <span class="n">ll</span><span class="p">:</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">INVERSE_COMPARISONS</span><span class="p">[</span><span class="n">left</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">lr</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">ll</span><span class="p">)</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">if</span> <span class="n">right</span><span class="o">.</span><span class="vm">__class__</span> <span class="ow">in</span> <span class="n">INVERSE_COMPARISONS</span> <span class="ow">and</span> <span class="n">r</span> <span class="o">==</span> <span class="n">rl</span><span class="p">:</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">right</span> <span class="o">=</span> <span class="n">INVERSE_COMPARISONS</span><span class="p">[</span><span class="n">right</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">rr</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">rl</span><span class="p">)</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">for</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">av</span><span class="p">),</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">bv</span><span class="p">)</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</span><span class="p">(((</span><span class="n">left</span><span class="p">,</span> <span class="n">l</span><span class="p">),</span> <span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">r</span><span class="p">))):</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">LT_LTE</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">LT_LTE</span><span class="p">):</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="k">return</span> <span class="n">left</span> <span class="k">if</span> <span class="p">(</span><span class="n">av</span> <span class="o">&gt;</span> <span class="n">bv</span> <span class="k">if</span> <span class="n">or_</span> <span class="k">else</span> <span class="n">av</span> <span class="o">&lt;=</span> <span class="n">bv</span><span class="p">)</span> <span class="k">else</span> <span class="n">right</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">GT_GTE</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">GT_GTE</span><span class="p">):</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="k">return</span> <span class="n">left</span> <span class="k">if</span> <span class="p">(</span><span class="n">av</span> <span class="o">&lt;</span> <span class="n">bv</span> <span class="k">if</span> <span class="n">or_</span> <span class="k">else</span> <span class="n">av</span> <span class="o">&gt;=</span> <span class="n">bv</span><span class="p">)</span> <span class="k">else</span> <span class="n">right</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="c1"># we can&#39;t ever shortcut to true because the column could be null</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">or_</span><span class="p">:</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</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="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">GT_GTE</span><span class="p">):</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="k">if</span> <span class="n">av</span> <span class="o">&lt;=</span> <span class="n">bv</span><span class="p">:</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</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="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">LT_LTE</span><span class="p">):</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">if</span> <span class="n">av</span> <span class="o">&gt;=</span> <span class="n">bv</span><span class="p">:</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&gt;=</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">):</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&gt;</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&lt;=</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">):</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&lt;</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">):</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">==</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a><span class="k">def</span> <span class="nf">remove_compliments</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</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;</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a><span class="sd"> Removing compliments.</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="sd"> A AND NOT A -&gt; FALSE</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">compliment</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</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="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">return</span> <span class="n">compliment</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>
-</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">uniq_sort</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">cache</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</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;</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="sd"> Uniq and sort a connector.</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"> C AND A AND B AND B -&gt; A AND B AND C</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 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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">result_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">flattened</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">GENERATOR</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">cache</span><span class="p">):</span> <span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">flattened</span><span class="p">}</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">deduped</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="c1"># check if the operands are already sorted, if not sort them</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">if</span> <span class="n">sql</span> <span class="o">&lt;</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">e</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">arr</span><span class="p">)))</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="k">break</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deduped</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">flattened</span><span class="p">):</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="n">deduped</span><span class="o">.</span><span class="n">values</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="k">return</span> <span class="n">expression</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><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="k">def</span> <span class="nf">absorb_and_eliminate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="sd"> absorption:</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="sd"> elimination:</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</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="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a> <span class="n">aa</span><span class="p">,</span> <span class="n">ab</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a> <span class="c1"># absorb</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">aa</span><span class="p">):</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a> <span class="n">aa</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="k">elif</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">ab</span><span class="p">):</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a> <span class="n">ab</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a> <span class="k">elif</span> <span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span><span class="n">b</span><span class="p">})</span> <span class="o">&lt;</span> <span class="nb">set</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">flatten</span><span class="p">()):</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="n">a</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">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">())</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a> <span class="c1"># eliminate</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="n">rhs</span> <span class="o">=</span> <span class="n">b</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="n">ba</span><span class="p">,</span> <span class="n">bb</span> <span class="o">=</span> <span class="n">rhs</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="n">aa</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="k">elif</span> <span class="n">ab</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</span><span class="p">)</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</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="k">return</span> <span class="n">expression</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_number</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">l</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">elif</span> <span class="n">l</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">and</span> <span class="n">r</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">l</span> <span class="o">=</span> <span class="n">l</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">return</span> <span class="kc">None</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="k">for</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">av</span><span class="p">),</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">bv</span><span class="p">)</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</span><span class="p">(((</span><span class="n">left</span><span class="p">,</span> <span class="n">l</span><span class="p">),</span> <span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="n">r</span><span class="p">))):</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">LT_LTE</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">LT_LTE</span><span class="p">):</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">return</span> <span class="n">left</span> <span class="k">if</span> <span class="p">(</span><span class="n">av</span> <span class="o">&gt;</span> <span class="n">bv</span> <span class="k">if</span> <span class="n">or_</span> <span class="k">else</span> <span class="n">av</span> <span class="o">&lt;=</span> <span class="n">bv</span><span class="p">)</span> <span class="k">else</span> <span class="n">right</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">GT_GTE</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">GT_GTE</span><span class="p">):</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">return</span> <span class="n">left</span> <span class="k">if</span> <span class="p">(</span><span class="n">av</span> <span class="o">&lt;</span> <span class="n">bv</span> <span class="k">if</span> <span class="n">or_</span> <span class="k">else</span> <span class="n">av</span> <span class="o">&gt;=</span> <span class="n">bv</span><span class="p">)</span> <span class="k">else</span> <span class="n">right</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="c1"># we can&#39;t ever shortcut to true because the column could be null</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">or_</span><span class="p">:</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</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="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">GT_GTE</span><span class="p">):</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">if</span> <span class="n">av</span> <span class="o">&lt;=</span> <span class="n">bv</span><span class="p">:</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</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="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">LT_LTE</span><span class="p">):</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">av</span> <span class="o">&gt;=</span> <span class="n">bv</span><span class="p">:</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&gt;=</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">):</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&gt;</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&lt;=</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">):</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">&lt;</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">):</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">av</span> <span class="o">==</span> <span class="n">bv</span> <span class="k">else</span> <span class="n">a</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a><span class="k">def</span> <span class="nf">remove_compliments</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a><span class="sd"> Removing compliments.</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"> A AND NOT A -&gt; FALSE</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">compliment</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><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="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">return</span> <span class="n">compliment</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>
+</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">def</span> <span class="nf">uniq_sort</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">cache</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a><span class="sd"> Uniq and sort a connector.</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="sd"> C AND A AND B AND B -&gt; A AND B AND C</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">result_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">flattened</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">GENERATOR</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">cache</span><span class="p">):</span> <span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">flattened</span><span class="p">}</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">deduped</span><span class="o">.</span><span class="n">items</span><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="c1"># check if the operands are already sorted, if not sort them</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="k">if</span> <span class="n">sql</span> <span class="o">&lt;</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">e</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">arr</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-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="k">break</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deduped</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">flattened</span><span class="p">):</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="n">deduped</span><span class="o">.</span><span class="n">values</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-272"><a href="#L-272"><span class="linenos">272</span></a>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="k">def</span> <span class="nf">absorb_and_eliminate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a><span class="sd"> absorption:</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a><span class="sd"> elimination:</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</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="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a> <span class="n">aa</span><span class="p">,</span> <span class="n">ab</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a> <span class="c1"># absorb</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">aa</span><span class="p">):</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a> <span class="n">aa</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a> <span class="k">elif</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">ab</span><span class="p">):</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a> <span class="n">ab</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a> <span class="k">elif</span> <span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span><span class="n">b</span><span class="p">})</span> <span class="o">&lt;</span> <span class="nb">set</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">flatten</span><span class="p">()):</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a> <span class="n">a</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">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">())</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a> <span class="c1"># eliminate</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a> <span class="n">rhs</span> <span class="o">=</span> <span class="n">b</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a> <span class="n">ba</span><span class="p">,</span> <span class="n">bb</span> <span class="o">=</span> <span class="n">rhs</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><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a><span class="k">def</span> <span class="nf">simplify_literals</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="k">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">Binary</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">Connector</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="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_binary</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</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">Neg</span><span class="p">):</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a> <span class="k">if</span> <span class="n">value</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="p">:</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</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="n">value</span><span class="p">[</span><span class="mi">1</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="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;-</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><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">return</span> <span class="n">expression</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><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a><span class="k">def</span> <span class="nf">_simplify_binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</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">Is</span><span class="p">):</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">):</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">b</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">b</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a> <span class="k">if</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a> <span class="k">elif</span> <span class="n">ab</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</span><span class="p">)</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</span><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="k">return</span> <span class="n">expression</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><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a><span class="k">def</span> <span class="nf">simplify_literals</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</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">Binary</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">Connector</span><span class="p">):</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a> <span class="k">return</span> <span class="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_binary</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</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">Neg</span><span class="p">):</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a> <span class="k">if</span> <span class="n">value</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="p">:</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</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="n">value</span><span class="p">[</span><span class="mi">1</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">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;-</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</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="k">return</span> <span class="n">expression</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><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">c</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="nb">isinstance</span><span class="p">(</span><span class="n">a</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-332"><a href="#L-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">not_</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">a</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="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">not_</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">elif</span> <span class="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">NullSafeEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span><span class="p">)):</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="k">elif</span> <span class="n">is_null</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_null</span><span class="p">(</span><span class="n">b</span><span class="p">):</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><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">a</span><span class="o">.</span><span class="n">is_number</span> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="n">a</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">a</span><span class="o">.</span><span class="n">is_int</span> <span class="k">else</span> <span class="n">Decimal</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">b</span><span class="o">.</span><span class="n">is_int</span> <span class="k">else</span> <span class="n">Decimal</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">name</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">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">Add</span><span class="p">):</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</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="n">a</span> <span class="o">+</span> <span class="n">b</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="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">Sub</span><span class="p">):</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</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="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</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">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><span id="L-349"><a href="#L-349"><span class="linenos">349</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="n">a</span> <span class="o">*</span> <span class="n">b</span><span class="p">)</span>
-</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">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><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="c1"># engines have differing int div behavior so intdiv is not safe</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">a</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</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="n">a</span> <span class="o">/</span> <span class="n">b</span><span class="p">)</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="n">boolean</span> <span class="o">=</span> <span class="n">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a> <span class="k">if</span> <span class="n">boolean</span><span class="p">:</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a> <span class="k">return</span> <span class="n">boolean</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="k">elif</span> <span class="n">a</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="n">boolean</span> <span class="o">=</span> <span class="n">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a> <span class="k">if</span> <span class="n">boolean</span><span class="p">:</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a> <span class="k">return</span> <span class="n">boolean</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</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-366"><a href="#L-366"><span class="linenos">366</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">extract_date</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="n">extract_interval</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a> <span class="k">if</span> <span class="n">a</span> <span class="ow">and</span> <span class="n">b</span><span class="p">:</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</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">Add</span><span class="p">):</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="k">return</span> <span class="n">date_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</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="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">Sub</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="n">date_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</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="nb">isinstance</span><span class="p">(</span><span class="n">b</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-373"><a href="#L-373"><span class="linenos">373</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">extract_interval</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="n">extract_date</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="c1"># you cannot subtract a date from an interval</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="k">if</span> <span class="n">a</span> <span class="ow">and</span> <span class="n">b</span> <span class="ow">and</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">Add</span><span class="p">):</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">return</span> <span class="n">date_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a><span class="k">def</span> <span class="nf">simplify_parens</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</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">Paren</span><span class="p">)</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <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">this</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-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a> <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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">))</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a> <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">this</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-388"><a href="#L-388"><span class="linenos">388</span></a> <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">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a> <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="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a><span class="k">def</span> <span class="nf">remove_where_true</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">for</span> <span class="n">where</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">Where</span><span class="p">):</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">where</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">where</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <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">find_all</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-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">if</span> <span class="n">always_true</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">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)):</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="n">join</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="s2">&quot;CROSS&quot;</span><span class="p">)</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a><span class="k">def</span> <span class="nf">_simplify_binary</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</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="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">Is</span><span class="p">):</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">b</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">):</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">b</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">b</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a> <span class="n">not_</span> <span class="o">=</span> <span class="kc">False</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="n">is_null</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</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-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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">not_</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</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">is_null</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">not_</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span><span class="p">)):</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a> <span class="k">elif</span> <span class="n">is_null</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_null</span><span class="p">(</span><span class="n">b</span><span class="p">):</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</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">if</span> <span class="n">a</span><span class="o">.</span><span class="n">is_number</span> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a> <span class="n">a</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">a</span><span class="o">.</span><span class="n">is_int</span> <span class="k">else</span> <span class="n">Decimal</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a> <span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">b</span><span class="o">.</span><span class="n">is_int</span> <span class="k">else</span> <span class="n">Decimal</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">name</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">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">Add</span><span class="p">):</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a> <span class="k">return</span> <span class="n">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">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</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">Sub</span><span class="p">):</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</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="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</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">Mul</span><span class="p">):</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</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="n">a</span> <span class="o">*</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</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">Div</span><span class="p">):</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a> <span class="c1"># engines have differing int div behavior so intdiv is not safe</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</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="n">a</span> <span class="o">/</span> <span class="n">b</span><span class="p">)</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="n">boolean</span> <span class="o">=</span> <span class="n">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</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="n">boolean</span><span class="p">:</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="n">boolean</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a> <span class="k">elif</span> <span class="n">a</span><span class="o">.</span><span class="n">is_string</span> <span class="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a> <span class="n">boolean</span> <span class="o">=</span> <span class="n">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">b</span><span class="o">.</span><span class="n">this</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">if</span> <span class="n">boolean</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="n">boolean</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</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-375"><a href="#L-375"><span class="linenos">375</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">extract_date</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="n">extract_interval</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a> <span class="k">if</span> <span class="n">a</span> <span class="ow">and</span> <span class="n">b</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">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><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a> <span class="k">return</span> <span class="n">date_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</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">Sub</span><span class="p">):</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a> <span class="k">return</span> <span class="n">date_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</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="nb">isinstance</span><span class="p">(</span><span class="n">b</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-382"><a href="#L-382"><span class="linenos">382</span></a> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">extract_interval</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="n">extract_date</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a> <span class="c1"># you cannot subtract a date from an interval</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a> <span class="k">if</span> <span class="n">a</span> <span class="ow">and</span> <span class="n">b</span> <span class="ow">and</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">Add</span><span class="p">):</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a> <span class="k">return</span> <span class="n">date_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</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">return</span> <span class="kc">None</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><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a><span class="k">def</span> <span class="nf">simplify_parens</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</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">Paren</span><span class="p">)</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a> <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">this</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-394"><a href="#L-394"><span class="linenos">394</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a> <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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">))</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a> <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">this</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-397"><a href="#L-397"><span class="linenos">397</span></a> <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">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a> <span class="p">)</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a> <span class="p">):</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="n">expression</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><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">always_true</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">return</span> <span class="p">(</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">Boolean</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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><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">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</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="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">a</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a><span class="k">def</span> <span class="nf">remove_where_true</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a> <span class="k">for</span> <span class="n">where</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">Where</span><span class="p">):</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a> <span class="n">where</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a> <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">find_all</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-409"><a href="#L-409"><span class="linenos">409</span></a> <span class="k">if</span> <span class="n">always_true</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">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)):</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a> <span class="n">join</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="s2">&quot;CROSS&quot;</span><span class="p">)</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>
</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a><span class="k">def</span> <span class="nf">is_false</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</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="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">a</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><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a><span class="k">def</span> <span class="nf">always_true</span><span class="p">(</span><span class="n">expression</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="p">(</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">Boolean</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a> <span class="p">)</span>
</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a><span class="k">def</span> <span class="nf">is_null</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</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="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a><span class="k">def</span> <span class="nf">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</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="nb">isinstance</span><span class="p">(</span><span class="n">b</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="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">a</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">def</span> <span class="nf">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</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">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Is</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="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">==</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</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">NEQ</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="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">!=</span> <span class="n">b</span><span class="p">)</span>
-</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">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><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</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="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">GTE</span><span class="p">):</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&gt;=</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</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">LT</span><span class="p">):</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;</span> <span class="n">b</span><span class="p">)</span>
-</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">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><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;=</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a><span class="k">def</span> <span class="nf">extract_date</span><span class="p">(</span><span class="n">cast</span><span class="p">):</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a> <span class="c1"># The &quot;fromisoformat&quot; conversion could fail if the cast is used on an identifier,</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
-</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="k">if</span> <span class="n">cast</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 class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</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="k">if</span> <span class="n">cast</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 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">DATETIME</span><span class="p">:</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a><span class="k">def</span> <span class="nf">extract_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">):</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="kn">from</span> <span class="nn">dateutil.relativedelta</span> <span class="kn">import</span> <span class="n">relativedelta</span> <span class="c1"># type: ignore</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</span><span class="p">:</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="kc">None</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">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</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="k">def</span> <span class="nf">is_false</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</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="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">a</span><span class="o">.</span><span class="n">this</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><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a><span class="k">def</span> <span class="nf">is_null</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</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><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a><span class="k">def</span> <span class="nf">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</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="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">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">)):</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">==</span> <span class="n">b</span><span class="p">)</span>
+</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">NEQ</span><span class="p">):</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">!=</span> <span class="n">b</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="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">GT</span><span class="p">):</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</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="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">GTE</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="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&gt;=</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;</span> <span class="n">b</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="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">LTE</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="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;=</span> <span class="n">b</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="kc">None</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><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a><span class="k">def</span> <span class="nf">extract_date</span><span class="p">(</span><span class="n">cast</span><span class="p">):</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a> <span class="c1"># The &quot;fromisoformat&quot; conversion could fail if the cast is used on an identifier,</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a> <span class="k">if</span> <span class="n">cast</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 class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a> <span class="k">if</span> <span class="n">cast</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 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">DATETIME</span><span class="p">:</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a> <span class="k">except</span> <span class="ne">ValueError</span><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="kc">None</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>
</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a> <span class="k">if</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-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">years</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">months</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</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-465"><a href="#L-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">weeks</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">n</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="kc">None</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><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a><span class="k">def</span> <span class="nf">date_literal</span><span class="p">(</span><span class="n">date</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="n">exp</span><span class="o">.</span><span class="n">cast</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">date</span><span class="p">),</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a> <span class="s2">&quot;DATETIME&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">date</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATE&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><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a><span class="k">def</span> <span class="nf">boolean_literal</span><span class="p">(</span><span class="n">condition</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">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</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><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a><span class="k">def</span> <span class="nf">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">simplifier</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</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">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">:</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="n">operands</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a> <span class="n">queue</span> <span class="o">=</span> <span class="n">deque</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-486"><a href="#L-486"><span class="linenos">486</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">queue</span><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">while</span> <span class="n">queue</span><span class="p">:</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a><span class="k">def</span> <span class="nf">extract_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">):</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a> <span class="kn">from</span> <span class="nn">dateutil.relativedelta</span> <span class="kn">import</span> <span class="n">relativedelta</span> <span class="c1"># type: ignore</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</span><span class="p">:</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="kc">None</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">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">name</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="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</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="k">if</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-470"><a href="#L-470"><span class="linenos">470</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">years</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">months</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;week&quot;</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">relativedelta</span><span class="p">(</span><span class="n">weeks</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a> <span class="k">return</span> <span class="kc">None</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><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a><span class="k">def</span> <span class="nf">date_literal</span><span class="p">(</span><span class="n">date</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="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">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">date</span><span class="p">),</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a> <span class="s2">&quot;DATETIME&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">date</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATE&quot;</span><span class="p">,</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a> <span class="p">)</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a><span class="k">def</span> <span class="nf">boolean_literal</span><span class="p">(</span><span class="n">condition</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</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><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">queue</span><span class="p">:</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">simplifier</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</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">if</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">queue</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a> <span class="n">queue</span><span class="o">.</span><span class="n">appendleft</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a> <span class="k">break</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a> <span class="n">operands</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</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="nb">len</span><span class="p">(</span><span class="n">operands</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">size</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="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a> <span class="k">lambda</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">expression</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">),</span> <span class="n">operands</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <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="n">expression</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a><span class="k">def</span> <span class="nf">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">simplifier</span><span class="p">,</span> <span class="n">root</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 class="k">if</span> <span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">:</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a> <span class="n">operands</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a> <span class="n">queue</span> <span class="o">=</span> <span class="n">deque</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-495"><a href="#L-495"><span class="linenos">495</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">queue</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">while</span> <span class="n">queue</span><span class="p">:</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><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">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">queue</span><span class="p">:</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">simplifier</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</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="k">if</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a> <span class="n">queue</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a> <span class="n">queue</span><span class="o">.</span><span class="n">appendleft</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a> <span class="k">break</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a> <span class="n">operands</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</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">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">operands</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">size</span><span class="p">:</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a> <span class="k">return</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a> <span class="k">lambda</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">expression</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">a</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">b</span><span class="p">),</span> <span class="n">operands</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a> <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="n">expression</span>
</span></pre></div>
@@ -723,8 +732,9 @@
</span><span id="rewrite_between-61"><a href="#rewrite_between-61"><span class="linenos">61</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
</span><span id="rewrite_between-62"><a href="#rewrite_between-62"><span class="linenos">62</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</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">expression</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;low&quot;</span><span class="p">]),</span>
</span><span id="rewrite_between-63"><a href="#rewrite_between-63"><span class="linenos">63</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</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">expression</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;high&quot;</span><span class="p">]),</span>
-</span><span id="rewrite_between-64"><a href="#rewrite_between-64"><span class="linenos">64</span></a> <span class="p">)</span>
-</span><span id="rewrite_between-65"><a href="#rewrite_between-65"><span class="linenos">65</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="rewrite_between-64"><a href="#rewrite_between-64"><span class="linenos">64</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="rewrite_between-65"><a href="#rewrite_between-65"><span class="linenos">65</span></a> <span class="p">)</span>
+</span><span id="rewrite_between-66"><a href="#rewrite_between-66"><span class="linenos">66</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -746,32 +756,40 @@
</div>
<a class="headerlink" href="#simplify_not"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_not-68"><a href="#simplify_not-68"><span class="linenos">68</span></a><span class="k">def</span> <span class="nf">simplify_not</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="simplify_not-69"><a href="#simplify_not-69"><span class="linenos">69</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="simplify_not-70"><a href="#simplify_not-70"><span class="linenos">70</span></a><span class="sd"> Demorgan&#39;s Law</span>
-</span><span id="simplify_not-71"><a href="#simplify_not-71"><span class="linenos">71</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
-</span><span id="simplify_not-72"><a href="#simplify_not-72"><span class="linenos">72</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
-</span><span id="simplify_not-73"><a href="#simplify_not-73"><span class="linenos">73</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="simplify_not-74"><a href="#simplify_not-74"><span class="linenos">74</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">Not</span><span class="p">):</span>
-</span><span id="simplify_not-75"><a href="#simplify_not-75"><span class="linenos">75</span></a> <span class="k">if</span> <span class="n">is_null</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="simplify_not-76"><a href="#simplify_not-76"><span class="linenos">76</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="simplify_not-77"><a href="#simplify_not-77"><span class="linenos">77</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">Paren</span><span class="p">):</span>
-</span><span id="simplify_not-78"><a href="#simplify_not-78"><span class="linenos">78</span></a> <span class="n">condition</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">unnest</span><span class="p">()</span>
-</span><span id="simplify_not-79"><a href="#simplify_not-79"><span class="linenos">79</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">):</span>
-</span><span id="simplify_not-80"><a href="#simplify_not-80"><span class="linenos">80</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</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">condition</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">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</span><span class="p">))</span>
-</span><span id="simplify_not-81"><a href="#simplify_not-81"><span class="linenos">81</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">):</span>
-</span><span id="simplify_not-82"><a href="#simplify_not-82"><span class="linenos">82</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</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">condition</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">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</span><span class="p">))</span>
-</span><span id="simplify_not-83"><a href="#simplify_not-83"><span class="linenos">83</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
-</span><span id="simplify_not-84"><a href="#simplify_not-84"><span class="linenos">84</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="simplify_not-85"><a href="#simplify_not-85"><span class="linenos">85</span></a> <span class="k">if</span> <span class="n">always_true</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="simplify_not-86"><a href="#simplify_not-86"><span class="linenos">86</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="simplify_not-87"><a href="#simplify_not-87"><span class="linenos">87</span></a> <span class="k">if</span> <span class="n">is_false</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="simplify_not-88"><a href="#simplify_not-88"><span class="linenos">88</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
-</span><span id="simplify_not-89"><a href="#simplify_not-89"><span class="linenos">89</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">Not</span><span class="p">):</span>
-</span><span id="simplify_not-90"><a href="#simplify_not-90"><span class="linenos">90</span></a> <span class="c1"># double negation</span>
-</span><span id="simplify_not-91"><a href="#simplify_not-91"><span class="linenos">91</span></a> <span class="c1"># NOT NOT x -&gt; x</span>
-</span><span id="simplify_not-92"><a href="#simplify_not-92"><span class="linenos">92</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="simplify_not-93"><a href="#simplify_not-93"><span class="linenos">93</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_not-69"><a href="#simplify_not-69"><span class="linenos"> 69</span></a><span class="k">def</span> <span class="nf">simplify_not</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="simplify_not-70"><a href="#simplify_not-70"><span class="linenos"> 70</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="simplify_not-71"><a href="#simplify_not-71"><span class="linenos"> 71</span></a><span class="sd"> Demorgan&#39;s Law</span>
+</span><span id="simplify_not-72"><a href="#simplify_not-72"><span class="linenos"> 72</span></a><span class="sd"> NOT (x OR y) -&gt; NOT x AND NOT y</span>
+</span><span id="simplify_not-73"><a href="#simplify_not-73"><span class="linenos"> 73</span></a><span class="sd"> NOT (x AND y) -&gt; NOT x OR NOT y</span>
+</span><span id="simplify_not-74"><a href="#simplify_not-74"><span class="linenos"> 74</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="simplify_not-75"><a href="#simplify_not-75"><span class="linenos"> 75</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">Not</span><span class="p">):</span>
+</span><span id="simplify_not-76"><a href="#simplify_not-76"><span class="linenos"> 76</span></a> <span class="k">if</span> <span class="n">is_null</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="simplify_not-77"><a href="#simplify_not-77"><span class="linenos"> 77</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
+</span><span id="simplify_not-78"><a href="#simplify_not-78"><span class="linenos"> 78</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">Paren</span><span class="p">):</span>
+</span><span id="simplify_not-79"><a href="#simplify_not-79"><span class="linenos"> 79</span></a> <span class="n">condition</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">unnest</span><span class="p">()</span>
+</span><span id="simplify_not-80"><a href="#simplify_not-80"><span class="linenos"> 80</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">):</span>
+</span><span id="simplify_not-81"><a href="#simplify_not-81"><span class="linenos"> 81</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="simplify_not-82"><a href="#simplify_not-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">left</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="simplify_not-83"><a href="#simplify_not-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</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="simplify_not-84"><a href="#simplify_not-84"><span class="linenos"> 84</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="simplify_not-85"><a href="#simplify_not-85"><span class="linenos"> 85</span></a> <span class="p">)</span>
+</span><span id="simplify_not-86"><a href="#simplify_not-86"><span class="linenos"> 86</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">):</span>
+</span><span id="simplify_not-87"><a href="#simplify_not-87"><span class="linenos"> 87</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="simplify_not-88"><a href="#simplify_not-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">left</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="simplify_not-89"><a href="#simplify_not-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">not_</span><span class="p">(</span><span class="n">condition</span><span class="o">.</span><span class="n">right</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="simplify_not-90"><a href="#simplify_not-90"><span class="linenos"> 90</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="simplify_not-91"><a href="#simplify_not-91"><span class="linenos"> 91</span></a> <span class="p">)</span>
+</span><span id="simplify_not-92"><a href="#simplify_not-92"><span class="linenos"> 92</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
+</span><span id="simplify_not-93"><a href="#simplify_not-93"><span class="linenos"> 93</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
+</span><span id="simplify_not-94"><a href="#simplify_not-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="n">always_true</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="simplify_not-95"><a href="#simplify_not-95"><span class="linenos"> 95</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="simplify_not-96"><a href="#simplify_not-96"><span class="linenos"> 96</span></a> <span class="k">if</span> <span class="n">is_false</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="simplify_not-97"><a href="#simplify_not-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="simplify_not-98"><a href="#simplify_not-98"><span class="linenos"> 98</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">Not</span><span class="p">):</span>
+</span><span id="simplify_not-99"><a href="#simplify_not-99"><span class="linenos"> 99</span></a> <span class="c1"># double negation</span>
+</span><span id="simplify_not-100"><a href="#simplify_not-100"><span class="linenos">100</span></a> <span class="c1"># NOT NOT x -&gt; x</span>
+</span><span id="simplify_not-101"><a href="#simplify_not-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="simplify_not-102"><a href="#simplify_not-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -793,17 +811,17 @@ NOT (x AND y) -> NOT x OR NOT y</p>
</div>
<a class="headerlink" href="#flatten"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="flatten-96"><a href="#flatten-96"><span class="linenos"> 96</span></a><span class="k">def</span> <span class="nf">flatten</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="flatten-97"><a href="#flatten-97"><span class="linenos"> 97</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="flatten-98"><a href="#flatten-98"><span class="linenos"> 98</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
-</span><span id="flatten-99"><a href="#flatten-99"><span class="linenos"> 99</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
-</span><span id="flatten-100"><a href="#flatten-100"><span class="linenos">100</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="flatten-101"><a href="#flatten-101"><span class="linenos">101</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="flatten-102"><a href="#flatten-102"><span class="linenos">102</span></a> <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">args</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="flatten-103"><a href="#flatten-103"><span class="linenos">103</span></a> <span class="n">child</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span>
-</span><span id="flatten-104"><a href="#flatten-104"><span class="linenos">104</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">child</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="flatten-105"><a href="#flatten-105"><span class="linenos">105</span></a> <span class="n">node</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
-</span><span id="flatten-106"><a href="#flatten-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="flatten-105"><a href="#flatten-105"><span class="linenos">105</span></a><span class="k">def</span> <span class="nf">flatten</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="flatten-106"><a href="#flatten-106"><span class="linenos">106</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="flatten-107"><a href="#flatten-107"><span class="linenos">107</span></a><span class="sd"> A AND (B AND C) -&gt; A AND B AND C</span>
+</span><span id="flatten-108"><a href="#flatten-108"><span class="linenos">108</span></a><span class="sd"> A OR (B OR C) -&gt; A OR B OR C</span>
+</span><span id="flatten-109"><a href="#flatten-109"><span class="linenos">109</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="flatten-110"><a href="#flatten-110"><span class="linenos">110</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="flatten-111"><a href="#flatten-111"><span class="linenos">111</span></a> <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">args</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="flatten-112"><a href="#flatten-112"><span class="linenos">112</span></a> <span class="n">child</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">unnest</span><span class="p">()</span>
+</span><span id="flatten-113"><a href="#flatten-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">child</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="flatten-114"><a href="#flatten-114"><span class="linenos">114</span></a> <span class="n">node</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
+</span><span id="flatten-115"><a href="#flatten-115"><span class="linenos">115</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -824,42 +842,42 @@ A OR (B OR C) -> A OR B OR C</p>
</div>
<a class="headerlink" href="#simplify_connectors"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_connectors-109"><a href="#simplify_connectors-109"><span class="linenos">109</span></a><span class="k">def</span> <span class="nf">simplify_connectors</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="simplify_connectors-110"><a href="#simplify_connectors-110"><span class="linenos">110</span></a> <span class="k">def</span> <span class="nf">_simplify_connectors</span><span class="p">(</span><span class="n">expression</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="simplify_connectors-111"><a href="#simplify_connectors-111"><span class="linenos">111</span></a> <span class="k">if</span> <span class="n">left</span> <span class="o">==</span> <span class="n">right</span><span class="p">:</span>
-</span><span id="simplify_connectors-112"><a href="#simplify_connectors-112"><span class="linenos">112</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="simplify_connectors-113"><a href="#simplify_connectors-113"><span class="linenos">113</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">And</span><span class="p">):</span>
-</span><span id="simplify_connectors-114"><a href="#simplify_connectors-114"><span class="linenos">114</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="simplify_connectors-115"><a href="#simplify_connectors-115"><span class="linenos">115</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="simplify_connectors-116"><a href="#simplify_connectors-116"><span class="linenos">116</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="simplify_connectors-117"><a href="#simplify_connectors-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="simplify_connectors-118"><a href="#simplify_connectors-118"><span class="linenos">118</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="simplify_connectors-119"><a href="#simplify_connectors-119"><span class="linenos">119</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
-</span><span id="simplify_connectors-120"><a href="#simplify_connectors-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
-</span><span id="simplify_connectors-121"><a href="#simplify_connectors-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">right</span>
-</span><span id="simplify_connectors-122"><a href="#simplify_connectors-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="simplify_connectors-123"><a href="#simplify_connectors-123"><span class="linenos">123</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="simplify_connectors-124"><a href="#simplify_connectors-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</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="simplify_connectors-125"><a href="#simplify_connectors-125"><span class="linenos">125</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">Or</span><span class="p">):</span>
-</span><span id="simplify_connectors-126"><a href="#simplify_connectors-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="simplify_connectors-127"><a href="#simplify_connectors-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
-</span><span id="simplify_connectors-128"><a href="#simplify_connectors-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="simplify_connectors-129"><a href="#simplify_connectors-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
-</span><span id="simplify_connectors-130"><a href="#simplify_connectors-130"><span class="linenos">130</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="simplify_connectors-131"><a href="#simplify_connectors-131"><span class="linenos">131</span></a> <span class="p">(</span><span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
-</span><span id="simplify_connectors-132"><a href="#simplify_connectors-132"><span class="linenos">132</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
-</span><span id="simplify_connectors-133"><a href="#simplify_connectors-133"><span class="linenos">133</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
-</span><span id="simplify_connectors-134"><a href="#simplify_connectors-134"><span class="linenos">134</span></a> <span class="p">):</span>
-</span><span id="simplify_connectors-135"><a href="#simplify_connectors-135"><span class="linenos">135</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
-</span><span id="simplify_connectors-136"><a href="#simplify_connectors-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
-</span><span id="simplify_connectors-137"><a href="#simplify_connectors-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="n">right</span>
-</span><span id="simplify_connectors-138"><a href="#simplify_connectors-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
-</span><span id="simplify_connectors-139"><a href="#simplify_connectors-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="n">left</span>
-</span><span id="simplify_connectors-140"><a href="#simplify_connectors-140"><span class="linenos">140</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">or_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="simplify_connectors-141"><a href="#simplify_connectors-141"><span class="linenos">141</span></a>
-</span><span id="simplify_connectors-142"><a href="#simplify_connectors-142"><span class="linenos">142</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="simplify_connectors-143"><a href="#simplify_connectors-143"><span class="linenos">143</span></a> <span class="k">return</span> <span class="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_connectors</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="simplify_connectors-144"><a href="#simplify_connectors-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_connectors-118"><a href="#simplify_connectors-118"><span class="linenos">118</span></a><span class="k">def</span> <span class="nf">simplify_connectors</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="simplify_connectors-119"><a href="#simplify_connectors-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">_simplify_connectors</span><span class="p">(</span><span class="n">expression</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="simplify_connectors-120"><a href="#simplify_connectors-120"><span class="linenos">120</span></a> <span class="k">if</span> <span class="n">left</span> <span class="o">==</span> <span class="n">right</span><span class="p">:</span>
+</span><span id="simplify_connectors-121"><a href="#simplify_connectors-121"><span class="linenos">121</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="simplify_connectors-122"><a href="#simplify_connectors-122"><span class="linenos">122</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">And</span><span class="p">):</span>
+</span><span id="simplify_connectors-123"><a href="#simplify_connectors-123"><span class="linenos">123</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="simplify_connectors-124"><a href="#simplify_connectors-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="simplify_connectors-125"><a href="#simplify_connectors-125"><span class="linenos">125</span></a> <span class="k">if</span> <span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="simplify_connectors-126"><a href="#simplify_connectors-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
+</span><span id="simplify_connectors-127"><a href="#simplify_connectors-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="simplify_connectors-128"><a href="#simplify_connectors-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="simplify_connectors-129"><a href="#simplify_connectors-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
+</span><span id="simplify_connectors-130"><a href="#simplify_connectors-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="simplify_connectors-131"><a href="#simplify_connectors-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="simplify_connectors-132"><a href="#simplify_connectors-132"><span class="linenos">132</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="simplify_connectors-133"><a href="#simplify_connectors-133"><span class="linenos">133</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</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="simplify_connectors-134"><a href="#simplify_connectors-134"><span class="linenos">134</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">Or</span><span class="p">):</span>
+</span><span id="simplify_connectors-135"><a href="#simplify_connectors-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">or</span> <span class="n">always_true</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="simplify_connectors-136"><a href="#simplify_connectors-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="simplify_connectors-137"><a href="#simplify_connectors-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="simplify_connectors-138"><a href="#simplify_connectors-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+</span><span id="simplify_connectors-139"><a href="#simplify_connectors-139"><span class="linenos">139</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="simplify_connectors-140"><a href="#simplify_connectors-140"><span class="linenos">140</span></a> <span class="p">(</span><span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
+</span><span id="simplify_connectors-141"><a href="#simplify_connectors-141"><span class="linenos">141</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_null</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
+</span><span id="simplify_connectors-142"><a href="#simplify_connectors-142"><span class="linenos">142</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="ow">and</span> <span class="n">is_null</span><span class="p">(</span><span class="n">right</span><span class="p">))</span>
+</span><span id="simplify_connectors-143"><a href="#simplify_connectors-143"><span class="linenos">143</span></a> <span class="p">):</span>
+</span><span id="simplify_connectors-144"><a href="#simplify_connectors-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
+</span><span id="simplify_connectors-145"><a href="#simplify_connectors-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">left</span><span class="p">):</span>
+</span><span id="simplify_connectors-146"><a href="#simplify_connectors-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="n">right</span>
+</span><span id="simplify_connectors-147"><a href="#simplify_connectors-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="n">is_false</span><span class="p">(</span><span class="n">right</span><span class="p">):</span>
+</span><span id="simplify_connectors-148"><a href="#simplify_connectors-148"><span class="linenos">148</span></a> <span class="k">return</span> <span class="n">left</span>
+</span><span id="simplify_connectors-149"><a href="#simplify_connectors-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="n">_simplify_comparison</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">,</span> <span class="n">or_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="simplify_connectors-150"><a href="#simplify_connectors-150"><span class="linenos">150</span></a>
+</span><span id="simplify_connectors-151"><a href="#simplify_connectors-151"><span class="linenos">151</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="simplify_connectors-152"><a href="#simplify_connectors-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_connectors</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="simplify_connectors-153"><a href="#simplify_connectors-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -877,20 +895,20 @@ A OR (B OR C) -> A OR B OR C</p>
</div>
<a class="headerlink" href="#remove_compliments"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="remove_compliments-226"><a href="#remove_compliments-226"><span class="linenos">226</span></a><span class="k">def</span> <span class="nf">remove_compliments</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="remove_compliments-227"><a href="#remove_compliments-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="remove_compliments-228"><a href="#remove_compliments-228"><span class="linenos">228</span></a><span class="sd"> Removing compliments.</span>
-</span><span id="remove_compliments-229"><a href="#remove_compliments-229"><span class="linenos">229</span></a>
-</span><span id="remove_compliments-230"><a href="#remove_compliments-230"><span class="linenos">230</span></a><span class="sd"> A AND NOT A -&gt; FALSE</span>
-</span><span id="remove_compliments-231"><a href="#remove_compliments-231"><span class="linenos">231</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
-</span><span id="remove_compliments-232"><a href="#remove_compliments-232"><span class="linenos">232</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="remove_compliments-233"><a href="#remove_compliments-233"><span class="linenos">233</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
-</span><span id="remove_compliments-234"><a href="#remove_compliments-234"><span class="linenos">234</span></a> <span class="n">compliment</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
-</span><span id="remove_compliments-235"><a href="#remove_compliments-235"><span class="linenos">235</span></a>
-</span><span id="remove_compliments-236"><a href="#remove_compliments-236"><span class="linenos">236</span></a> <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
-</span><span id="remove_compliments-237"><a href="#remove_compliments-237"><span class="linenos">237</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
-</span><span id="remove_compliments-238"><a href="#remove_compliments-238"><span class="linenos">238</span></a> <span class="k">return</span> <span class="n">compliment</span>
-</span><span id="remove_compliments-239"><a href="#remove_compliments-239"><span class="linenos">239</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="remove_compliments-235"><a href="#remove_compliments-235"><span class="linenos">235</span></a><span class="k">def</span> <span class="nf">remove_compliments</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="remove_compliments-236"><a href="#remove_compliments-236"><span class="linenos">236</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="remove_compliments-237"><a href="#remove_compliments-237"><span class="linenos">237</span></a><span class="sd"> Removing compliments.</span>
+</span><span id="remove_compliments-238"><a href="#remove_compliments-238"><span class="linenos">238</span></a>
+</span><span id="remove_compliments-239"><a href="#remove_compliments-239"><span class="linenos">239</span></a><span class="sd"> A AND NOT A -&gt; FALSE</span>
+</span><span id="remove_compliments-240"><a href="#remove_compliments-240"><span class="linenos">240</span></a><span class="sd"> A OR NOT A -&gt; TRUE</span>
+</span><span id="remove_compliments-241"><a href="#remove_compliments-241"><span class="linenos">241</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="remove_compliments-242"><a href="#remove_compliments-242"><span class="linenos">242</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
+</span><span id="remove_compliments-243"><a href="#remove_compliments-243"><span class="linenos">243</span></a> <span class="n">compliment</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span>
+</span><span id="remove_compliments-244"><a href="#remove_compliments-244"><span class="linenos">244</span></a>
+</span><span id="remove_compliments-245"><a href="#remove_compliments-245"><span class="linenos">245</span></a> <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
+</span><span id="remove_compliments-246"><a href="#remove_compliments-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
+</span><span id="remove_compliments-247"><a href="#remove_compliments-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">compliment</span>
+</span><span id="remove_compliments-248"><a href="#remove_compliments-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -913,30 +931,30 @@ A OR NOT A -> TRUE</p>
</div>
<a class="headerlink" href="#uniq_sort"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="uniq_sort-242"><a href="#uniq_sort-242"><span class="linenos">242</span></a><span class="k">def</span> <span class="nf">uniq_sort</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">cache</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="uniq_sort-243"><a href="#uniq_sort-243"><span class="linenos">243</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="uniq_sort-244"><a href="#uniq_sort-244"><span class="linenos">244</span></a><span class="sd"> Uniq and sort a connector.</span>
-</span><span id="uniq_sort-245"><a href="#uniq_sort-245"><span class="linenos">245</span></a>
-</span><span id="uniq_sort-246"><a href="#uniq_sort-246"><span class="linenos">246</span></a><span class="sd"> C AND A AND B AND B -&gt; A AND B AND C</span>
-</span><span id="uniq_sort-247"><a href="#uniq_sort-247"><span class="linenos">247</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="uniq_sort-248"><a href="#uniq_sort-248"><span class="linenos">248</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
-</span><span id="uniq_sort-249"><a href="#uniq_sort-249"><span class="linenos">249</span></a> <span class="n">result_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
-</span><span id="uniq_sort-250"><a href="#uniq_sort-250"><span class="linenos">250</span></a> <span class="n">flattened</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
-</span><span id="uniq_sort-251"><a href="#uniq_sort-251"><span class="linenos">251</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">GENERATOR</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">cache</span><span class="p">):</span> <span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">flattened</span><span class="p">}</span>
-</span><span id="uniq_sort-252"><a href="#uniq_sort-252"><span class="linenos">252</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">deduped</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
-</span><span id="uniq_sort-253"><a href="#uniq_sort-253"><span class="linenos">253</span></a>
-</span><span id="uniq_sort-254"><a href="#uniq_sort-254"><span class="linenos">254</span></a> <span class="c1"># check if the operands are already sorted, if not sort them</span>
-</span><span id="uniq_sort-255"><a href="#uniq_sort-255"><span class="linenos">255</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
-</span><span id="uniq_sort-256"><a href="#uniq_sort-256"><span class="linenos">256</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
-</span><span id="uniq_sort-257"><a href="#uniq_sort-257"><span class="linenos">257</span></a> <span class="k">if</span> <span class="n">sql</span> <span class="o">&lt;</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
-</span><span id="uniq_sort-258"><a href="#uniq_sort-258"><span class="linenos">258</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">e</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">arr</span><span class="p">)))</span>
-</span><span id="uniq_sort-259"><a href="#uniq_sort-259"><span class="linenos">259</span></a> <span class="k">break</span>
-</span><span id="uniq_sort-260"><a href="#uniq_sort-260"><span class="linenos">260</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="uniq_sort-261"><a href="#uniq_sort-261"><span class="linenos">261</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
-</span><span id="uniq_sort-262"><a href="#uniq_sort-262"><span class="linenos">262</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deduped</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">flattened</span><span class="p">):</span>
-</span><span id="uniq_sort-263"><a href="#uniq_sort-263"><span class="linenos">263</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="n">deduped</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
-</span><span id="uniq_sort-264"><a href="#uniq_sort-264"><span class="linenos">264</span></a>
-</span><span id="uniq_sort-265"><a href="#uniq_sort-265"><span class="linenos">265</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="uniq_sort-251"><a href="#uniq_sort-251"><span class="linenos">251</span></a><span class="k">def</span> <span class="nf">uniq_sort</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">cache</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="uniq_sort-252"><a href="#uniq_sort-252"><span class="linenos">252</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="uniq_sort-253"><a href="#uniq_sort-253"><span class="linenos">253</span></a><span class="sd"> Uniq and sort a connector.</span>
+</span><span id="uniq_sort-254"><a href="#uniq_sort-254"><span class="linenos">254</span></a>
+</span><span id="uniq_sort-255"><a href="#uniq_sort-255"><span class="linenos">255</span></a><span class="sd"> C AND A AND B AND B -&gt; A AND B AND C</span>
+</span><span id="uniq_sort-256"><a href="#uniq_sort-256"><span class="linenos">256</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="uniq_sort-257"><a href="#uniq_sort-257"><span class="linenos">257</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
+</span><span id="uniq_sort-258"><a href="#uniq_sort-258"><span class="linenos">258</span></a> <span class="n">result_func</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span>
+</span><span id="uniq_sort-259"><a href="#uniq_sort-259"><span class="linenos">259</span></a> <span class="n">flattened</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>
+</span><span id="uniq_sort-260"><a href="#uniq_sort-260"><span class="linenos">260</span></a> <span class="n">deduped</span> <span class="o">=</span> <span class="p">{</span><span class="n">GENERATOR</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">cache</span><span class="p">):</span> <span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">flattened</span><span class="p">}</span>
+</span><span id="uniq_sort-261"><a href="#uniq_sort-261"><span class="linenos">261</span></a> <span class="n">arr</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">deduped</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
+</span><span id="uniq_sort-262"><a href="#uniq_sort-262"><span class="linenos">262</span></a>
+</span><span id="uniq_sort-263"><a href="#uniq_sort-263"><span class="linenos">263</span></a> <span class="c1"># check if the operands are already sorted, if not sort them</span>
+</span><span id="uniq_sort-264"><a href="#uniq_sort-264"><span class="linenos">264</span></a> <span class="c1"># A AND C AND B -&gt; A AND B AND C</span>
+</span><span id="uniq_sort-265"><a href="#uniq_sort-265"><span class="linenos">265</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
+</span><span id="uniq_sort-266"><a href="#uniq_sort-266"><span class="linenos">266</span></a> <span class="k">if</span> <span class="n">sql</span> <span class="o">&lt;</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
+</span><span id="uniq_sort-267"><a href="#uniq_sort-267"><span class="linenos">267</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">e</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">arr</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="uniq_sort-268"><a href="#uniq_sort-268"><span class="linenos">268</span></a> <span class="k">break</span>
+</span><span id="uniq_sort-269"><a href="#uniq_sort-269"><span class="linenos">269</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="uniq_sort-270"><a href="#uniq_sort-270"><span class="linenos">270</span></a> <span class="c1"># we didn&#39;t have to sort but maybe we need to dedup</span>
+</span><span id="uniq_sort-271"><a href="#uniq_sort-271"><span class="linenos">271</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">deduped</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">flattened</span><span class="p">):</span>
+</span><span id="uniq_sort-272"><a href="#uniq_sort-272"><span class="linenos">272</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">result_func</span><span class="p">(</span><span class="o">*</span><span class="n">deduped</span><span class="o">.</span><span class="n">values</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="uniq_sort-273"><a href="#uniq_sort-273"><span class="linenos">273</span></a>
+</span><span id="uniq_sort-274"><a href="#uniq_sort-274"><span class="linenos">274</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -958,44 +976,44 @@ A OR NOT A -> TRUE</p>
</div>
<a class="headerlink" href="#absorb_and_eliminate"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="absorb_and_eliminate-268"><a href="#absorb_and_eliminate-268"><span class="linenos">268</span></a><span class="k">def</span> <span class="nf">absorb_and_eliminate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="absorb_and_eliminate-269"><a href="#absorb_and_eliminate-269"><span class="linenos">269</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="absorb_and_eliminate-270"><a href="#absorb_and_eliminate-270"><span class="linenos">270</span></a><span class="sd"> absorption:</span>
-</span><span id="absorb_and_eliminate-271"><a href="#absorb_and_eliminate-271"><span class="linenos">271</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-272"><a href="#absorb_and_eliminate-272"><span class="linenos">272</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-273"><a href="#absorb_and_eliminate-273"><span class="linenos">273</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
-</span><span id="absorb_and_eliminate-274"><a href="#absorb_and_eliminate-274"><span class="linenos">274</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
-</span><span id="absorb_and_eliminate-275"><a href="#absorb_and_eliminate-275"><span class="linenos">275</span></a><span class="sd"> elimination:</span>
-</span><span id="absorb_and_eliminate-276"><a href="#absorb_and_eliminate-276"><span class="linenos">276</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-277"><a href="#absorb_and_eliminate-277"><span class="linenos">277</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
-</span><span id="absorb_and_eliminate-278"><a href="#absorb_and_eliminate-278"><span class="linenos">278</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="absorb_and_eliminate-279"><a href="#absorb_and_eliminate-279"><span class="linenos">279</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
-</span><span id="absorb_and_eliminate-280"><a href="#absorb_and_eliminate-280"><span class="linenos">280</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span>
-</span><span id="absorb_and_eliminate-281"><a href="#absorb_and_eliminate-281"><span class="linenos">281</span></a>
-</span><span id="absorb_and_eliminate-282"><a href="#absorb_and_eliminate-282"><span class="linenos">282</span></a> <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
-</span><span id="absorb_and_eliminate-283"><a href="#absorb_and_eliminate-283"><span class="linenos">283</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
-</span><span id="absorb_and_eliminate-284"><a href="#absorb_and_eliminate-284"><span class="linenos">284</span></a> <span class="n">aa</span><span class="p">,</span> <span class="n">ab</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
-</span><span id="absorb_and_eliminate-285"><a href="#absorb_and_eliminate-285"><span class="linenos">285</span></a>
-</span><span id="absorb_and_eliminate-286"><a href="#absorb_and_eliminate-286"><span class="linenos">286</span></a> <span class="c1"># absorb</span>
-</span><span id="absorb_and_eliminate-287"><a href="#absorb_and_eliminate-287"><span class="linenos">287</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">aa</span><span class="p">):</span>
-</span><span id="absorb_and_eliminate-288"><a href="#absorb_and_eliminate-288"><span class="linenos">288</span></a> <span class="n">aa</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
-</span><span id="absorb_and_eliminate-289"><a href="#absorb_and_eliminate-289"><span class="linenos">289</span></a> <span class="k">elif</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">ab</span><span class="p">):</span>
-</span><span id="absorb_and_eliminate-290"><a href="#absorb_and_eliminate-290"><span class="linenos">290</span></a> <span class="n">ab</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
-</span><span id="absorb_and_eliminate-291"><a href="#absorb_and_eliminate-291"><span class="linenos">291</span></a> <span class="k">elif</span> <span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span><span class="n">b</span><span class="p">})</span> <span class="o">&lt;</span> <span class="nb">set</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">flatten</span><span class="p">()):</span>
-</span><span id="absorb_and_eliminate-292"><a href="#absorb_and_eliminate-292"><span class="linenos">292</span></a> <span class="n">a</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">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">())</span>
-</span><span id="absorb_and_eliminate-293"><a href="#absorb_and_eliminate-293"><span class="linenos">293</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
-</span><span id="absorb_and_eliminate-294"><a href="#absorb_and_eliminate-294"><span class="linenos">294</span></a> <span class="c1"># eliminate</span>
-</span><span id="absorb_and_eliminate-295"><a href="#absorb_and_eliminate-295"><span class="linenos">295</span></a> <span class="n">rhs</span> <span class="o">=</span> <span class="n">b</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
-</span><span id="absorb_and_eliminate-296"><a href="#absorb_and_eliminate-296"><span class="linenos">296</span></a> <span class="n">ba</span><span class="p">,</span> <span class="n">bb</span> <span class="o">=</span> <span class="n">rhs</span>
-</span><span id="absorb_and_eliminate-297"><a href="#absorb_and_eliminate-297"><span class="linenos">297</span></a>
-</span><span id="absorb_and_eliminate-298"><a href="#absorb_and_eliminate-298"><span class="linenos">298</span></a> <span class="k">if</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
-</span><span id="absorb_and_eliminate-299"><a href="#absorb_and_eliminate-299"><span class="linenos">299</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
-</span><span id="absorb_and_eliminate-300"><a href="#absorb_and_eliminate-300"><span class="linenos">300</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
-</span><span id="absorb_and_eliminate-301"><a href="#absorb_and_eliminate-301"><span class="linenos">301</span></a> <span class="k">elif</span> <span class="n">ab</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
-</span><span id="absorb_and_eliminate-302"><a href="#absorb_and_eliminate-302"><span class="linenos">302</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</span><span class="p">)</span>
-</span><span id="absorb_and_eliminate-303"><a href="#absorb_and_eliminate-303"><span class="linenos">303</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</span><span class="p">)</span>
-</span><span id="absorb_and_eliminate-304"><a href="#absorb_and_eliminate-304"><span class="linenos">304</span></a>
-</span><span id="absorb_and_eliminate-305"><a href="#absorb_and_eliminate-305"><span class="linenos">305</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="absorb_and_eliminate-277"><a href="#absorb_and_eliminate-277"><span class="linenos">277</span></a><span class="k">def</span> <span class="nf">absorb_and_eliminate</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="absorb_and_eliminate-278"><a href="#absorb_and_eliminate-278"><span class="linenos">278</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="absorb_and_eliminate-279"><a href="#absorb_and_eliminate-279"><span class="linenos">279</span></a><span class="sd"> absorption:</span>
+</span><span id="absorb_and_eliminate-280"><a href="#absorb_and_eliminate-280"><span class="linenos">280</span></a><span class="sd"> A AND (A OR B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-281"><a href="#absorb_and_eliminate-281"><span class="linenos">281</span></a><span class="sd"> A OR (A AND B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-282"><a href="#absorb_and_eliminate-282"><span class="linenos">282</span></a><span class="sd"> A AND (NOT A OR B) -&gt; A AND B</span>
+</span><span id="absorb_and_eliminate-283"><a href="#absorb_and_eliminate-283"><span class="linenos">283</span></a><span class="sd"> A OR (NOT A AND B) -&gt; A OR B</span>
+</span><span id="absorb_and_eliminate-284"><a href="#absorb_and_eliminate-284"><span class="linenos">284</span></a><span class="sd"> elimination:</span>
+</span><span id="absorb_and_eliminate-285"><a href="#absorb_and_eliminate-285"><span class="linenos">285</span></a><span class="sd"> (A AND B) OR (A AND NOT B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-286"><a href="#absorb_and_eliminate-286"><span class="linenos">286</span></a><span class="sd"> (A OR B) AND (A OR NOT B) -&gt; A</span>
+</span><span id="absorb_and_eliminate-287"><a href="#absorb_and_eliminate-287"><span class="linenos">287</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="absorb_and_eliminate-288"><a href="#absorb_and_eliminate-288"><span class="linenos">288</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 class="ow">and</span> <span class="p">(</span><span class="n">root</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">same_parent</span><span class="p">):</span>
+</span><span id="absorb_and_eliminate-289"><a href="#absorb_and_eliminate-289"><span class="linenos">289</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</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">And</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span>
+</span><span id="absorb_and_eliminate-290"><a href="#absorb_and_eliminate-290"><span class="linenos">290</span></a>
+</span><span id="absorb_and_eliminate-291"><a href="#absorb_and_eliminate-291"><span class="linenos">291</span></a> <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</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="mi">2</span><span class="p">):</span>
+</span><span id="absorb_and_eliminate-292"><a href="#absorb_and_eliminate-292"><span class="linenos">292</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
+</span><span id="absorb_and_eliminate-293"><a href="#absorb_and_eliminate-293"><span class="linenos">293</span></a> <span class="n">aa</span><span class="p">,</span> <span class="n">ab</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
+</span><span id="absorb_and_eliminate-294"><a href="#absorb_and_eliminate-294"><span class="linenos">294</span></a>
+</span><span id="absorb_and_eliminate-295"><a href="#absorb_and_eliminate-295"><span class="linenos">295</span></a> <span class="c1"># absorb</span>
+</span><span id="absorb_and_eliminate-296"><a href="#absorb_and_eliminate-296"><span class="linenos">296</span></a> <span class="k">if</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">aa</span><span class="p">):</span>
+</span><span id="absorb_and_eliminate-297"><a href="#absorb_and_eliminate-297"><span class="linenos">297</span></a> <span class="n">aa</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
+</span><span id="absorb_and_eliminate-298"><a href="#absorb_and_eliminate-298"><span class="linenos">298</span></a> <span class="k">elif</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">ab</span><span class="p">):</span>
+</span><span id="absorb_and_eliminate-299"><a href="#absorb_and_eliminate-299"><span class="linenos">299</span></a> <span class="n">ab</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">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">())</span>
+</span><span id="absorb_and_eliminate-300"><a href="#absorb_and_eliminate-300"><span class="linenos">300</span></a> <span class="k">elif</span> <span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">b</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span><span class="n">b</span><span class="p">})</span> <span class="o">&lt;</span> <span class="nb">set</span><span class="p">(</span><span class="n">a</span><span class="o">.</span><span class="n">flatten</span><span class="p">()):</span>
+</span><span id="absorb_and_eliminate-301"><a href="#absorb_and_eliminate-301"><span class="linenos">301</span></a> <span class="n">a</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">false</span><span class="p">()</span> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">())</span>
+</span><span id="absorb_and_eliminate-302"><a href="#absorb_and_eliminate-302"><span class="linenos">302</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">kind</span><span class="p">):</span>
+</span><span id="absorb_and_eliminate-303"><a href="#absorb_and_eliminate-303"><span class="linenos">303</span></a> <span class="c1"># eliminate</span>
+</span><span id="absorb_and_eliminate-304"><a href="#absorb_and_eliminate-304"><span class="linenos">304</span></a> <span class="n">rhs</span> <span class="o">=</span> <span class="n">b</span><span class="o">.</span><span class="n">unnest_operands</span><span class="p">()</span>
+</span><span id="absorb_and_eliminate-305"><a href="#absorb_and_eliminate-305"><span class="linenos">305</span></a> <span class="n">ba</span><span class="p">,</span> <span class="n">bb</span> <span class="o">=</span> <span class="n">rhs</span>
+</span><span id="absorb_and_eliminate-306"><a href="#absorb_and_eliminate-306"><span class="linenos">306</span></a>
+</span><span id="absorb_and_eliminate-307"><a href="#absorb_and_eliminate-307"><span class="linenos">307</span></a> <span class="k">if</span> <span class="n">aa</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">ab</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
+</span><span id="absorb_and_eliminate-308"><a href="#absorb_and_eliminate-308"><span class="linenos">308</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
+</span><span id="absorb_and_eliminate-309"><a href="#absorb_and_eliminate-309"><span class="linenos">309</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">aa</span><span class="p">)</span>
+</span><span id="absorb_and_eliminate-310"><a href="#absorb_and_eliminate-310"><span class="linenos">310</span></a> <span class="k">elif</span> <span class="n">ab</span> <span class="ow">in</span> <span class="n">rhs</span> <span class="ow">and</span> <span class="p">(</span><span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">ba</span><span class="p">)</span> <span class="ow">or</span> <span class="n">is_complement</span><span class="p">(</span><span class="n">aa</span><span class="p">,</span> <span class="n">bb</span><span class="p">)):</span>
+</span><span id="absorb_and_eliminate-311"><a href="#absorb_and_eliminate-311"><span class="linenos">311</span></a> <span class="n">a</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</span><span class="p">)</span>
+</span><span id="absorb_and_eliminate-312"><a href="#absorb_and_eliminate-312"><span class="linenos">312</span></a> <span class="n">b</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ab</span><span class="p">)</span>
+</span><span id="absorb_and_eliminate-313"><a href="#absorb_and_eliminate-313"><span class="linenos">313</span></a>
+</span><span id="absorb_and_eliminate-314"><a href="#absorb_and_eliminate-314"><span class="linenos">314</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1022,18 +1040,18 @@ elimination:
</div>
<a class="headerlink" href="#simplify_literals"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_literals-308"><a href="#simplify_literals-308"><span class="linenos">308</span></a><span class="k">def</span> <span class="nf">simplify_literals</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="simplify_literals-309"><a href="#simplify_literals-309"><span class="linenos">309</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">Binary</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">Connector</span><span class="p">):</span>
-</span><span id="simplify_literals-310"><a href="#simplify_literals-310"><span class="linenos">310</span></a> <span class="k">return</span> <span class="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_binary</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
-</span><span id="simplify_literals-311"><a href="#simplify_literals-311"><span class="linenos">311</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">Neg</span><span class="p">):</span>
-</span><span id="simplify_literals-312"><a href="#simplify_literals-312"><span class="linenos">312</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="simplify_literals-313"><a href="#simplify_literals-313"><span class="linenos">313</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="simplify_literals-314"><a href="#simplify_literals-314"><span class="linenos">314</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="simplify_literals-315"><a href="#simplify_literals-315"><span class="linenos">315</span></a> <span class="k">if</span> <span class="n">value</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="p">:</span>
-</span><span id="simplify_literals-316"><a href="#simplify_literals-316"><span class="linenos">316</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="n">value</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
-</span><span id="simplify_literals-317"><a href="#simplify_literals-317"><span class="linenos">317</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;-</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="simplify_literals-318"><a href="#simplify_literals-318"><span class="linenos">318</span></a>
-</span><span id="simplify_literals-319"><a href="#simplify_literals-319"><span class="linenos">319</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_literals-317"><a href="#simplify_literals-317"><span class="linenos">317</span></a><span class="k">def</span> <span class="nf">simplify_literals</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="simplify_literals-318"><a href="#simplify_literals-318"><span class="linenos">318</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">Binary</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">Connector</span><span class="p">):</span>
+</span><span id="simplify_literals-319"><a href="#simplify_literals-319"><span class="linenos">319</span></a> <span class="k">return</span> <span class="n">_flat_simplify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">_simplify_binary</span><span class="p">,</span> <span class="n">root</span><span class="p">)</span>
+</span><span id="simplify_literals-320"><a href="#simplify_literals-320"><span class="linenos">320</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">Neg</span><span class="p">):</span>
+</span><span id="simplify_literals-321"><a href="#simplify_literals-321"><span class="linenos">321</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="simplify_literals-322"><a href="#simplify_literals-322"><span class="linenos">322</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="simplify_literals-323"><a href="#simplify_literals-323"><span class="linenos">323</span></a> <span class="n">value</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="simplify_literals-324"><a href="#simplify_literals-324"><span class="linenos">324</span></a> <span class="k">if</span> <span class="n">value</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="p">:</span>
+</span><span id="simplify_literals-325"><a href="#simplify_literals-325"><span class="linenos">325</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="n">value</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
+</span><span id="simplify_literals-326"><a href="#simplify_literals-326"><span class="linenos">326</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;-</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="simplify_literals-327"><a href="#simplify_literals-327"><span class="linenos">327</span></a>
+</span><span id="simplify_literals-328"><a href="#simplify_literals-328"><span class="linenos">328</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1051,18 +1069,18 @@ elimination:
</div>
<a class="headerlink" href="#simplify_parens"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_parens-382"><a href="#simplify_parens-382"><span class="linenos">382</span></a><span class="k">def</span> <span class="nf">simplify_parens</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="simplify_parens-383"><a href="#simplify_parens-383"><span class="linenos">383</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="simplify_parens-384"><a href="#simplify_parens-384"><span class="linenos">384</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">Paren</span><span class="p">)</span>
-</span><span id="simplify_parens-385"><a href="#simplify_parens-385"><span class="linenos">385</span></a> <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">this</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="simplify_parens-386"><a href="#simplify_parens-386"><span class="linenos">386</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="simplify_parens-387"><a href="#simplify_parens-387"><span class="linenos">387</span></a> <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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">))</span>
-</span><span id="simplify_parens-388"><a href="#simplify_parens-388"><span class="linenos">388</span></a> <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">this</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="simplify_parens-389"><a href="#simplify_parens-389"><span class="linenos">389</span></a> <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">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
-</span><span id="simplify_parens-390"><a href="#simplify_parens-390"><span class="linenos">390</span></a> <span class="p">)</span>
-</span><span id="simplify_parens-391"><a href="#simplify_parens-391"><span class="linenos">391</span></a> <span class="p">):</span>
-</span><span id="simplify_parens-392"><a href="#simplify_parens-392"><span class="linenos">392</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="simplify_parens-393"><a href="#simplify_parens-393"><span class="linenos">393</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="simplify_parens-391"><a href="#simplify_parens-391"><span class="linenos">391</span></a><span class="k">def</span> <span class="nf">simplify_parens</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="simplify_parens-392"><a href="#simplify_parens-392"><span class="linenos">392</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="simplify_parens-393"><a href="#simplify_parens-393"><span class="linenos">393</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">Paren</span><span class="p">)</span>
+</span><span id="simplify_parens-394"><a href="#simplify_parens-394"><span class="linenos">394</span></a> <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">this</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="simplify_parens-395"><a href="#simplify_parens-395"><span class="linenos">395</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="simplify_parens-396"><a href="#simplify_parens-396"><span class="linenos">396</span></a> <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="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">))</span>
+</span><span id="simplify_parens-397"><a href="#simplify_parens-397"><span class="linenos">397</span></a> <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">this</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="simplify_parens-398"><a href="#simplify_parens-398"><span class="linenos">398</span></a> <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">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">)</span>
+</span><span id="simplify_parens-399"><a href="#simplify_parens-399"><span class="linenos">399</span></a> <span class="p">)</span>
+</span><span id="simplify_parens-400"><a href="#simplify_parens-400"><span class="linenos">400</span></a> <span class="p">):</span>
+</span><span id="simplify_parens-401"><a href="#simplify_parens-401"><span class="linenos">401</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="simplify_parens-402"><a href="#simplify_parens-402"><span class="linenos">402</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -1080,14 +1098,14 @@ elimination:
</div>
<a class="headerlink" href="#remove_where_true"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="remove_where_true-396"><a href="#remove_where_true-396"><span class="linenos">396</span></a><span class="k">def</span> <span class="nf">remove_where_true</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="remove_where_true-397"><a href="#remove_where_true-397"><span class="linenos">397</span></a> <span class="k">for</span> <span class="n">where</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">Where</span><span class="p">):</span>
-</span><span id="remove_where_true-398"><a href="#remove_where_true-398"><span class="linenos">398</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
-</span><span id="remove_where_true-399"><a href="#remove_where_true-399"><span class="linenos">399</span></a> <span class="n">where</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="remove_where_true-400"><a href="#remove_where_true-400"><span class="linenos">400</span></a> <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">find_all</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="remove_where_true-401"><a href="#remove_where_true-401"><span class="linenos">401</span></a> <span class="k">if</span> <span class="n">always_true</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">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)):</span>
-</span><span id="remove_where_true-402"><a href="#remove_where_true-402"><span class="linenos">402</span></a> <span class="n">join</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="s2">&quot;CROSS&quot;</span><span class="p">)</span>
-</span><span id="remove_where_true-403"><a href="#remove_where_true-403"><span class="linenos">403</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="remove_where_true-405"><a href="#remove_where_true-405"><span class="linenos">405</span></a><span class="k">def</span> <span class="nf">remove_where_true</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="remove_where_true-406"><a href="#remove_where_true-406"><span class="linenos">406</span></a> <span class="k">for</span> <span class="n">where</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">Where</span><span class="p">):</span>
+</span><span id="remove_where_true-407"><a href="#remove_where_true-407"><span class="linenos">407</span></a> <span class="k">if</span> <span class="n">always_true</span><span class="p">(</span><span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">):</span>
+</span><span id="remove_where_true-408"><a href="#remove_where_true-408"><span class="linenos">408</span></a> <span class="n">where</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="remove_where_true-409"><a href="#remove_where_true-409"><span class="linenos">409</span></a> <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">find_all</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="remove_where_true-410"><a href="#remove_where_true-410"><span class="linenos">410</span></a> <span class="k">if</span> <span class="n">always_true</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">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)):</span>
+</span><span id="remove_where_true-411"><a href="#remove_where_true-411"><span class="linenos">411</span></a> <span class="n">join</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="s2">&quot;CROSS&quot;</span><span class="p">)</span>
+</span><span id="remove_where_true-412"><a href="#remove_where_true-412"><span class="linenos">412</span></a> <span class="n">join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span></pre></div>
@@ -1105,10 +1123,10 @@ elimination:
</div>
<a class="headerlink" href="#always_true"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="always_true-406"><a href="#always_true-406"><span class="linenos">406</span></a><span class="k">def</span> <span class="nf">always_true</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="always_true-407"><a href="#always_true-407"><span class="linenos">407</span></a> <span class="k">return</span> <span class="p">(</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">Boolean</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span>
-</span><span id="always_true-408"><a href="#always_true-408"><span class="linenos">408</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span>
-</span><span id="always_true-409"><a href="#always_true-409"><span class="linenos">409</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="always_true-415"><a href="#always_true-415"><span class="linenos">415</span></a><span class="k">def</span> <span class="nf">always_true</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="always_true-416"><a href="#always_true-416"><span class="linenos">416</span></a> <span class="k">return</span> <span class="p">(</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">Boolean</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span>
+</span><span id="always_true-417"><a href="#always_true-417"><span class="linenos">417</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span>
+</span><span id="always_true-418"><a href="#always_true-418"><span class="linenos">418</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1126,8 +1144,8 @@ elimination:
</div>
<a class="headerlink" href="#is_complement"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="is_complement-412"><a href="#is_complement-412"><span class="linenos">412</span></a><span class="k">def</span> <span class="nf">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
-</span><span id="is_complement-413"><a href="#is_complement-413"><span class="linenos">413</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</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="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">a</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="is_complement-421"><a href="#is_complement-421"><span class="linenos">421</span></a><span class="k">def</span> <span class="nf">is_complement</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
+</span><span id="is_complement-422"><a href="#is_complement-422"><span class="linenos">422</span></a> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</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="ow">and</span> <span class="n">b</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">a</span>
</span></pre></div>
@@ -1145,8 +1163,8 @@ elimination:
</div>
<a class="headerlink" href="#is_false"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="is_false-416"><a href="#is_false-416"><span class="linenos">416</span></a><span class="k">def</span> <span class="nf">is_false</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="is_false-417"><a href="#is_false-417"><span class="linenos">417</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">a</span><span class="o">.</span><span class="n">this</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="is_false-425"><a href="#is_false-425"><span class="linenos">425</span></a><span class="k">def</span> <span class="nf">is_false</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="is_false-426"><a href="#is_false-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">a</span><span class="o">.</span><span class="n">this</span>
</span></pre></div>
@@ -1164,8 +1182,8 @@ elimination:
</div>
<a class="headerlink" href="#is_null"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="is_null-420"><a href="#is_null-420"><span class="linenos">420</span></a><span class="k">def</span> <span class="nf">is_null</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="is_null-421"><a href="#is_null-421"><span class="linenos">421</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="is_null-429"><a href="#is_null-429"><span class="linenos">429</span></a><span class="k">def</span> <span class="nf">is_null</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="is_null-430"><a href="#is_null-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span>
</span></pre></div>
@@ -1183,20 +1201,20 @@ elimination:
</div>
<a class="headerlink" href="#eval_boolean"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="eval_boolean-424"><a href="#eval_boolean-424"><span class="linenos">424</span></a><span class="k">def</span> <span class="nf">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
-</span><span id="eval_boolean-425"><a href="#eval_boolean-425"><span class="linenos">425</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">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">)):</span>
-</span><span id="eval_boolean-426"><a href="#eval_boolean-426"><span class="linenos">426</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">==</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="eval_boolean-427"><a href="#eval_boolean-427"><span class="linenos">427</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">NEQ</span><span class="p">):</span>
-</span><span id="eval_boolean-428"><a href="#eval_boolean-428"><span class="linenos">428</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">!=</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="eval_boolean-429"><a href="#eval_boolean-429"><span class="linenos">429</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">GT</span><span class="p">):</span>
-</span><span id="eval_boolean-430"><a href="#eval_boolean-430"><span class="linenos">430</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="eval_boolean-431"><a href="#eval_boolean-431"><span class="linenos">431</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">GTE</span><span class="p">):</span>
-</span><span id="eval_boolean-432"><a href="#eval_boolean-432"><span class="linenos">432</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&gt;=</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="eval_boolean-433"><a href="#eval_boolean-433"><span class="linenos">433</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">LT</span><span class="p">):</span>
-</span><span id="eval_boolean-434"><a href="#eval_boolean-434"><span class="linenos">434</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="eval_boolean-435"><a href="#eval_boolean-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">LTE</span><span class="p">):</span>
-</span><span id="eval_boolean-436"><a href="#eval_boolean-436"><span class="linenos">436</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;=</span> <span class="n">b</span><span class="p">)</span>
-</span><span id="eval_boolean-437"><a href="#eval_boolean-437"><span class="linenos">437</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="eval_boolean-433"><a href="#eval_boolean-433"><span class="linenos">433</span></a><span class="k">def</span> <span class="nf">eval_boolean</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
+</span><span id="eval_boolean-434"><a href="#eval_boolean-434"><span class="linenos">434</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">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">)):</span>
+</span><span id="eval_boolean-435"><a href="#eval_boolean-435"><span class="linenos">435</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">==</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="eval_boolean-436"><a href="#eval_boolean-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">NEQ</span><span class="p">):</span>
+</span><span id="eval_boolean-437"><a href="#eval_boolean-437"><span class="linenos">437</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">!=</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="eval_boolean-438"><a href="#eval_boolean-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">GT</span><span class="p">):</span>
+</span><span id="eval_boolean-439"><a href="#eval_boolean-439"><span class="linenos">439</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&gt;</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="eval_boolean-440"><a href="#eval_boolean-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">GTE</span><span class="p">):</span>
+</span><span id="eval_boolean-441"><a href="#eval_boolean-441"><span class="linenos">441</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&gt;=</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="eval_boolean-442"><a href="#eval_boolean-442"><span class="linenos">442</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="eval_boolean-443"><a href="#eval_boolean-443"><span class="linenos">443</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="eval_boolean-444"><a href="#eval_boolean-444"><span class="linenos">444</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">LTE</span><span class="p">):</span>
+</span><span id="eval_boolean-445"><a href="#eval_boolean-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="n">boolean_literal</span><span class="p">(</span><span class="n">a</span> <span class="o">&lt;=</span> <span class="n">b</span><span class="p">)</span>
+</span><span id="eval_boolean-446"><a href="#eval_boolean-446"><span class="linenos">446</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -1214,16 +1232,16 @@ elimination:
</div>
<a class="headerlink" href="#extract_date"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="extract_date-440"><a href="#extract_date-440"><span class="linenos">440</span></a><span class="k">def</span> <span class="nf">extract_date</span><span class="p">(</span><span class="n">cast</span><span class="p">):</span>
-</span><span id="extract_date-441"><a href="#extract_date-441"><span class="linenos">441</span></a> <span class="c1"># The &quot;fromisoformat&quot; conversion could fail if the cast is used on an identifier,</span>
-</span><span id="extract_date-442"><a href="#extract_date-442"><span class="linenos">442</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
-</span><span id="extract_date-443"><a href="#extract_date-443"><span class="linenos">443</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="extract_date-444"><a href="#extract_date-444"><span class="linenos">444</span></a> <span class="k">if</span> <span class="n">cast</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 class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
-</span><span id="extract_date-445"><a href="#extract_date-445"><span class="linenos">445</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="extract_date-446"><a href="#extract_date-446"><span class="linenos">446</span></a> <span class="k">if</span> <span class="n">cast</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 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">DATETIME</span><span class="p">:</span>
-</span><span id="extract_date-447"><a href="#extract_date-447"><span class="linenos">447</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="extract_date-448"><a href="#extract_date-448"><span class="linenos">448</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="extract_date-449"><a href="#extract_date-449"><span class="linenos">449</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="extract_date-449"><a href="#extract_date-449"><span class="linenos">449</span></a><span class="k">def</span> <span class="nf">extract_date</span><span class="p">(</span><span class="n">cast</span><span class="p">):</span>
+</span><span id="extract_date-450"><a href="#extract_date-450"><span class="linenos">450</span></a> <span class="c1"># The &quot;fromisoformat&quot; conversion could fail if the cast is used on an identifier,</span>
+</span><span id="extract_date-451"><a href="#extract_date-451"><span class="linenos">451</span></a> <span class="c1"># so in that case we can&#39;t extract the date.</span>
+</span><span id="extract_date-452"><a href="#extract_date-452"><span class="linenos">452</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="extract_date-453"><a href="#extract_date-453"><span class="linenos">453</span></a> <span class="k">if</span> <span class="n">cast</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 class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
+</span><span id="extract_date-454"><a href="#extract_date-454"><span class="linenos">454</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="extract_date-455"><a href="#extract_date-455"><span class="linenos">455</span></a> <span class="k">if</span> <span class="n">cast</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 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">DATETIME</span><span class="p">:</span>
+</span><span id="extract_date-456"><a href="#extract_date-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cast</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="extract_date-457"><a href="#extract_date-457"><span class="linenos">457</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
+</span><span id="extract_date-458"><a href="#extract_date-458"><span class="linenos">458</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -1241,24 +1259,24 @@ elimination:
</div>
<a class="headerlink" href="#extract_interval"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="extract_interval-452"><a href="#extract_interval-452"><span class="linenos">452</span></a><span class="k">def</span> <span class="nf">extract_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">):</span>
-</span><span id="extract_interval-453"><a href="#extract_interval-453"><span class="linenos">453</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="extract_interval-454"><a href="#extract_interval-454"><span class="linenos">454</span></a> <span class="kn">from</span> <span class="nn">dateutil.relativedelta</span> <span class="kn">import</span> <span class="n">relativedelta</span> <span class="c1"># type: ignore</span>
-</span><span id="extract_interval-455"><a href="#extract_interval-455"><span class="linenos">455</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</span><span class="p">:</span>
-</span><span id="extract_interval-456"><a href="#extract_interval-456"><span class="linenos">456</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="extract_interval-457"><a href="#extract_interval-457"><span class="linenos">457</span></a>
-</span><span id="extract_interval-458"><a href="#extract_interval-458"><span class="linenos">458</span></a> <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="extract_interval-459"><a href="#extract_interval-459"><span class="linenos">459</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="extract_interval-460"><a href="#extract_interval-460"><span class="linenos">460</span></a>
-</span><span id="extract_interval-461"><a href="#extract_interval-461"><span class="linenos">461</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;year&quot;</span><span class="p">:</span>
-</span><span id="extract_interval-462"><a href="#extract_interval-462"><span class="linenos">462</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">years</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
-</span><span id="extract_interval-463"><a href="#extract_interval-463"><span class="linenos">463</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span>
-</span><span id="extract_interval-464"><a href="#extract_interval-464"><span class="linenos">464</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">months</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
-</span><span id="extract_interval-465"><a href="#extract_interval-465"><span class="linenos">465</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="extract_interval-466"><a href="#extract_interval-466"><span class="linenos">466</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">weeks</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
-</span><span id="extract_interval-467"><a href="#extract_interval-467"><span class="linenos">467</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span>
-</span><span id="extract_interval-468"><a href="#extract_interval-468"><span class="linenos">468</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
-</span><span id="extract_interval-469"><a href="#extract_interval-469"><span class="linenos">469</span></a> <span class="k">return</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="extract_interval-461"><a href="#extract_interval-461"><span class="linenos">461</span></a><span class="k">def</span> <span class="nf">extract_interval</span><span class="p">(</span><span class="n">interval</span><span class="p">):</span>
+</span><span id="extract_interval-462"><a href="#extract_interval-462"><span class="linenos">462</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="extract_interval-463"><a href="#extract_interval-463"><span class="linenos">463</span></a> <span class="kn">from</span> <span class="nn">dateutil.relativedelta</span> <span class="kn">import</span> <span class="n">relativedelta</span> <span class="c1"># type: ignore</span>
+</span><span id="extract_interval-464"><a href="#extract_interval-464"><span class="linenos">464</span></a> <span class="k">except</span> <span class="ne">ModuleNotFoundError</span><span class="p">:</span>
+</span><span id="extract_interval-465"><a href="#extract_interval-465"><span class="linenos">465</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="extract_interval-466"><a href="#extract_interval-466"><span class="linenos">466</span></a>
+</span><span id="extract_interval-467"><a href="#extract_interval-467"><span class="linenos">467</span></a> <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">interval</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="extract_interval-468"><a href="#extract_interval-468"><span class="linenos">468</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">interval</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="extract_interval-469"><a href="#extract_interval-469"><span class="linenos">469</span></a>
+</span><span id="extract_interval-470"><a href="#extract_interval-470"><span class="linenos">470</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;year&quot;</span><span class="p">:</span>
+</span><span id="extract_interval-471"><a href="#extract_interval-471"><span class="linenos">471</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">years</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="extract_interval-472"><a href="#extract_interval-472"><span class="linenos">472</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;month&quot;</span><span class="p">:</span>
+</span><span id="extract_interval-473"><a href="#extract_interval-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">months</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="extract_interval-474"><a href="#extract_interval-474"><span class="linenos">474</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="extract_interval-475"><a href="#extract_interval-475"><span class="linenos">475</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">weeks</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="extract_interval-476"><a href="#extract_interval-476"><span class="linenos">476</span></a> <span class="k">if</span> <span class="n">unit</span> <span class="o">==</span> <span class="s2">&quot;day&quot;</span><span class="p">:</span>
+</span><span id="extract_interval-477"><a href="#extract_interval-477"><span class="linenos">477</span></a> <span class="k">return</span> <span class="n">relativedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">n</span><span class="p">)</span>
+</span><span id="extract_interval-478"><a href="#extract_interval-478"><span class="linenos">478</span></a> <span class="k">return</span> <span class="kc">None</span>
</span></pre></div>
@@ -1276,11 +1294,11 @@ elimination:
</div>
<a class="headerlink" href="#date_literal"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="date_literal-472"><a href="#date_literal-472"><span class="linenos">472</span></a><span class="k">def</span> <span class="nf">date_literal</span><span class="p">(</span><span class="n">date</span><span class="p">):</span>
-</span><span id="date_literal-473"><a href="#date_literal-473"><span class="linenos">473</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="date_literal-474"><a href="#date_literal-474"><span class="linenos">474</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">date</span><span class="p">),</span>
-</span><span id="date_literal-475"><a href="#date_literal-475"><span class="linenos">475</span></a> <span class="s2">&quot;DATETIME&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">date</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATE&quot;</span><span class="p">,</span>
-</span><span id="date_literal-476"><a href="#date_literal-476"><span class="linenos">476</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="date_literal-481"><a href="#date_literal-481"><span class="linenos">481</span></a><span class="k">def</span> <span class="nf">date_literal</span><span class="p">(</span><span class="n">date</span><span class="p">):</span>
+</span><span id="date_literal-482"><a href="#date_literal-482"><span class="linenos">482</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="date_literal-483"><a href="#date_literal-483"><span class="linenos">483</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">date</span><span class="p">),</span>
+</span><span id="date_literal-484"><a href="#date_literal-484"><span class="linenos">484</span></a> <span class="s2">&quot;DATETIME&quot;</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">date</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;DATE&quot;</span><span class="p">,</span>
+</span><span id="date_literal-485"><a href="#date_literal-485"><span class="linenos">485</span></a> <span class="p">)</span>
</span></pre></div>
@@ -1298,8 +1316,8 @@ elimination:
</div>
<a class="headerlink" href="#boolean_literal"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="boolean_literal-479"><a href="#boolean_literal-479"><span class="linenos">479</span></a><span class="k">def</span> <span class="nf">boolean_literal</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
-</span><span id="boolean_literal-480"><a href="#boolean_literal-480"><span class="linenos">480</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="boolean_literal-488"><a href="#boolean_literal-488"><span class="linenos">488</span></a><span class="k">def</span> <span class="nf">boolean_literal</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
+</span><span id="boolean_literal-489"><a href="#boolean_literal-489"><span class="linenos">489</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">false</span><span class="p">()</span>
</span></pre></div>
diff --git a/docs/sqlglot/parser.html b/docs/sqlglot/parser.html
index 6c3a0d2..19a6730 100644
--- a/docs/sqlglot/parser.html
+++ b/docs/sqlglot/parser.html
@@ -326,4193 +326,4226 @@
</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</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">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="p">}</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="n">INTERVAL_VARS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-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">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_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="n">TokenType</span><span class="o">.</span><span class="n">APPLY</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">FULL</span><span class="p">,</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</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">WINDOW</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">COMMENT_TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-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">UPDATE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-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">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</span><span class="p">}</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">FUNC_TOKENS</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="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</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">CURRENT_DATETIME</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">CURRENT_TIMESTAMP</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">CURRENT_TIME</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">CURRENT_USER</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">FILTER</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">FIRST</span><span class="p">,</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><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">INDEX</span><span class="p">,</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</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">ILIKE</span><span class="p">,</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><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">PRIMARY_KEY</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">REPLACE</span><span class="p">,</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</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">LEFT</span><span class="p">,</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</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">TIMESTAMP</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">TIMESTAMPTZ</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">WINDOW</span><span class="p">,</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</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">CONJUNCTION</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="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="p">}</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">EQUALITY</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="n">TokenType</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">EQ</span><span class="p">,</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><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">NULLSAFE_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">,</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a> <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="n">COMPARISON</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="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</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">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</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><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="n">BITWISE</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">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">,</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</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">BitwiseXor</span><span class="p">,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">,</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</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="n">TERM</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">,</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Collate</span><span class="p">,</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a> <span class="p">}</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="n">FACTOR</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">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">,</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distance</span><span class="p">,</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</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-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">,</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="n">TIMESTAMPS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</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">SET_OPERATIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="p">}</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a>
-</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</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><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</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="n">LAMBDAS</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">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">,</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</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">_parse_conjunction</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 class="n">node</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">},</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="p">),</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</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 class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expressions</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="p">),</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</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-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="p">),</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a> <span 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">COLUMN_OPERATORS</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="n">TokenType</span><span class="o">.</span><span class="n">DOT</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="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</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-417"><a href="#L-417"><span class="linenos"> 417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="p">),</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="p">),</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a> <span class="p">),</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-432"><a href="#L-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><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="p">),</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</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="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">key</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-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><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">this</span><span class="p">,</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</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 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="n">EXPRESSION_PARSERS</span> <span class="o">=</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">Column</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_column</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">DataType</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_types</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">From</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_from</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">Group</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_group</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">Identifier</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_id_var</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">Lateral</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_lateral</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">Join</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_join</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">Order</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_order</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">Cluster</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</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">Sort</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</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">Lambda</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_lambda</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">Limit</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_limit</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">Offset</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_offset</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">TableAlias</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_table_alias</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">Table</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_table</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">Condition</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_conjunction</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">Expression</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_statement</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">Properties</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_properties</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">Where</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_where</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">Ordered</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_ordered</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">Having</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_having</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">With</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_with</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">Window</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_named_window</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">Qualify</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_qualify</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">Returning</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_returning</span><span class="p">(),</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="s2">&quot;JOIN_TYPE&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_join_side_and_kind</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="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</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_alter</span><span class="p">(),</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</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_transaction</span><span class="p">(),</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</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_cache</span><span class="p">(),</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</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-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</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_comment</span><span class="p">(),</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</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_create</span><span class="p">(),</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</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_delete</span><span class="p">(),</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</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_describe</span><span class="p">(),</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</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_describe</span><span class="p">(),</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</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_drop</span><span class="p">(),</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</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-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</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_insert</span><span class="p">(),</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</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_load_data</span><span class="p">(),</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</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_merge</span><span class="p">(),</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</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">Pragma</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-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</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-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</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_set</span><span class="p">(),</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</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_uncache</span><span class="p">(),</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</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_update</span><span class="p">(),</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</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><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="n">kind</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;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;WAREHOUSE&quot;</span><span class="p">,</span> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">))</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="ow">and</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-501"><a href="#L-501"><span class="linenos"> 501</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">False</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 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="n">UNARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</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_unary</span><span class="p">(),</span> <span class="c1"># Unary + is handled as a no-op</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</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">Not</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_equality</span><span class="p">()),</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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">BitwiseNot</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_unary</span><span class="p">()),</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</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">Neg</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_unary</span><span class="p">()),</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="n">PRIMARY_PARSERS</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="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</span><span class="o">=</span><span class="kc">True</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="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</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 class="p">),</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_except</span><span class="p">(),</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_replace</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">TokenType</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">_</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">Null</span><span class="p">),</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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-526"><a href="#L-526"><span class="linenos"> 526</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">BitString</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-527"><a href="#L-527"><span class="linenos"> 527</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">HexString</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-528"><a href="#L-528"><span class="linenos"> 528</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">ByteString</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-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_introducer</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_national</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_session_parameter</span><span class="p">(),</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <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="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</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">Placeholder</span><span class="p">),</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</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_parameter</span><span class="p">(),</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</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">Placeholder</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-538"><a href="#L-538"><span class="linenos"> 538</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">NUMBER</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-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="k">else</span> <span class="kc">None</span><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="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</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_between</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</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">Glob</span><span class="p">),</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</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">Overlaps</span><span class="p">),</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</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_in</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</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_is</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</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">Like</span><span class="p">),</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</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">ILike</span><span class="p">),</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</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">RegexpILike</span><span class="p">),</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</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">RegexpLike</span><span class="p">),</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</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">SimilarTo</span><span class="p">),</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="p">}</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="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="s2">&quot;AFTER&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_afterjournal</span><span class="p">(</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="p">),</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="s2">&quot;ALGORITHM&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">),</span>
-</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">),</span>
-</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;BEFORE&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_journal</span><span class="p">(</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="p">),</span>
-</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="s2">&quot;BLOCKCOMPRESSION&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_blockcompression</span><span class="p">(),</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="s2">&quot;CHARACTER 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">_parse_character_set</span><span class="p">(),</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="s2">&quot;CHECKSUM&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_checksum</span><span class="p">(),</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="s2">&quot;CLUSTER BY&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><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">Cluster</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-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="p">),</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="s2">&quot;COLLATE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">),</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="s2">&quot;COMMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">),</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="s2">&quot;DATABLOCKSIZE&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_datablocksize</span><span class="p">(</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="n">default</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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="p">),</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="s2">&quot;DEFINER&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_definer</span><span class="p">(),</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="s2">&quot;DETERMINISTIC&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><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">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a> <span class="p">),</span>
-</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="s2">&quot;DISTKEY&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_distkey</span><span class="p">(),</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="s2">&quot;DISTSTYLE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">),</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;EXECUTE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">),</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="s2">&quot;EXTERNAL&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">ExternalProperty</span><span class="p">),</span>
-</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="s2">&quot;FALLBACK&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_fallback</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
-</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="s2">&quot;FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
-</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;FREESPACE&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_freespace</span><span class="p">(),</span>
-</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="s2">&quot;GLOBAL&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="s2">&quot;IMMUTABLE&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><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">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</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><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="s2">&quot;JOURNAL&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_journal</span><span class="p">(</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="p">),</span>
-</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="s2">&quot;LANGUAGE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">),</span>
-</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;LOCAL&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;LOCATION&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">),</span>
-</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="s2">&quot;LOCK&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_locking</span><span class="p">(),</span>
-</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="s2">&quot;LOCKING&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_locking</span><span class="p">(),</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;LOG&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_log</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
-</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;MATERIALIZED&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">MaterializedProperty</span><span class="p">),</span>
-</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;MAX&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_datablocksize</span><span class="p">(),</span>
-</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;MAXIMUM&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_datablocksize</span><span class="p">(),</span>
-</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;MERGEBLOCKRATIO&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_mergeblockratio</span><span class="p">(</span>
-</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</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">_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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</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 class="s2">&quot;MIN&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_datablocksize</span><span class="p">(),</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;MINIMUM&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_datablocksize</span><span class="p">(),</span>
-</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;MULTISET&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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;NO&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_noprimaryindex</span><span class="p">(),</span>
-</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;NOT&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;ON&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_oncommit</span><span class="p">(),</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;PARTITION BY&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_partitioned_by</span><span class="p">(),</span>
-</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;PARTITIONED BY&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_partitioned_by</span><span class="p">(),</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;PARTITIONED_BY&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_partitioned_by</span><span class="p">(),</span>
-</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;RETURNS&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_returns</span><span class="p">(),</span>
-</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;ROW&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_row</span><span class="p">(),</span>
-</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;ROW_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">),</span>
-</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;SORTKEY&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_sortkey</span><span class="p">(),</span>
-</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;STABLE&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><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;STABLE&quot;</span><span class="p">)</span>
-</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="p">),</span>
-</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="s2">&quot;STORED&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_stored</span><span class="p">(),</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;TABLE_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;TBLPROPERTIES&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_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">),</span>
-</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;TEMP&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;TEMPORARY&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;TRANSIENT&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">TransientProperty</span><span class="p">),</span>
-</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;USING&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
-</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;VOLATILE&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_volatile_property</span><span class="p">(),</span>
-</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;WITH&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_with_property</span><span class="p">(),</span>
-</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="p">}</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="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;AUTOINCREMENT&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_auto_increment</span><span class="p">(),</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_auto_increment</span><span class="p">(),</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;CASESPECIFIC&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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;CHARACTER 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><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetColumnConstraint</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-640"><a href="#L-640"><span class="linenos"> 640</span></a> <span class="p">),</span>
-</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="s2">&quot;CHECK&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><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</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</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-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="p">),</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="s2">&quot;COLLATE&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><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</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-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="p">),</span>
-</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="s2">&quot;COMMENT&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><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</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><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="p">),</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="s2">&quot;COMPRESS&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_compress</span><span class="p">(),</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;DEFAULT&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><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</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-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="p">),</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;ENCODE&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">EncodeColumnConstraint</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-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;FOREIGN KEY&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_foreign_key</span><span class="p">(),</span>
-</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;FORMAT&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><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</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-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="p">),</span>
-</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="s2">&quot;GENERATED&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_generated_as_identity</span><span class="p">(),</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="s2">&quot;IDENTITY&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_auto_increment</span><span class="p">(),</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;INLINE&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_inline</span><span class="p">(),</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
-</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;NOT&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_not_constraint</span><span class="p">(),</span>
-</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;NULL&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">NotNullColumnConstraint</span><span class="p">,</span> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;ON&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">_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-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</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_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;PATH&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">PathColumnConstraint</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><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;PRIMARY KEY&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_primary_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;REFERENCES&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_references</span><span class="p">(</span><span class="n">match</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;TITLE&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><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</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-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="s2">&quot;UNIQUE&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_unique</span><span class="p">(),</span>
-</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="s2">&quot;UPPERCASE&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">UppercaseColumnConstraint</span><span class="p">),</span>
-</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <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="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="s2">&quot;ADD&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_alter_table_add</span><span class="p">(),</span>
-</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;ALTER&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_alter_table_alter</span><span class="p">(),</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;DELETE&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">Delete</span><span class="p">,</span> <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-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;DROP&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_alter_table_drop</span><span class="p">(),</span>
-</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;RENAME&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_alter_table_rename</span><span class="p">(),</span>
-</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <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="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;CHECK&quot;</span><span class="p">,</span> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">,</span> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">}</span>
-</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a>
-</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</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_case</span><span class="p">(),</span>
-</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="n">TokenType</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="bp">self</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">(),</span>
-</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</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">Any</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-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><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="s2">&quot;CAST&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_cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="s2">&quot;CONVERT&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_convert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
-</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="s2">&quot;DECODE&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_decode</span><span class="p">(),</span>
-</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a> <span class="s2">&quot;EXTRACT&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_extract</span><span class="p">(),</span>
-</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="s2">&quot;JSON_OBJECT&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_json_object</span><span class="p">(),</span>
-</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a> <span class="s2">&quot;LOG&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_logarithm</span><span class="p">(),</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="s2">&quot;MATCH&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_match_against</span><span class="p">(),</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;POSITION&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_position</span><span class="p">(),</span>
-</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;STRING_AGG&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_string_agg</span><span class="p">(),</span>
-</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;SUBSTRING&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_substring</span><span class="p">(),</span>
-</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;TRIM&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_trim</span><span class="p">(),</span>
-</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;TRY_CAST&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_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;TRY_CONVERT&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_convert</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <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="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;match&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_match_recognize</span><span class="p">(),</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;where&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_where</span><span class="p">(),</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;group&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_group</span><span class="p">(),</span>
-</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;having&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_having</span><span class="p">(),</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;qualify&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_qualify</span><span class="p">(),</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;windows&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_window_clause</span><span class="p">(),</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;distribute&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Distribute</span><span class="p">),</span>
-</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;sort&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">),</span>
-</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;cluster&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">),</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;order&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_order</span><span class="p">(),</span>
-</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;limit&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_limit</span><span class="p">(),</span>
-</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;offset&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_offset</span><span class="p">(),</span>
-</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;lock&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_lock</span><span class="p">(),</span>
-</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;sample&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_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</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><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;GLOBAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">),</span>
-</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;LOCAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">),</span>
-</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;SESSION&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;SESSION&quot;</span><span class="p">),</span>
-</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;TRANSACTION&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_set_transaction</span><span class="p">(),</span>
-</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="p">}</span>
-</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a>
-</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="n">SHOW_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a>
-</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="n">TYPE_LITERAL_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="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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a>
-</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="n">MODIFIABLES</span> <span class="o">=</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">Subqueryable</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-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <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="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</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">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a> <span class="p">}</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a>
+</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="n">INTERVAL_VARS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-281"><a href="#L-281"><span class="linenos"> 281</span></a>
+</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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">APPLY</span><span class="p">,</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</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">RIGHT</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">WINDOW</span><span class="p">,</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <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">COMMENT_TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-293"><a href="#L-293"><span class="linenos"> 293</span></a>
+</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a> <span class="n">UPDATE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-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">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</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="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</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">CURRENT_DATE</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">CURRENT_DATETIME</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">CURRENT_TIMESTAMP</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">CURRENT_TIME</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">CURRENT_USER</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">FILTER</span><span class="p">,</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><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">IDENTIFIER</span><span class="p">,</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</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">ISNULL</span><span class="p">,</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><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">OFFSET</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">PRIMARY_KEY</span><span class="p">,</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</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">VAR</span><span class="p">,</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</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">TABLE</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">TIMESTAMP</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">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</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">CONJUNCTION</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="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</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">OR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</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="n">EQUALITY</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="n">TokenType</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">EQ</span><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">NEQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</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">NULLSAFE_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</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">COMPARISON</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="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</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">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</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><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">,</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</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">BitwiseXor</span><span class="p">,</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">,</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="p">}</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a>
+</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="n">TERM</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">,</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</span><span class="p">,</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Collate</span><span class="p">,</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="p">}</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a>
+</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">,</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distance</span><span class="p">,</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</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-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">,</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="n">TIMESTAMPS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a> <span class="p">}</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a>
+</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">SET_OPERATIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <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="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <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="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</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="n">LAMBDAS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">,</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</span><span class="p">(</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="p">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">},</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="p">),</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</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-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a> <span class="n">this</span><span class="o">=</span><span class="n">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">expressions</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="p">),</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</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 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="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</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-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</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">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</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 class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="n">this</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">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="p">),</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-433"><a href="#L-433"><span class="linenos"> 433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</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 class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</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="o">=</span><span class="n">path</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 class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">key</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-443"><a href="#L-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><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="n">this</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">expression</span><span class="o">=</span><span class="n">key</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="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="n">EXPRESSION_PARSERS</span> <span class="o">=</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">Column</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_column</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">DataType</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_types</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">From</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_from</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">Group</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_group</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">Identifier</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_id_var</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">Lateral</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_lateral</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">Join</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_join</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">Order</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_order</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">Cluster</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</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">Sort</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</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">Lambda</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_lambda</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">Limit</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_limit</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">Offset</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_offset</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">TableAlias</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_table_alias</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">Table</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_table</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">Condition</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_conjunction</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">Expression</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_statement</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">Properties</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_properties</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">Where</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_where</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">Ordered</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_ordered</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">Having</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_having</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">With</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_with</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">Window</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_named_window</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">Qualify</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_qualify</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">Returning</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_returning</span><span class="p">(),</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="s2">&quot;JOIN_TYPE&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_join_side_and_kind</span><span class="p">(),</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="p">}</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a>
+</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</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_alter</span><span class="p">(),</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</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_transaction</span><span class="p">(),</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</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_cache</span><span class="p">(),</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</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-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</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_comment</span><span class="p">(),</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</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_create</span><span class="p">(),</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</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_delete</span><span class="p">(),</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</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_describe</span><span class="p">(),</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</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_describe</span><span class="p">(),</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</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_drop</span><span class="p">(),</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</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-490"><a href="#L-490"><span class="linenos"> 490</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</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_insert</span><span class="p">(),</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</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_load_data</span><span class="p">(),</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</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_merge</span><span class="p">(),</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</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">Pragma</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-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</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-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</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_set</span><span class="p">(),</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</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_uncache</span><span class="p">(),</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</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_update</span><span class="p">(),</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</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><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="n">kind</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;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;WAREHOUSE&quot;</span><span class="p">,</span> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">))</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a> <span class="ow">and</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-502"><a href="#L-502"><span class="linenos"> 502</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">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><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a> <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">UNARY_PARSERS</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="n">TokenType</span><span class="o">.</span><span class="n">PLUS</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_unary</span><span class="p">(),</span> <span class="c1"># Unary + is handled as a no-op</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</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">Not</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_equality</span><span class="p">()),</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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">BitwiseNot</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_unary</span><span class="p">()),</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</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">Neg</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_unary</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><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">PRIMARY_PARSERS</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">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</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><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</span><span class="o">=</span><span class="kc">False</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 class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_except</span><span class="p">(),</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_replace</span><span class="p">()},</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="p">),</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="n">TokenType</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">_</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">Null</span><span class="p">),</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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-526"><a href="#L-526"><span class="linenos"> 526</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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-527"><a href="#L-527"><span class="linenos"> 527</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">BitString</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-528"><a href="#L-528"><span class="linenos"> 528</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">HexString</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-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">ByteString</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-530"><a href="#L-530"><span class="linenos"> 530</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_introducer</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_national</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_session_parameter</span><span class="p">(),</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a> <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">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</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">Placeholder</span><span class="p">),</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</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_parameter</span><span class="p">(),</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</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">Placeholder</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-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">_match_set</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">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">))</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a> <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="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</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_between</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</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">Glob</span><span class="p">),</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</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">Overlaps</span><span class="p">),</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</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_in</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</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_is</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</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">Like</span><span class="p">),</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</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">ILike</span><span class="p">),</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</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">RegexpILike</span><span class="p">),</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</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">RegexpLike</span><span class="p">),</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</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">SimilarTo</span><span class="p">),</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="p">}</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="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="s2">&quot;AFTER&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_afterjournal</span><span class="p">(</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="p">),</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="s2">&quot;ALGORITHM&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">),</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">),</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="s2">&quot;BEFORE&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_journal</span><span class="p">(</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</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 class="s2">&quot;BLOCKCOMPRESSION&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_blockcompression</span><span class="p">(),</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="s2">&quot;CHARACTER 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">_parse_character_set</span><span class="p">(),</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="s2">&quot;CHECKSUM&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_checksum</span><span class="p">(),</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="s2">&quot;CLUSTER BY&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><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">Cluster</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-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="p">),</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="s2">&quot;COLLATE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">),</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="s2">&quot;COMMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">),</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="s2">&quot;DATABLOCKSIZE&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_datablocksize</span><span class="p">(</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="n">default</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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="p">),</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="s2">&quot;DEFINER&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_definer</span><span class="p">(),</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="s2">&quot;DETERMINISTIC&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><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">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="p">),</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="s2">&quot;DISTKEY&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_distkey</span><span class="p">(),</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;DISTSTYLE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">),</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="s2">&quot;EXECUTE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">),</span>
+</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="s2">&quot;EXTERNAL&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">ExternalProperty</span><span class="p">),</span>
+</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="s2">&quot;FALLBACK&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_fallback</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="s2">&quot;FREESPACE&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_freespace</span><span class="p">(),</span>
+</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="s2">&quot;GLOBAL&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="s2">&quot;IMMUTABLE&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><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">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="p">),</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="s2">&quot;JOURNAL&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_journal</span><span class="p">(</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="p">),</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="s2">&quot;LANGUAGE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">),</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;LOCAL&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="s2">&quot;LOCATION&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">),</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="s2">&quot;LOCK&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_locking</span><span class="p">(),</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;LOCKING&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_locking</span><span class="p">(),</span>
+</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;LOG&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_log</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
+</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;MATERIALIZED&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">MaterializedProperty</span><span class="p">),</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;MAX&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_datablocksize</span><span class="p">(),</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;MAXIMUM&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_datablocksize</span><span class="p">(),</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="s2">&quot;MERGEBLOCKRATIO&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_mergeblockratio</span><span class="p">(</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</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">_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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="p">),</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;MIN&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_datablocksize</span><span class="p">(),</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;MINIMUM&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_datablocksize</span><span class="p">(),</span>
+</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;MULTISET&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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;NO&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_noprimaryindex</span><span class="p">(),</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;NOT&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;ON&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_oncommit</span><span class="p">(),</span>
+</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;PARTITION BY&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_partitioned_by</span><span class="p">(),</span>
+</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;PARTITIONED BY&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_partitioned_by</span><span class="p">(),</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;PARTITIONED_BY&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_partitioned_by</span><span class="p">(),</span>
+</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;RETURNS&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_returns</span><span class="p">(),</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;ROW&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_row</span><span class="p">(),</span>
+</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="s2">&quot;ROW_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">),</span>
+</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;SORTKEY&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_sortkey</span><span class="p">(),</span>
+</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="s2">&quot;STABLE&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><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;STABLE&quot;</span><span class="p">)</span>
+</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="p">),</span>
+</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;STORED&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_stored</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_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;TBLPROPERTIES&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_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">),</span>
+</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;TEMP&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;TEMPORARY&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;TRANSIENT&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">TransientProperty</span><span class="p">),</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;USING&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;VOLATILE&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_volatile_property</span><span class="p">(),</span>
+</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;WITH&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_with_property</span><span class="p">(),</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a> <span class="p">}</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a>
+</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;AUTOINCREMENT&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_auto_increment</span><span class="p">(),</span>
+</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_auto_increment</span><span class="p">(),</span>
+</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;CASESPECIFIC&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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;CHARACTER 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><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetColumnConstraint</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-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="p">),</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a> <span class="s2">&quot;CHECK&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><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</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</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-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="p">),</span>
+</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a> <span class="s2">&quot;COLLATE&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><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</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-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="p">),</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;COMMENT&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><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</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><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="p">),</span>
+</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;COMPRESS&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_compress</span><span class="p">(),</span>
+</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;DEFAULT&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><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</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-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="p">),</span>
+</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;ENCODE&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">EncodeColumnConstraint</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-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;FOREIGN KEY&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_foreign_key</span><span class="p">(),</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;FORMAT&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><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</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-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="p">),</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="s2">&quot;GENERATED&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_generated_as_identity</span><span class="p">(),</span>
+</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;IDENTITY&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_auto_increment</span><span class="p">(),</span>
+</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;INLINE&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_inline</span><span class="p">(),</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
+</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;NOT&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_not_constraint</span><span class="p">(),</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;NULL&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">NotNullColumnConstraint</span><span class="p">,</span> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;ON&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">_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-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</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_function</span><span class="p">()),</span>
+</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;PATH&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">PathColumnConstraint</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><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a> <span class="s2">&quot;PRIMARY KEY&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_primary_key</span><span class="p">(),</span>
+</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;REFERENCES&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_references</span><span class="p">(</span><span class="n">match</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a> <span class="s2">&quot;TITLE&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><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</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-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="p">),</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="s2">&quot;UNIQUE&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_unique</span><span class="p">(),</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="s2">&quot;UPPERCASE&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">UppercaseColumnConstraint</span><span class="p">),</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><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;ADD&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_alter_table_add</span><span class="p">(),</span>
+</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;ALTER&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_alter_table_alter</span><span class="p">(),</span>
+</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;DELETE&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">Delete</span><span class="p">,</span> <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-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;DROP&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_alter_table_drop</span><span class="p">(),</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="s2">&quot;RENAME&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_alter_table_rename</span><span class="p">(),</span>
+</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <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="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;CHECK&quot;</span><span class="p">,</span> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">,</span> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</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="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</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">Any</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-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</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_case</span><span class="p">(),</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="n">TokenType</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="bp">self</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">(),</span>
+</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT_VALUE_FOR</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><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</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-695"><a href="#L-695"><span class="linenos"> 695</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-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="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="s2">&quot;CAST&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_cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
+</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;CONVERT&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_convert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;DECODE&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_decode</span><span class="p">(),</span>
+</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;EXTRACT&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_extract</span><span class="p">(),</span>
+</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;JSON_OBJECT&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_json_object</span><span class="p">(),</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;LOG&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_logarithm</span><span class="p">(),</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;MATCH&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_match_against</span><span class="p">(),</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;POSITION&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_position</span><span class="p">(),</span>
+</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;STRING_AGG&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_string_agg</span><span class="p">(),</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;SUBSTRING&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_substring</span><span class="p">(),</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;TRIM&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_trim</span><span class="p">(),</span>
+</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;TRY_CAST&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_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;TRY_CONVERT&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_convert</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="p">}</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="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;match&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_match_recognize</span><span class="p">(),</span>
+</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;where&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_where</span><span class="p">(),</span>
+</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;group&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_group</span><span class="p">(),</span>
+</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;having&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_having</span><span class="p">(),</span>
+</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;qualify&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_qualify</span><span class="p">(),</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;windows&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_window_clause</span><span class="p">(),</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;distribute&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Distribute</span><span class="p">),</span>
+</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;sort&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">),</span>
+</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;cluster&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">),</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;order&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_order</span><span class="p">(),</span>
+</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;limit&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_limit</span><span class="p">(),</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;offset&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_offset</span><span class="p">(),</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;lock&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_lock</span><span class="p">(),</span>
+</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;sample&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_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="p">}</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a>
+</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="s2">&quot;GLOBAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">),</span>
+</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;LOCAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">),</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;SESSION&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;SESSION&quot;</span><span class="p">),</span>
+</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;TRANSACTION&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_set_transaction</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><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="n">TRANSACTION_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">}</span>
+</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="n">SHOW_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-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="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&quot;</span><span class="p">,</span>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;ISOLATION LEVEL READ COMMITTED&quot;</span><span class="p">,</span>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;ISOLATION LEVEL READ UNCOMMITTED&quot;</span><span class="p">,</span>
-</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="s2">&quot;ISOLATION LEVEL SERIALIZABLE&quot;</span><span class="p">,</span>
-</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="s2">&quot;READ WRITE&quot;</span><span class="p">,</span>
-</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="s2">&quot;READ ONLY&quot;</span><span class="p">,</span>
-</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="p">}</span>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a>
-</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="n">INSERT_ALTERNATIVES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">}</span>
-</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a>
-</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="n">WINDOW_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-753"><a href="#L-753"><span class="linenos"> 753</span></a>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="n">ADD_CONSTRAINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</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 class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">}</span>
+</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="n">TYPE_LITERAL_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="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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</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="n">MODIFIABLES</span> <span class="o">=</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">Subqueryable</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-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="n">TRANSACTION_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">}</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="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&quot;</span><span class="p">,</span>
+</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="s2">&quot;ISOLATION LEVEL READ COMMITTED&quot;</span><span class="p">,</span>
+</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="s2">&quot;ISOLATION LEVEL READ UNCOMMITTED&quot;</span><span class="p">,</span>
+</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="s2">&quot;ISOLATION LEVEL SERIALIZABLE&quot;</span><span class="p">,</span>
+</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="s2">&quot;READ WRITE&quot;</span><span class="p">,</span>
+</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;READ ONLY&quot;</span><span class="p">,</span>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="p">}</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a>
-</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="n">INSERT_ALTERNATIVES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">}</span>
</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">CONVERT_TYPE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="n">QUOTED_PIVOT_COLUMNS</span><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-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">WINDOW_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="n">WINDOW_BEFORE_PAREN_TOKENS</span> <span class="o">=</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-760"><a href="#L-760"><span class="linenos"> 760</span></a>
+</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="n">ADD_CONSTRAINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</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 class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">}</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="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
-</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">,</span>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">,</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">,</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">,</span>
-</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
-</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
-</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
-</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
-</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
-</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;_show_trie&quot;</span><span class="p">,</span>
-</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;_set_trie&quot;</span><span class="p">,</span>
-</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <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="fm">__init__</span><span class="p">(</span>
-</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
-</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="n">index_offset</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-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="n">unnest_column_only</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-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="n">alias_post_tablesample</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-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="n">max_errors</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-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="n">null_ordering</span><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-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="p">):</span>
-</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
-</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
-</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span> <span class="o">=</span> <span class="n">index_offset</span>
-</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span> <span class="o">=</span> <span class="n">unnest_column_only</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="n">alias_post_tablesample</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span> <span class="o">=</span> <span class="n">null_ordering</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a>
-</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</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><span id="L-806"><a href="#L-806"><span class="linenos"> 806</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-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a>
-</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
-</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_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="n">sql</span><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-817"><a href="#L-817"><span class="linenos"> 817</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-818"><a href="#L-818"><span class="linenos"> 818</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a><span class="sd"> per parsed SQL statement.</span>
+</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a>
+</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="n">CONVERT_TYPE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="n">QUOTED_PIVOT_COLUMNS</span><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-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
+</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
+</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
+</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">,</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">,</span>
+</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">,</span>
+</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
+</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">,</span>
+</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
+</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
+</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
+</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
+</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
+</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
+</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;_show_trie&quot;</span><span class="p">,</span>
+</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;_set_trie&quot;</span><span class="p">,</span>
+</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="p">)</span>
+</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a>
+</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
+</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="n">index_offset</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-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">unnest_column_only</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-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">alias_post_tablesample</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-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="n">max_errors</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-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="n">null_ordering</span><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-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="p">):</span>
+</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
+</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span> <span class="o">=</span> <span class="n">index_offset</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span> <span class="o">=</span> <span class="n">unnest_column_only</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="n">alias_post_tablesample</span>
+</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
+</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span> <span class="o">=</span> <span class="n">null_ordering</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a>
+</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</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><span id="L-813"><a href="#L-813"><span class="linenos"> 813</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-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</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="sd"> Args:</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
-</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
-</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a>
-</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a><span class="sd"> Returns:</span>
-</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a><span class="sd"> The list of syntax trees.</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
-</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
-</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="p">)</span>
+</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
+</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_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="n">sql</span><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-824"><a href="#L-824"><span class="linenos"> 824</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-825"><a href="#L-825"><span class="linenos"> 825</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
+</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a><span class="sd"> per parsed SQL statement.</span>
+</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a>
+</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a><span class="sd"> Args:</span>
+</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
+</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a>
-</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">raw_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><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="n">sql</span><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-838"><a href="#L-838"><span class="linenos"> 838</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-839"><a href="#L-839"><span class="linenos"> 839</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
-</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
-</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a><span class="sd"> Args:</span>
-</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a><span class="sd"> expression_types: the expression type(s) to try and parse the token list into.</span>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
-</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
-</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a>
-</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a><span class="sd"> Returns:</span>
-</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a><span class="sd"> The target Expression.</span>
-</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
-</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
-</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</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-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
-</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</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 class="kn">from</span> <span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><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="k">def</span> <span class="nf">_parse</span><span class="p">(</span>
-</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <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">Parser</span><span 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-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="n">raw_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><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="n">sql</span><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-872"><a href="#L-872"><span class="linenos"> 872</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-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</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 class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">)</span>
-</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="n">chunks</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">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-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="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">token</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">):</span>
-</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="k">if</span> <span class="n">token</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">SEMICOLON</span><span class="p">:</span>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">total</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
-</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="n">chunks</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">append</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
+</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a><span class="sd"> Returns:</span>
+</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a><span class="sd"> The list of syntax trees.</span>
+</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
+</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
+</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="p">)</span>
+</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a>
+</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
+</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="n">raw_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><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="n">sql</span><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-845"><a href="#L-845"><span class="linenos"> 845</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-846"><a href="#L-846"><span class="linenos"> 846</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</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="sd"> Args:</span>
+</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a><span class="sd"> expression_types: the expression type(s) to try and parse the token list into.</span>
+</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
+</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a>
+</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a><span class="sd"> Returns:</span>
+</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a><span class="sd"> The target Expression.</span>
+</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="n">errors</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="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
+</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</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-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</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 class="kn">from</span> <span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><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="k">def</span> <span class="nf">_parse</span><span class="p">(</span>
+</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <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">Parser</span><span 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-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="n">raw_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><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="n">sql</span><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-879"><a href="#L-879"><span class="linenos"> 879</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-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</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 class="ow">or</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">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">)</span>
+</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="n">chunks</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">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-884"><a href="#L-884"><span class="linenos"> 884</span></a>
-</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a>
-</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="k">for</span> <span class="n">tokens</span> <span class="ow">in</span> <span class="n">chunks</span><span class="p">:</span>
-</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
-</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="n">tokens</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">token</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">):</span>
+</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="k">if</span> <span class="n">token</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">SEMICOLON</span><span class="p">:</span>
+</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">total</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="n">chunks</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">append</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a>
-</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">append</span><span class="p">(</span><span class="n">parse_method</span><span class="p">(</span><span class="bp">self</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="p">[]</span>
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;</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-895"><a href="#L-895"><span class="linenos"> 895</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 expression / Unexpected token&quot;</span><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="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="k">for</span> <span class="n">tokens</span> <span class="ow">in</span> <span class="n">chunks</span><span class="p">:</span>
+</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="n">tokens</span>
+</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_method</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a>
-</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="k">def</span> <span class="nf">check_errors</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-902"><a href="#L-902"><span class="linenos"> 902</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a><span class="sd"> Logs or raises any found errors, depending on the chosen error level setting.</span>
-</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
-</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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">errors</span><span class="p">:</span>
-</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
-</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
-</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="p">)</span>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a>
-</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="k">def</span> <span class="nf">raise_error</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="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="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-915"><a href="#L-915"><span class="linenos"> 915</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a><span class="sd"> error level setting.</span>
-</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</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-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
-</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span>
-</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">start_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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
-</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="n">highlight</span> <span 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-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">end_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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</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">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
-</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
-</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
-</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
-</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
-</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="k">raise</span> <span class="n">error</span>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a>
-</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">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</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">def</span> <span class="nf">expression</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="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">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 class="o">**</span><span class="n">kwargs</span>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="p">)</span> <span class="o">-&gt;</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="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a><span class="sd"> Creates a new, validated Expression.</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="sd"> Args:</span>
-</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
-</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a><span class="sd"> comments: an optional list of comments to attach to the expression.</span>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a><span class="sd"> kwargs: the arguments to set for the expression along with their respective values.</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="sd"> Returns:</span>
-</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a><span class="sd"> The target expression.</span>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="n">instance</span><span class="o">.</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><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">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="k">if</span> <span class="n">comments</span><span class="p">:</span>
-</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
-</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="k">return</span> <span class="n">instance</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">def</span> <span class="nf">validate_expression</span><span class="p">(</span>
-</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</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">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">t</span><span class="o">.</span><span class="n">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a><span class="sd"> Validates an already instantiated expression, making sure that all its mandatory arguments</span>
-</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a><span class="sd"> are set.</span>
+</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;</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-902"><a href="#L-902"><span class="linenos"> 902</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 expression / Unexpected token&quot;</span><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="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
+</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a>
+</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="k">return</span> <span class="n">expressions</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="k">def</span> <span class="nf">check_errors</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-909"><a href="#L-909"><span class="linenos"> 909</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a><span class="sd"> Logs or raises any found errors, depending on the chosen error level setting.</span>
+</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a><span class="sd"> &quot;&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="bp">self</span><span class="o">.</span><span class="n">error_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-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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">errors</span><span class="p">:</span>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="p">)</span>
+</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a>
+</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="k">def</span> <span class="nf">raise_error</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="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="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-922"><a href="#L-922"><span class="linenos"> 922</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a><span class="sd"> error level setting.</span>
+</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</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-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
+</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">start_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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
+</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="n">highlight</span> <span 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-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="n">end_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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><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">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
+</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
+</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
+</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="k">raise</span> <span class="n">error</span>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a>
+</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
+</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <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">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 class="o">**</span><span class="n">kwargs</span>
+</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a><span class="sd"> Creates a new, validated Expression.</span>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a>
+</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a><span class="sd"> Args:</span>
+</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
+</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a><span class="sd"> comments: an optional list of comments to attach to the expression.</span>
+</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a><span class="sd"> kwargs: the arguments to set for the expression along with their respective values.</span>
+</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a>
+</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a><span class="sd"> Returns:</span>
+</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a><span class="sd"> The target expression.</span>
+</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</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="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="n">instance</span><span class="o">.</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><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="k">if</span> <span class="n">comments</span><span class="p">:</span>
+</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</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">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="k">return</span> <span class="n">instance</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="sd"> Args:</span>
-</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a><span class="sd"> expression: the expression to validate.</span>
-</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a><span class="sd"> args: an optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
-</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</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">error_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-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="k">return</span>
+</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span>
+</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</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">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">t</span><span class="o">.</span><span class="n">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a><span class="sd"> Validates an already instantiated expression, making sure that all its mandatory arguments</span>
+</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a><span class="sd"> are set.</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">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
-</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</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">_find_sql</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="n">end</span><span class="p">:</span> <span class="n">Token</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="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="o">.</span><span class="n">start</span> <span class="p">:</span> <span class="n">end</span><span class="o">.</span><span class="n">end</span><span class="p">]</span>
-</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a>
-</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</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">times</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">+=</span> <span class="n">times</span>
-</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="n">seq_get</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="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="n">seq_get</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="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-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">_index</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_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-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="k">else</span><span class="p">:</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">_prev</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</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">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</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="n">index</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</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">_advance</span><span class="p">(</span><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="p">)</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="k">def</span> <span class="nf">_parse_command</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">Command</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="bp">self</span><span class="o">.</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="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">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-979"><a href="#L-979"><span class="linenos"> 979</span></a><span class="sd"> Args:</span>
+</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a><span class="sd"> expression: the expression to validate.</span>
+</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a><span class="sd"> args: an optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
+</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="k">return</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">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
+</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
+</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a>
+</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="k">def</span> <span class="nf">_find_sql</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="n">end</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</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="o">.</span><span class="n">start</span> <span class="p">:</span> <span class="n">end</span><span class="o">.</span><span class="n">end</span><span class="p">]</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">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">times</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</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">_index</span> <span class="o">+=</span> <span class="n">times</span>
+</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="n">seq_get</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="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
+</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">_next</span> <span class="o">=</span> <span class="n">seq_get</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="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-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</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">_prev_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-999"><a href="#L-999"><span class="linenos"> 999</span></a> <span class="k">else</span><span class="p">:</span>
+</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">_prev</span> <span class="o">=</span> <span class="kc">None</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">_prev_comments</span> <span class="o">=</span> <span class="kc">None</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="k">def</span> <span class="nf">_parse_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">allow_exists</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</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-1005"><a href="#L-1005"><span class="linenos">1005</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 class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="k">def</span> <span class="nf">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</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="n">index</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">:</span>
+</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><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="p">)</span>
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a>
-</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</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-1008"><a href="#L-1008"><span class="linenos">1008</span></a>
-</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</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">CREATABLES</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-1010"><a href="#L-1010"><span class="linenos">1010</span></a>
-</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</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-1012"><a href="#L-1012"><span class="linenos">1012</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-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="k">def</span> <span class="nf">_parse_command</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">Command</span><span class="p">:</span>
+</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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">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-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">_parse_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">allow_exists</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</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-1012"><a href="#L-1012"><span class="linenos">1012</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 class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</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="n">kind</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">FUNCTION</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-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">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="k">elif</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">TABLE</span><span class="p">:</span>
-</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COMMENT_TABLE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="k">elif</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">COLUMN</span><span class="p">:</span>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</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-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">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-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="bp">self</span><span 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-1024"><a href="#L-1024"><span class="linenos">1024</span></a>
-</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <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-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comment</span><span 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="o">.</span><span class="n">text</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 class="n">exists</span><span class="o">=</span><span class="n">exists</span>
-</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="p">)</span>
-</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">is</span> <span class="kc">None</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="kc">None</span>
-</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</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">STATEMENT_PARSERS</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">STATEMENT_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-1014"><a href="#L-1014"><span class="linenos">1014</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-1015"><a href="#L-1015"><span class="linenos">1015</span></a>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</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">CREATABLES</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-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="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</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-1020"><a href="#L-1020"><span class="linenos">1020</span></a>
+</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="k">if</span> <span class="n">kind</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">FUNCTION</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-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="k">elif</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">TABLE</span><span class="p">:</span>
+</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COMMENT_TABLE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="k">elif</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">COLUMN</span><span class="p">:</span>
+</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</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-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</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-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="bp">self</span><span 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-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="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-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comment</span><span 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="o">.</span><span class="n">text</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 class="n">exists</span><span class="o">=</span><span class="n">exists</span>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span><span class="p">):</span>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">()</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="n">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-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="n">expression</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">expression</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</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="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="k">return</span> <span class="n">expression</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">def</span> <span class="nf">_parse_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">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-1046"><a href="#L-1046"><span class="linenos">1046</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-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="n">temporary</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-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="n">materialized</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">MATERIALIZED</span><span class="p">)</span>
-</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</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">CREATABLES</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-1050"><a href="#L-1050"><span class="linenos">1050</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-1051"><a href="#L-1051"><span class="linenos">1051</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-1052"><a href="#L-1052"><span class="linenos">1052</span></a>
-</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <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-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</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-1056"><a href="#L-1056"><span class="linenos">1056</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-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
-</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
-</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="n">cascade</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">CASCADE</span><span class="p">),</span>
-</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">constraints</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;CONSTRAINTS&quot;</span><span class="p">),</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">purge</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;PURGE&quot;</span><span class="p">),</span>
-</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="p">)</span>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">def</span> <span class="nf">_parse_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">not_</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="nb">bool</span><span class="p">]:</span>
-</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="k">return</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">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IF</span><span class="p">)</span>
-</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">not_</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">NOT</span><span class="p">))</span>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <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">EXISTS</span><span class="p">)</span>
+</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-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">_curr</span> <span class="ow">is</span> <span class="kc">None</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="kc">None</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">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">STATEMENT_PARSERS</span><span class="p">):</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_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-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="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span><span class="p">):</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">()</span>
+</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a>
+</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="n">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-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="n">expression</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">expression</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</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">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="k">return</span> <span class="n">expression</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">def</span> <span class="nf">_parse_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">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-1053"><a href="#L-1053"><span class="linenos">1053</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-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">temporary</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-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="n">materialized</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">MATERIALIZED</span><span class="p">)</span>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</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">CREATABLES</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-1057"><a href="#L-1057"><span class="linenos">1057</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-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">_parse_as_command</span><span class="p">(</span><span class="n">start</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</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-1063"><a href="#L-1063"><span class="linenos">1063</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-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="n">cascade</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">CASCADE</span><span class="p">),</span>
+</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="n">constraints</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;CONSTRAINTS&quot;</span><span class="p">),</span>
+</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="n">purge</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;PURGE&quot;</span><span class="p">),</span>
</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="p">)</span>
</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a>
-</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="k">def</span> <span class="nf">_parse_create</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1073"><a href="#L-1073"><span class="linenos">1073</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-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="n">replace</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="o">==</span> <span class="s2">&quot;REPLACE&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span>
-</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span>
-</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="p">)</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</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-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="k">def</span> <span class="nf">_parse_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">not_</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="nb">bool</span><span class="p">]:</span>
+</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</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">IF</span><span class="p">)</span>
+</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">not_</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">NOT</span><span class="p">))</span>
+</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <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">EXISTS</span><span class="p">)</span>
+</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="p">)</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">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">TABLE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</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-1080"><a href="#L-1080"><span class="linenos">1080</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-1081"><a href="#L-1081"><span class="linenos">1081</span></a>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">create_token</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">CREATABLES</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-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="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
-</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
-</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="n">create_token</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">CREATABLES</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-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="k">def</span> <span class="nf">_parse_create</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1080"><a href="#L-1080"><span class="linenos">1080</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-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="n">replace</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="o">==</span> <span class="s2">&quot;REPLACE&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span>
+</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span>
+</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="p">)</span>
+</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</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-1085"><a href="#L-1085"><span class="linenos">1085</span></a>
+</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</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">TABLE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</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-1087"><a href="#L-1087"><span class="linenos">1087</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-1088"><a href="#L-1088"><span class="linenos">1088</span></a>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">properties</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
-</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</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-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="n">create_token</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">CREATABLES</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-1091"><a href="#L-1091"><span class="linenos">1091</span></a>
-</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</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 class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="n">create_token</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">CREATABLES</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-1095"><a href="#L-1095"><span class="linenos">1095</span></a>
+</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">properties</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</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">_parse_as_command</span><span class="p">(</span><span class="n">start</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">if</span> <span class="n">create_token</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">FUNCTION</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-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">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
-</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a>
-</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</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-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="n">begin</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">BEGIN</span><span class="p">)</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="n">return_</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;RETURN&quot;</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="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
-</span><span id="L-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">if</span> <span class="n">return_</span><span class="p">:</span>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</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 class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="k">elif</span> <span class="n">create_token</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">INDEX</span><span class="p">:</span>
-</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">()</span>
-</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="k">elif</span> <span class="n">create_token</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">DB_CREATABLES</span><span class="p">:</span>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="n">table_parts</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-1099"><a href="#L-1099"><span class="linenos">1099</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 class="n">not_</span><span class="o">=</span><span class="kc">True</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="kc">None</span>
+</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</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="n">create_token</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">FUNCTION</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-1107"><a href="#L-1107"><span class="linenos">1107</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</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="bp">self</span><span 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-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="n">begin</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">BEGIN</span><span class="p">)</span>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="n">return_</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;RETURN&quot;</span><span class="p">)</span>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="c1"># exp.Properties.Location.POST_NAME</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(</span><span class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</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="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="n">this</span><span class="o">=</span><span class="n">table_parts</span><span class="p">)</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="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="k">if</span> <span class="n">return_</span><span class="p">:</span>
+</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</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 class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="k">elif</span> <span class="n">create_token</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">INDEX</span><span class="p">:</span>
+</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">()</span>
+</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="k">elif</span> <span class="n">create_token</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">DB_CREATABLES</span><span class="p">:</span>
+</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="n">table_parts</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-1125"><a href="#L-1125"><span class="linenos">1125</span></a>
+</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="c1"># exp.Properties.Location.POST_NAME</span>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(</span><span class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a>
+</span><span id="L-1134"><a href="#L-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">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">table_parts</span><span class="p">)</span>
</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</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-1137"><a href="#L-1137"><span class="linenos">1137</span></a>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</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">SELECT</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-1141"><a href="#L-1141"><span class="linenos">1141</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">WITH</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-1142"><a href="#L-1142"><span class="linenos">1142</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">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-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="p">):</span>
-</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</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="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">()</span>
-</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a>
-</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="k">if</span> <span class="n">create_token</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">TABLE</span><span class="p">:</span>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a>
-</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="k">while</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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_table_index</span><span class="p">()</span>
-</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a>
-</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</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-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</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">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a>
-</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="k">break</span>
-</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="n">indexes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="k">elif</span> <span class="n">create_token</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">VIEW</span><span class="p">:</span>
-</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;BINDING&quot;</span><span class="p">):</span>
-</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a>
-</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <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-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
-</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
-</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
-</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="n">no_schema_binding</span><span class="o">=</span><span class="n">no_schema_binding</span><span class="p">,</span>
-</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
-</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <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="k">def</span> <span class="nf">_parse_property_before</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1195"><a href="#L-1195"><span class="linenos">1195</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-1196"><a href="#L-1196"><span class="linenos">1196</span></a>
-</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="c1"># parsers look to _prev for no/dual/default, so need to consume first</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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
-</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</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;DUAL&quot;</span><span class="p">)</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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_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">_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-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</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="bp">self</span><span class="p">)</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a>
-</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a>
-</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a> <span class="k">def</span> <span class="nf">_parse_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-1208"><a href="#L-1208"><span class="linenos">1208</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">PROPERTY_PARSERS</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">PROPERTY_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-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="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">DEFAULT</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-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">_parse_character_set</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</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">_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-1144"><a href="#L-1144"><span class="linenos">1144</span></a>
+</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
+</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">if</span> <span class="ow">not</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">_match</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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</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">WITH</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-1149"><a href="#L-1149"><span class="linenos">1149</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">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-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="p">):</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</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="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">()</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">if</span> <span class="n">create_token</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">TABLE</span><span class="p">:</span>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
+</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</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">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</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">temp_properties</span><span class="p">:</span>
+</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</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">indexes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_table_index</span><span class="p">()</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="c1"># exp.Properties.Location.POST_INDEX</span>
+</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</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-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a>
+</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="k">break</span>
+</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a> <span class="n">indexes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</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="n">create_token</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">VIEW</span><span class="p">:</span>
+</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;BINDING&quot;</span><span class="p">):</span>
+</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a>
+</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">expression</span><span class="p">(</span>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
+</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
+</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
+</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="n">no_schema_binding</span><span class="o">=</span><span class="n">no_schema_binding</span><span class="p">,</span>
+</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
+</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="p">)</span>
+</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a>
+</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="k">def</span> <span class="nf">_parse_property_before</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1202"><a href="#L-1202"><span class="linenos">1202</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-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="c1"># parsers look to _prev for no/dual/default, so need to consume first</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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DUAL&quot;</span><span class="p">)</span>
+</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</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;DEFAULT&quot;</span><span class="p">)</span>
+</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a>
+</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_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">_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-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">PROPERTY_PARSERS</span><span class="p">[</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="bp">self</span><span class="p">)</span>
+</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a>
+</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="k">return</span> <span class="kc">None</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">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">COMPOUND</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">):</span>
-</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</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;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;SECURITY&quot;</span><span class="p">):</span>
-</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">,</span> <span class="n">definer</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;DEFINER&quot;</span><span class="p">))</span>
-</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a>
-</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a> <span class="n">assignment</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><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
-</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="p">)</span> <span class="ow">or</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</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-1214"><a href="#L-1214"><span class="linenos">1214</span></a> <span class="k">def</span> <span class="nf">_parse_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-1215"><a href="#L-1215"><span class="linenos">1215</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">PROPERTY_PARSERS</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">PROPERTY_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-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">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">DEFAULT</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-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_character_set</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a>
+</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</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">COMPOUND</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">):</span>
+</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a>
-</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a> <span class="k">if</span> <span class="n">assignment</span><span class="p">:</span>
-</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="n">key</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-1226"><a href="#L-1226"><span class="linenos">1226</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">EQ</span><span class="p">)</span>
-</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a>
-</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</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;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;SECURITY&quot;</span><span class="p">):</span>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">,</span> <span class="n">definer</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;DEFINER&quot;</span><span class="p">))</span>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a>
+</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="n">assignment</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><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="p">)</span> <span class="ow">or</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</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-1230"><a href="#L-1230"><span class="linenos">1230</span></a>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="k">def</span> <span class="nf">_parse_stored</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-1232"><a href="#L-1232"><span class="linenos">1232</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-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="n">input_format</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="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;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="n">output_format</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="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;OUTPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
-</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</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-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">,</span> <span class="n">input_format</span><span class="o">=</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="n">output_format</span>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="p">)</span>
-</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="k">if</span> <span class="n">input_format</span> <span class="ow">or</span> <span class="n">output_format</span>
-</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <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">def</span> <span class="nf">_parse_property_assignment</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">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-1247"><a href="#L-1247"><span class="linenos">1247</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">EQ</span><span class="p">)</span>
-</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</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-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <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-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="n">exp_class</span><span class="p">,</span>
-</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</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_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">before</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-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a>
-</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
-</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a> <span class="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_before</span><span class="p">()</span>
-</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">()</span>
-</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a>
-</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identified_property</span><span class="p">:</span>
-</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="k">break</span>
-</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">identified_property</span><span class="p">):</span>
-</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="n">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-1267"><a href="#L-1267"><span class="linenos">1267</span></a>
-</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">expressions</span><span class="o">=</span><span class="n">properties</span><span class="p">)</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">return</span> <span class="kc">None</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">def</span> <span class="nf">_parse_fallback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1274"><a href="#L-1274"><span class="linenos">1274</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;FALLBACK&quot;</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">protection</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;PROTECTION&quot;</span><span class="p">)</span>
-</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="p">)</span>
-</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a>
-</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="k">def</span> <span class="nf">_parse_volatile_property</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-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</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="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</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="k">if</span> <span class="n">pre_volatile_token</span> <span class="ow">and</span> <span class="n">pre_volatile_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</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">CREATE</span><span class="p">,</span>
-</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
-</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</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 class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</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">assignment</span><span class="p">:</span>
+</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="n">key</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-1233"><a href="#L-1233"><span class="linenos">1233</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">EQ</span><span class="p">)</span>
+</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">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="bp">self</span><span class="o">.</span><span class="n">_parse_column</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="kc">None</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">_parse_stored</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-1239"><a href="#L-1239"><span class="linenos">1239</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-1240"><a href="#L-1240"><span class="linenos">1240</span></a>
+</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a> <span class="n">input_format</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="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;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="n">output_format</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="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;OUTPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</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">expression</span><span class="p">(</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</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-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">,</span> <span class="n">input_format</span><span class="o">=</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="n">output_format</span>
+</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <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="n">input_format</span> <span class="ow">or</span> <span class="n">output_format</span>
+</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1251"><a href="#L-1251"><span class="linenos">1251</span></a> <span class="p">)</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">_parse_property_assignment</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">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-1254"><a href="#L-1254"><span class="linenos">1254</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">EQ</span><span class="p">)</span>
+</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</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-1256"><a href="#L-1256"><span class="linenos">1256</span></a> <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-1257"><a href="#L-1257"><span class="linenos">1257</span></a> <span class="n">exp_class</span><span class="p">,</span>
+</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</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_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1259"><a href="#L-1259"><span class="linenos">1259</span></a> <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">def</span> <span class="nf">_parse_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">before</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-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</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">while</span> <span class="kc">True</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="n">before</span><span class="p">:</span>
+</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_before</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="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</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">if</span> <span class="ow">not</span> <span class="n">identified_property</span><span class="p">:</span>
+</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a> <span class="k">break</span>
+</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">identified_property</span><span class="p">):</span>
+</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="n">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-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">properties</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="bp">self</span><span class="o">.</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="n">expressions</span><span class="o">=</span><span class="n">properties</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="k">return</span> <span class="kc">None</span>
+</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="k">def</span> <span class="nf">_parse_fallback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1281"><a href="#L-1281"><span class="linenos">1281</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;FALLBACK&quot;</span><span class="p">)</span>
+</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <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-1283"><a href="#L-1283"><span class="linenos">1283</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">protection</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;PROTECTION&quot;</span><span class="p">)</span>
+</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="p">)</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">_parse_volatile_property</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-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">_index</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span>
+</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">))</span>
-</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="k">def</span> <span class="nf">_parse_with_property</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="p">,</span>
-</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span 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">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-1297"><a href="#L-1297"><span class="linenos">1297</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">WITH</span><span class="p">)</span>
-</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1299"><a href="#L-1299"><span class="linenos">1299</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_property</span><span class="p">)</span>
+</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="k">if</span> <span class="n">pre_volatile_token</span> <span class="ow">and</span> <span class="n">pre_volatile_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span>
+</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
+</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="p">):</span>
+</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">()</span>
+</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a>
+</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">))</span>
</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a>
-</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</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;JOURNAL&quot;</span><span class="p">):</span>
-</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withjournaltable</span><span class="p">()</span>
-</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a>
-</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</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;DATA&quot;</span><span class="p">):</span>
-</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</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;DATA&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="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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">if</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-1310"><a href="#L-1310"><span class="linenos">1310</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a>
-</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withisolatedloading</span><span class="p">()</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="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
-</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="k">def</span> <span class="nf">_parse_definer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1316"><a href="#L-1316"><span class="linenos">1316</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">EQ</span><span class="p">)</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="n">user</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-1319"><a href="#L-1319"><span class="linenos">1319</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">PARAMETER</span><span class="p">)</span>
-</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a> <span class="n">host</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="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">MOD</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-1321"><a href="#L-1321"><span class="linenos">1321</span></a>
-</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">user</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">host</span><span class="p">:</span>
-</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="k">def</span> <span class="nf">_parse_with_property</span><span class="p">(</span>
+</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span 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">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-1304"><a href="#L-1304"><span class="linenos">1304</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">WITH</span><span class="p">)</span>
+</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1306"><a href="#L-1306"><span class="linenos">1306</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_property</span><span class="p">)</span>
+</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a>
+</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</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;JOURNAL&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="bp">self</span><span class="o">.</span><span class="n">_parse_withjournaltable</span><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">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;DATA&quot;</span><span class="p">):</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</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;DATA&quot;</span><span class="p">):</span>
+</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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">if</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-1317"><a href="#L-1317"><span class="linenos">1317</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a>
+</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withisolatedloading</span><span class="p">()</span>
+</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a>
+</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
+</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a> <span class="k">def</span> <span class="nf">_parse_definer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1323"><a href="#L-1323"><span class="linenos">1323</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">EQ</span><span class="p">)</span>
</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a>
-</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">(</span><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">user</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</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">def</span> <span class="nf">_parse_withjournaltable</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-1328"><a href="#L-1328"><span class="linenos">1328</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-1329"><a href="#L-1329"><span class="linenos">1329</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">EQ</span><span class="p">)</span>
-</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</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_parts</span><span class="p">())</span>
+</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="n">user</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-1326"><a href="#L-1326"><span class="linenos">1326</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">PARAMETER</span><span class="p">)</span>
+</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="n">host</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="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">MOD</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-1328"><a href="#L-1328"><span class="linenos">1328</span></a>
+</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">user</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">host</span><span class="p">:</span>
+</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a>
-</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="k">def</span> <span class="nf">_parse_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1333"><a href="#L-1333"><span class="linenos">1333</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;LOG&quot;</span><span class="p">)</span>
-</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">)</span>
-</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a>
-</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="k">def</span> <span class="nf">_parse_journal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</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-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="n">before</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;BEFORE&quot;</span><span class="p">)</span>
-</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</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;JOURNAL&quot;</span><span class="p">)</span>
-</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="n">before</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">def</span> <span class="nf">_parse_afterjournal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</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-1342"><a href="#L-1342"><span class="linenos">1342</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;NOT&quot;</span><span class="p">)</span>
-</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</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;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;JOURNAL&quot;</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AfterJournalProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">)</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a>
-</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="k">def</span> <span class="nf">_parse_checksum</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-1348"><a href="#L-1348"><span class="linenos">1348</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;CHECKSUM&quot;</span><span class="p">)</span>
-</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</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">EQ</span><span class="p">)</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">on</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1353"><a href="#L-1353"><span class="linenos">1353</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</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;OFF&quot;</span><span class="p">):</span>
-</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a> <span class="n">default</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">DEFAULT</span><span class="p">)</span>
+</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">(</span><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">user</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</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">_parse_withjournaltable</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-1335"><a href="#L-1335"><span class="linenos">1335</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-1336"><a href="#L-1336"><span class="linenos">1336</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">EQ</span><span class="p">)</span>
+</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</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_parts</span><span class="p">())</span>
+</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a>
+</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a> <span class="k">def</span> <span class="nf">_parse_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1340"><a href="#L-1340"><span class="linenos">1340</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;LOG&quot;</span><span class="p">)</span>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">)</span>
+</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a>
+</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a> <span class="k">def</span> <span class="nf">_parse_journal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</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-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="n">before</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;BEFORE&quot;</span><span class="p">)</span>
+</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</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;JOURNAL&quot;</span><span class="p">)</span>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="n">before</span><span class="p">)</span>
+</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a>
+</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="k">def</span> <span class="nf">_parse_afterjournal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</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-1349"><a href="#L-1349"><span class="linenos">1349</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;NOT&quot;</span><span class="p">)</span>
+</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</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;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;JOURNAL&quot;</span><span class="p">)</span>
+</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AfterJournalProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">)</span>
+</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a>
+</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a> <span class="k">def</span> <span class="nf">_parse_checksum</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-1355"><a href="#L-1355"><span class="linenos">1355</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;CHECKSUM&quot;</span><span class="p">)</span>
+</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</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">EQ</span><span class="p">)</span>
</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a>
-</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a> <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-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span>
-</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="p">)</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">_parse_freespace</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-1365"><a href="#L-1365"><span class="linenos">1365</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;FREESPACE&quot;</span><span class="p">)</span>
-</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</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">EQ</span><span class="p">)</span>
-</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <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-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</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_number</span><span class="p">(),</span> <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-1358"><a href="#L-1358"><span class="linenos">1358</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</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;OFF&quot;</span><span class="p">):</span>
+</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a> <span class="n">default</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">DEFAULT</span><span class="p">)</span>
+</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a>
+</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <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-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span>
+</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</span></a> <span class="p">)</span>
</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a>
-</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a> <span class="k">def</span> <span class="nf">_parse_mergeblockratio</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default</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-1372"><a href="#L-1372"><span class="linenos">1372</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;MERGEBLOCKRATIO&quot;</span><span class="p">)</span>
-</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-1374"><a href="#L-1374"><span class="linenos">1374</span></a> <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-1375"><a href="#L-1375"><span class="linenos">1375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
-</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="n">this</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-1377"><a href="#L-1377"><span class="linenos">1377</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-1378"><a href="#L-1378"><span class="linenos">1378</span></a> <span class="p">)</span>
-</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <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-1381"><a href="#L-1381"><span class="linenos">1381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
-</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</span></a> <span class="p">)</span>
-</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a>
-</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a> <span class="k">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1387"><a href="#L-1387"><span class="linenos">1387</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</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;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)):</span>
-</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)):</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a>
-</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</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">EQ</span><span class="p">)</span>
-</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a> <span class="n">size</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-1400"><a href="#L-1400"><span class="linenos">1400</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</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;BYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KBYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KILOBYTES&quot;</span><span class="p">)):</span>
-</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="n">units</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-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">)</span>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a>
-</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="k">def</span> <span class="nf">_parse_blockcompression</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-1406"><a href="#L-1406"><span class="linenos">1406</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;BLOCKCOMPRESSION&quot;</span><span class="p">)</span>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</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">EQ</span><span class="p">)</span>
-</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="n">always</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;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="n">manual</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;MANUAL&quot;</span><span class="p">)</span>
-</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="n">never</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;NEVER&quot;</span><span class="p">)</span>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="n">default</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;DEFAULT&quot;</span><span class="p">)</span>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</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;AUTOTEMP&quot;</span><span class="p">):</span>
-</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a> <span class="n">autotemp</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><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a>
-</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <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-1417"><a href="#L-1417"><span class="linenos">1417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
-</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
-</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
-</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
-</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
-</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a> <span class="p">)</span>
-</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a>
-</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="k">def</span> <span class="nf">_parse_withisolatedloading</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-1426"><a href="#L-1426"><span class="linenos">1426</span></a> <span class="n">no</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;NO&quot;</span><span class="p">)</span>
-</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="n">concurrent</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;CONCURRENT&quot;</span><span class="p">)</span>
-</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</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;ISOLATED&quot;</span><span class="p">,</span> <span class="s2">&quot;LOADING&quot;</span><span class="p">)</span>
-</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="n">for_all</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a> <span class="n">for_insert</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">)</span>
-</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a> <span class="n">for_none</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">)</span>
-</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a> <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-1433"><a href="#L-1433"><span class="linenos">1433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
-</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
-</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
-</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</span></a> <span class="n">for_all</span><span class="o">=</span><span class="n">for_all</span><span class="p">,</span>
-</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a> <span class="n">for_insert</span><span class="o">=</span><span class="n">for_insert</span><span class="p">,</span>
-</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="n">for_none</span><span class="o">=</span><span class="n">for_none</span><span class="p">,</span>
-</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a> <span class="p">)</span>
-</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a>
-</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a> <span class="k">def</span> <span class="nf">_parse_locking</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-1442"><a href="#L-1442"><span class="linenos">1442</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1443"><a href="#L-1443"><span class="linenos">1443</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</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">VIEW</span><span class="p">):</span>
-</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
-</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</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">ROW</span><span class="p">):</span>
-</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
-</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</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;DATABASE&quot;</span><span class="p">):</span>
-</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&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">kind</span> <span class="o">=</span> <span class="kc">None</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="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">):</span>
-</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</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_parts</span><span class="p">()</span>
-</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-1459"><a href="#L-1459"><span class="linenos">1459</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
-</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</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">IN</span><span class="p">):</span>
-</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
+</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a> <span class="k">def</span> <span class="nf">_parse_freespace</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-1372"><a href="#L-1372"><span class="linenos">1372</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;FREESPACE&quot;</span><span class="p">)</span>
+</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</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">EQ</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</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_number</span><span class="p">(),</span> <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-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="p">)</span>
+</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a>
+</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a> <span class="k">def</span> <span class="nf">_parse_mergeblockratio</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default</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-1379"><a href="#L-1379"><span class="linenos">1379</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;MERGEBLOCKRATIO&quot;</span><span class="p">)</span>
+</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-1381"><a href="#L-1381"><span class="linenos">1381</span></a> <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-1382"><a href="#L-1382"><span class="linenos">1382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
+</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a> <span class="n">this</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-1384"><a href="#L-1384"><span class="linenos">1384</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-1385"><a href="#L-1385"><span class="linenos">1385</span></a> <span class="p">)</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="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-1388"><a href="#L-1388"><span class="linenos">1388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
+</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
+</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a> <span class="p">)</span>
+</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a>
+</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a> <span class="k">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</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;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)):</span>
+</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)):</span>
+</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">False</span><span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</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">EQ</span><span class="p">)</span>
+</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="n">size</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-1407"><a href="#L-1407"><span class="linenos">1407</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</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;BYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KBYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KILOBYTES&quot;</span><span class="p">)):</span>
+</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="n">units</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-1410"><a href="#L-1410"><span class="linenos">1410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">)</span>
+</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a>
+</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a> <span class="k">def</span> <span class="nf">_parse_blockcompression</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-1413"><a href="#L-1413"><span class="linenos">1413</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;BLOCKCOMPRESSION&quot;</span><span class="p">)</span>
+</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</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">EQ</span><span class="p">)</span>
+</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="n">always</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;ALWAYS&quot;</span><span class="p">)</span>
+</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a> <span class="n">manual</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;MANUAL&quot;</span><span class="p">)</span>
+</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a> <span class="n">never</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;NEVER&quot;</span><span class="p">)</span>
+</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a> <span class="n">default</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;DEFAULT&quot;</span><span class="p">)</span>
+</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</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;AUTOTEMP&quot;</span><span class="p">):</span>
+</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a> <span class="n">autotemp</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><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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
+</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
+</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
+</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
+</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
+</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a> <span class="p">)</span>
+</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a>
+</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a> <span class="k">def</span> <span class="nf">_parse_withisolatedloading</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-1433"><a href="#L-1433"><span class="linenos">1433</span></a> <span class="n">no</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;NO&quot;</span><span class="p">)</span>
+</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a> <span class="n">concurrent</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;CONCURRENT&quot;</span><span class="p">)</span>
+</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</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;ISOLATED&quot;</span><span class="p">,</span> <span class="s2">&quot;LOADING&quot;</span><span class="p">)</span>
+</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</span></a> <span class="n">for_all</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
+</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a> <span class="n">for_insert</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">)</span>
+</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="n">for_none</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">)</span>
+</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a> <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-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
+</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
+</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
+</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a> <span class="n">for_all</span><span class="o">=</span><span class="n">for_all</span><span class="p">,</span>
+</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a> <span class="n">for_insert</span><span class="o">=</span><span class="n">for_insert</span><span class="p">,</span>
+</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a> <span class="n">for_none</span><span class="o">=</span><span class="n">for_none</span><span class="p">,</span>
+</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a> <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">def</span> <span class="nf">_parse_locking</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-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1450"><a href="#L-1450"><span class="linenos">1450</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</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">VIEW</span><span class="p">):</span>
+</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
+</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</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">ROW</span><span class="p">):</span>
+</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
+</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</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;DATABASE&quot;</span><span class="p">):</span>
+</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
+</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1458"><a href="#L-1458"><span class="linenos">1458</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a>
+</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</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;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">):</span>
+</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</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_parts</span><span class="p">()</span>
</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</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">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;ACCESS&quot;</span><span class="p">):</span>
-</span><span id="L-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
-</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</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;EXCL&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">)):</span>
-</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
-</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</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;SHARE&quot;</span><span class="p">):</span>
-</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
-</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</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;READ&quot;</span><span class="p">):</span>
-</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
-</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</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;WRITE&quot;</span><span class="p">):</span>
-</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
-</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</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;CHECKSUM&quot;</span><span class="p">):</span>
-</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
-</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a>
-</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a> <span class="n">override</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;OVERRIDE&quot;</span><span class="p">)</span>
-</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a>
-</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a> <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-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
-</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</span></a> <span class="n">for_or_in</span><span class="o">=</span><span class="n">for_or_in</span><span class="p">,</span>
-</span><span id="L-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="n">lock_type</span><span class="o">=</span><span class="n">lock_type</span><span class="p">,</span>
-</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
-</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="p">)</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">_parse_partition_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">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-1492"><a href="#L-1492"><span class="linenos">1492</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</span><span class="p">):</span>
-</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</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_conjunction</span><span class="p">)</span>
-</span><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="L-1495"><a href="#L-1495"><span class="linenos">1495</span></a>
-</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</span></a> <span class="k">def</span> <span class="nf">_parse_partitioned_by</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-1497"><a href="#L-1497"><span class="linenos">1497</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">EQ</span><span class="p">)</span>
-</span><span id="L-1498"><a href="#L-1498"><span class="linenos">1498</span></a> <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-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
-</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</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><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="p">)</span>
+</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
+</span><span id="L-1467"><a href="#L-1467"><span class="linenos">1467</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">IN</span><span class="p">):</span>
+</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
+</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</span></a>
+</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</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;ACCESS&quot;</span><span class="p">):</span>
+</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
+</span><span id="L-1474"><a href="#L-1474"><span class="linenos">1474</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;EXCL&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">)):</span>
+</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
+</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</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;SHARE&quot;</span><span class="p">):</span>
+</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
+</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</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;READ&quot;</span><span class="p">):</span>
+</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
+</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</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;WRITE&quot;</span><span class="p">):</span>
+</span><span id="L-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
+</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</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;CHECKSUM&quot;</span><span class="p">):</span>
+</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
+</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</span></a>
+</span><span id="L-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="n">override</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;OVERRIDE&quot;</span><span class="p">)</span>
+</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a>
+</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <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-1490"><a href="#L-1490"><span class="linenos">1490</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
+</span><span id="L-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</span></a> <span class="n">for_or_in</span><span class="o">=</span><span class="n">for_or_in</span><span class="p">,</span>
+</span><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</span></a> <span class="n">lock_type</span><span class="o">=</span><span class="n">lock_type</span><span class="p">,</span>
+</span><span id="L-1495"><a href="#L-1495"><span class="linenos">1495</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
+</span><span id="L-1496"><a href="#L-1496"><span class="linenos">1496</span></a> <span class="p">)</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">_parse_partition_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">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-1499"><a href="#L-1499"><span class="linenos">1499</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</span><span class="p">):</span>
+</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</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_conjunction</span><span class="p">)</span>
+</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a> <span class="k">return</span> <span class="p">[]</span>
</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a>
-</span><span id="L-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="k">def</span> <span class="nf">_parse_withdata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1504"><a href="#L-1504"><span class="linenos">1504</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
-</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
-</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a>
-</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">statistics</span><span class="o">=</span><span class="n">statistics</span><span class="p">)</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">_parse_noprimaryindex</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-1514"><a href="#L-1514"><span class="linenos">1514</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;PRIMARY&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">)</span>
-</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">()</span>
-</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a>
-</span><span id="L-1517"><a href="#L-1517"><span class="linenos">1517</span></a> <span class="k">def</span> <span class="nf">_parse_oncommit</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-1518"><a href="#L-1518"><span class="linenos">1518</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;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;PRESERVE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">)</span>
-</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">()</span>
-</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a>
-</span><span id="L-1521"><a href="#L-1521"><span class="linenos">1521</span></a> <span class="k">def</span> <span class="nf">_parse_distkey</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-1522"><a href="#L-1522"><span class="linenos">1522</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</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</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-1503"><a href="#L-1503"><span class="linenos">1503</span></a> <span class="k">def</span> <span class="nf">_parse_partitioned_by</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-1504"><a href="#L-1504"><span class="linenos">1504</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">EQ</span><span class="p">)</span>
+</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a> <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-1506"><a href="#L-1506"><span class="linenos">1506</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
+</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</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><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="p">)</span>
+</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</span></a>
+</span><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a> <span class="k">def</span> <span class="nf">_parse_withdata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1511"><a href="#L-1511"><span class="linenos">1511</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
+</span><span id="L-1512"><a href="#L-1512"><span class="linenos">1512</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1513"><a href="#L-1513"><span class="linenos">1513</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
+</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">statistics</span><span class="o">=</span><span class="n">statistics</span><span class="p">)</span>
+</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</span></a>
+</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a> <span class="k">def</span> <span class="nf">_parse_noprimaryindex</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-1521"><a href="#L-1521"><span class="linenos">1521</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;PRIMARY&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&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="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">()</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">_parse_create_like</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1525"><a href="#L-1525"><span class="linenos">1525</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</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-1526"><a href="#L-1526"><span class="linenos">1526</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1527"><a href="#L-1527"><span class="linenos">1527</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INCLUDING&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDING&quot;</span><span class="p">)):</span>
-</span><span id="L-1528"><a href="#L-1528"><span class="linenos">1528</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="n">id_var</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-1524"><a href="#L-1524"><span class="linenos">1524</span></a> <span class="k">def</span> <span class="nf">_parse_oncommit</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-1525"><a href="#L-1525"><span class="linenos">1525</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;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;PRESERVE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&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="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">()</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">_parse_distkey</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-1529"><a href="#L-1529"><span class="linenos">1529</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</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</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-1530"><a href="#L-1530"><span class="linenos">1530</span></a>
-</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">id_var</span><span class="p">:</span>
-</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a>
-</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span>
-</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <span class="n">value</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">id_var</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-1539"><a href="#L-1539"><span class="linenos">1539</span></a> <span class="p">)</span>
-</span><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</span></a> <span class="p">)</span>
-</span><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</span></a>
-</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</span></a> <span class="k">def</span> <span class="nf">_parse_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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-1544"><a href="#L-1544"><span class="linenos">1544</span></a> <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-1545"><a href="#L-1545"><span class="linenos">1545</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</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_id_var</span><span class="p">),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
-</span><span id="L-1546"><a href="#L-1546"><span class="linenos">1546</span></a> <span class="p">)</span>
-</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</span></a>
-</span><span id="L-1548"><a href="#L-1548"><span class="linenos">1548</span></a> <span class="k">def</span> <span class="nf">_parse_character_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1549"><a href="#L-1549"><span class="linenos">1549</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">EQ</span><span class="p">)</span>
-</span><span id="L-1550"><a href="#L-1550"><span class="linenos">1550</span></a> <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-1551"><a href="#L-1551"><span class="linenos">1551</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</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 class="n">default</span><span class="o">=</span><span class="n">default</span>
-</span><span id="L-1552"><a href="#L-1552"><span class="linenos">1552</span></a> <span class="p">)</span>
-</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a>
-</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a> <span class="k">def</span> <span class="nf">_parse_returns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-1555"><a href="#L-1555"><span class="linenos">1555</span></a> <span class="n">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="p">]</span>
-</span><span id="L-1556"><a href="#L-1556"><span class="linenos">1556</span></a> <span class="n">is_table</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">TABLE</span><span class="p">)</span>
-</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a>
-</span><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</span></a> <span class="k">if</span> <span class="n">is_table</span><span class="p">:</span>
-</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1560"><a href="#L-1560"><span class="linenos">1560</span></a> <span class="n">value</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-1561"><a href="#L-1561"><span class="linenos">1561</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
-</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</span></a> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="L-1563"><a href="#L-1563"><span class="linenos">1563</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_kwargs</span><span class="p">),</span>
-</span><span id="L-1564"><a href="#L-1564"><span class="linenos">1564</span></a> <span class="p">)</span>
-</span><span id="L-1565"><a href="#L-1565"><span class="linenos">1565</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-1566"><a href="#L-1566"><span class="linenos">1566</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-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1568"><a href="#L-1568"><span class="linenos">1568</span></a> <span class="n">value</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="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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
-</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a> <span class="n">value</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-1571"><a href="#L-1571"><span class="linenos">1571</span></a>
-</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">)</span>
-</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</span></a>
-</span><span id="L-1574"><a href="#L-1574"><span class="linenos">1574</span></a> <span class="k">def</span> <span class="nf">_parse_temporary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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-1575"><a href="#L-1575"><span class="linenos">1575</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">TEMPORARY</span><span class="p">)</span> <span class="c1"># in case calling from &quot;GLOBAL&quot;</span>
-</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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="n">global_</span><span class="o">=</span><span class="n">global_</span><span class="p">)</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="k">def</span> <span class="nf">_parse_describe</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-1579"><a href="#L-1579"><span class="linenos">1579</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">CREATABLES</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-1580"><a href="#L-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">_parse_table</span><span class="p">()</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="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1583"><a href="#L-1583"><span class="linenos">1583</span></a>
-</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a> <span class="k">def</span> <span class="nf">_parse_insert</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-1585"><a href="#L-1585"><span class="linenos">1585</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
-</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
-</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a> <span class="k">def</span> <span class="nf">_parse_create_like</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1532"><a href="#L-1532"><span class="linenos">1532</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</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-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INCLUDING&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDING&quot;</span><span class="p">)):</span>
+</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="n">id_var</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-1537"><a href="#L-1537"><span class="linenos">1537</span></a>
+</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">id_var</span><span class="p">:</span>
+</span><span id="L-1539"><a href="#L-1539"><span class="linenos">1539</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</span></a>
+</span><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span>
+</span><span id="L-1544"><a href="#L-1544"><span class="linenos">1544</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-1545"><a href="#L-1545"><span class="linenos">1545</span></a> <span class="n">value</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">id_var</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-1546"><a href="#L-1546"><span class="linenos">1546</span></a> <span class="p">)</span>
+</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</span></a> <span class="p">)</span>
+</span><span id="L-1548"><a href="#L-1548"><span class="linenos">1548</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">options</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="k">def</span> <span class="nf">_parse_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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-1551"><a href="#L-1551"><span class="linenos">1551</span></a> <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-1552"><a href="#L-1552"><span class="linenos">1552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</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_id_var</span><span class="p">),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
+</span><span id="L-1553"><a href="#L-1553"><span class="linenos">1553</span></a> <span class="p">)</span>
+</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a>
+</span><span id="L-1555"><a href="#L-1555"><span class="linenos">1555</span></a> <span class="k">def</span> <span class="nf">_parse_character_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1556"><a href="#L-1556"><span class="linenos">1556</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">EQ</span><span class="p">)</span>
+</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a> <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-1558"><a href="#L-1558"><span class="linenos">1558</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</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 class="n">default</span><span class="o">=</span><span class="n">default</span>
+</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</span></a> <span class="p">)</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">def</span> <span class="nf">_parse_returns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</span></a> <span class="n">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="p">]</span>
+</span><span id="L-1563"><a href="#L-1563"><span class="linenos">1563</span></a> <span class="n">is_table</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">TABLE</span><span class="p">)</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">if</span> <span class="n">is_table</span><span class="p">:</span>
+</span><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="n">value</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-1568"><a href="#L-1568"><span class="linenos">1568</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
+</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</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_kwargs</span><span class="p">),</span>
+</span><span id="L-1571"><a href="#L-1571"><span class="linenos">1571</span></a> <span class="p">)</span>
+</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</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-1573"><a href="#L-1573"><span class="linenos">1573</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-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">value</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="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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
+</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a> <span class="n">value</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-1578"><a href="#L-1578"><span class="linenos">1578</span></a>
+</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">)</span>
+</span><span id="L-1580"><a href="#L-1580"><span class="linenos">1580</span></a>
+</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</span></a> <span class="k">def</span> <span class="nf">_parse_temporary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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-1582"><a href="#L-1582"><span class="linenos">1582</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">TEMPORARY</span><span class="p">)</span> <span class="c1"># in case calling from &quot;GLOBAL&quot;</span>
+</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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="n">global_</span><span class="o">=</span><span class="n">global_</span><span class="p">)</span>
+</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a>
+</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</span></a> <span class="k">def</span> <span class="nf">_parse_describe</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-1586"><a href="#L-1586"><span class="linenos">1586</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">CREATABLES</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-1587"><a href="#L-1587"><span class="linenos">1587</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-1588"><a href="#L-1588"><span class="linenos">1588</span></a>
-</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</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;DIRECTORY&quot;</span><span class="p">):</span>
-</span><span id="L-1590"><a href="#L-1590"><span class="linenos">1590</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
-</span><span id="L-1592"><a href="#L-1592"><span class="linenos">1592</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_or_string</span><span class="p">(),</span>
-</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a> <span class="n">row_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">(</span><span class="n">match_row</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-1595"><a href="#L-1595"><span class="linenos">1595</span></a> <span class="p">)</span>
-</span><span id="L-1596"><a href="#L-1596"><span class="linenos">1596</span></a> <span class="k">else</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="bp">self</span><span class="o">.</span><span class="n">_match</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-1598"><a href="#L-1598"><span class="linenos">1598</span></a> <span class="n">alternative</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="bp">self</span><span class="o">.</span><span class="n">INSERT_ALTERNATIVES</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-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="bp">self</span><span 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-1601"><a href="#L-1601"><span class="linenos">1601</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-1602"><a href="#L-1602"><span class="linenos">1602</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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1607"><a href="#L-1607"><span class="linenos">1607</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-1608"><a href="#L-1608"><span class="linenos">1608</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</span><span class="p">(),</span>
-</span><span id="L-1609"><a href="#L-1609"><span class="linenos">1609</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">(),</span>
-</span><span id="L-1610"><a href="#L-1610"><span class="linenos">1610</span></a> <span class="n">conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
-</span><span id="L-1611"><a href="#L-1611"><span class="linenos">1611</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
-</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_on_conflict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="n">conflict</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONFLICT&quot;</span><span class="p">)</span>
-</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="n">duplicate</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a>
-</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">conflict</span> <span class="ow">or</span> <span class="n">duplicate</span><span class="p">):</span>
-</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1590"><a href="#L-1590"><span class="linenos">1590</span></a>
+</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</span></a> <span class="k">def</span> <span class="nf">_parse_insert</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-1592"><a href="#L-1592"><span class="linenos">1592</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
+</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
+</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</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="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;DIRECTORY&quot;</span><span class="p">):</span>
+</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
+</span><span id="L-1599"><a href="#L-1599"><span class="linenos">1599</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_or_string</span><span class="p">(),</span>
+</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="n">row_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">(</span><span class="n">match_row</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</span></a> <span class="p">)</span>
+</span><span id="L-1603"><a href="#L-1603"><span class="linenos">1603</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1604"><a href="#L-1604"><span class="linenos">1604</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-1605"><a href="#L-1605"><span class="linenos">1605</span></a> <span class="n">alternative</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="bp">self</span><span class="o">.</span><span class="n">INSERT_ALTERNATIVES</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-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="bp">self</span><span 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-1608"><a href="#L-1608"><span class="linenos">1608</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-1609"><a href="#L-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">_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-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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</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-1615"><a href="#L-1615"><span class="linenos">1615</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</span><span class="p">(),</span>
+</span><span id="L-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">(),</span>
+</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="n">conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
+</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
+</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</span></a> <span class="p">)</span>
</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</span></a>
-</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a>
-</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
-</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">):</span>
-</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a> <span class="n">constraint</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-1631"><a href="#L-1631"><span class="linenos">1631</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</span></a> <span class="n">key</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-1633"><a href="#L-1633"><span class="linenos">1633</span></a>
-</span><span id="L-1634"><a href="#L-1634"><span class="linenos">1634</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;DO&quot;</span><span class="p">)</span>
-</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</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;NOTHING&quot;</span><span class="p">):</span>
-</span><span id="L-1636"><a href="#L-1636"><span class="linenos">1636</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1638"><a href="#L-1638"><span class="linenos">1638</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">UPDATE</span><span class="p">)</span>
-</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</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 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-1623"><a href="#L-1623"><span class="linenos">1623</span></a> <span class="k">def</span> <span class="nf">_parse_on_conflict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="n">conflict</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONFLICT&quot;</span><span class="p">)</span>
+</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="n">duplicate</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a>
+</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">conflict</span> <span class="ow">or</span> <span class="n">duplicate</span><span class="p">):</span>
+</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a>
+</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1631"><a href="#L-1631"><span class="linenos">1631</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1633"><a href="#L-1633"><span class="linenos">1633</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="n">conflict</span><span class="p">:</span>
+</span><span id="L-1636"><a href="#L-1636"><span class="linenos">1636</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">):</span>
+</span><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</span></a> <span class="n">constraint</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-1638"><a href="#L-1638"><span class="linenos">1638</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a> <span class="n">key</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-1640"><a href="#L-1640"><span class="linenos">1640</span></a>
-</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</span></a> <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-1642"><a href="#L-1642"><span class="linenos">1642</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
-</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
-</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
-</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
-</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</span><span class="p">,</span>
-</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <span class="p">)</span>
-</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</span></a>
-</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a> <span class="k">def</span> <span class="nf">_parse_returning</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1651"><a href="#L-1651"><span class="linenos">1651</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">RETURNING</span><span class="p">):</span>
-</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</span></a>
-</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1655"><a href="#L-1655"><span class="linenos">1655</span></a>
-</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</span></a> <span class="k">def</span> <span class="nf">_parse_row</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1657"><a href="#L-1657"><span class="linenos">1657</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">FORMAT</span><span class="p">):</span>
-</span><span id="L-1658"><a href="#L-1658"><span class="linenos">1658</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">()</span>
+</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</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;DO&quot;</span><span class="p">)</span>
+</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</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;NOTHING&quot;</span><span class="p">):</span>
+</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</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">UPDATE</span><span class="p">)</span>
+</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</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 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-1647"><a href="#L-1647"><span class="linenos">1647</span></a>
+</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a> <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-1649"><a href="#L-1649"><span class="linenos">1649</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
+</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
+</span><span id="L-1651"><a href="#L-1651"><span class="linenos">1651</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</span></a> <span class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
+</span><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</span><span class="p">,</span>
+</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</span></a> <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">_parse_returning</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1658"><a href="#L-1658"><span class="linenos">1658</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">RETURNING</span><span class="p">):</span>
+</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</span></a>
-</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="k">def</span> <span class="nf">_parse_row_format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_row</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-1662"><a href="#L-1662"><span class="linenos">1662</span></a> <span class="k">if</span> <span class="n">match_row</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</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-1663"><a href="#L-1663"><span class="linenos">1663</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1664"><a href="#L-1664"><span class="linenos">1664</span></a>
-</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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SERDE&quot;</span><span class="p">):</span>
-</span><span id="L-1666"><a href="#L-1666"><span class="linenos">1666</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</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><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1662"><a href="#L-1662"><span class="linenos">1662</span></a>
+</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</span></a> <span class="k">def</span> <span class="nf">_parse_row</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1664"><a href="#L-1664"><span class="linenos">1664</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">FORMAT</span><span class="p">):</span>
+</span><span id="L-1665"><a href="#L-1665"><span class="linenos">1665</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1666"><a href="#L-1666"><span class="linenos">1666</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">()</span>
</span><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a>
-</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</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;DELIMITED&quot;</span><span class="p">)</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">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</span></a> <span class="k">def</span> <span class="nf">_parse_row_format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_row</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-1669"><a href="#L-1669"><span class="linenos">1669</span></a> <span class="k">if</span> <span class="n">match_row</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</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-1670"><a href="#L-1670"><span class="linenos">1670</span></a> <span class="k">return</span> <span class="kc">None</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">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;FIELDS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fields&quot;</span><span class="p">]</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-1674"><a href="#L-1674"><span class="linenos">1674</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;ESCAPED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-1675"><a href="#L-1675"><span class="linenos">1675</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;escaped&quot;</span><span class="p">]</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-1676"><a href="#L-1676"><span class="linenos">1676</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;COLLECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;ITEMS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;collection_items&quot;</span><span class="p">]</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-1678"><a href="#L-1678"><span class="linenos">1678</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;MAP&quot;</span><span class="p">,</span> <span class="s2">&quot;KEYS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;map_keys&quot;</span><span class="p">]</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-1680"><a href="#L-1680"><span class="linenos">1680</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;LINES&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;lines&quot;</span><span class="p">]</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-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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFINED&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
-</span><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;null&quot;</span><span class="p">]</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-1684"><a href="#L-1684"><span class="linenos">1684</span></a>
-</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a>
-</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="k">def</span> <span class="nf">_parse_load_data</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-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
-</span><span id="L-1689"><a href="#L-1689"><span class="linenos">1689</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;INPATH&quot;</span><span class="p">)</span>
-</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a> <span class="n">inpath</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-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
-</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <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">INTO</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-1672"><a href="#L-1672"><span class="linenos">1672</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;SERDE&quot;</span><span class="p">):</span>
+</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</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><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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELIMITED&quot;</span><span class="p">)</span>
+</span><span id="L-1676"><a href="#L-1676"><span class="linenos">1676</span></a>
+</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</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="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FIELDS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fields&quot;</span><span class="p">]</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-1681"><a href="#L-1681"><span class="linenos">1681</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;ESCAPED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;escaped&quot;</span><span class="p">]</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-1683"><a href="#L-1683"><span class="linenos">1683</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;COLLECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;ITEMS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="L-1684"><a href="#L-1684"><span class="linenos">1684</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;collection_items&quot;</span><span class="p">]</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-1685"><a href="#L-1685"><span class="linenos">1685</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;MAP&quot;</span><span class="p">,</span> <span class="s2">&quot;KEYS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;map_keys&quot;</span><span class="p">]</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-1687"><a href="#L-1687"><span class="linenos">1687</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;LINES&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;lines&quot;</span><span class="p">]</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-1689"><a href="#L-1689"><span class="linenos">1689</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 class="s2">&quot;DEFINED&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
+</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;null&quot;</span><span class="p">]</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-1691"><a href="#L-1691"><span class="linenos">1691</span></a>
+</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</span></a>
-</span><span id="L-1694"><a href="#L-1694"><span class="linenos">1694</span></a> <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-1695"><a href="#L-1695"><span class="linenos">1695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
-</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</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-1697"><a href="#L-1697"><span class="linenos">1697</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
-</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</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</span><span class="p">(),</span>
-</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a> <span class="n">input_format</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;INPUTFORMAT&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-1702"><a href="#L-1702"><span class="linenos">1702</span></a> <span class="n">serde</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;SERDE&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-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="p">)</span>
-</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</span></a>
-</span><span id="L-1705"><a href="#L-1705"><span class="linenos">1705</span></a> <span class="k">def</span> <span class="nf">_parse_delete</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-1706"><a href="#L-1706"><span class="linenos">1706</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">FROM</span><span class="p">)</span>
-</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a>
-</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</span></a> <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-1709"><a href="#L-1709"><span class="linenos">1709</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
-</span><span id="L-1710"><a href="#L-1710"><span class="linenos">1710</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-1711"><a href="#L-1711"><span class="linenos">1711</span></a> <span class="n">using</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">_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_table</span><span class="p">()),</span>
-</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</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-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_update</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-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <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-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="L-1719"><a href="#L-1719"><span class="linenos">1719</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="L-1720"><a href="#L-1720"><span class="linenos">1720</span></a> <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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UPDATE_ALIAS_TOKENS</span><span class="p">),</span>
-</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a> <span class="s2">&quot;expressions&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">SET</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_equality</span><span class="p">),</span>
-</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</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">_parse_from</span><span class="p">(),</span>
-</span><span id="L-1723"><a href="#L-1723"><span class="linenos">1723</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
-</span><span id="L-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</span></a> <span class="p">},</span>
-</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_uncache</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-1729"><a href="#L-1729"><span class="linenos">1729</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-1730"><a href="#L-1730"><span class="linenos">1730</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 TABLE after UNCACHE&quot;</span><span class="p">)</span>
-</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a>
-</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <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-1733"><a href="#L-1733"><span class="linenos">1733</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span>
-</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</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-1735"><a href="#L-1735"><span class="linenos">1735</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-1736"><a href="#L-1736"><span class="linenos">1736</span></a> <span class="p">)</span>
-</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</span></a>
-</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</span></a> <span class="k">def</span> <span class="nf">_parse_cache</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-1739"><a href="#L-1739"><span class="linenos">1739</span></a> <span class="n">lazy</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">LAZY</span><span class="p">)</span>
-</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</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-1741"><a href="#L-1741"><span class="linenos">1741</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</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-1742"><a href="#L-1742"><span class="linenos">1742</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">):</span>
-</span><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</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-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="n">k</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-1747"><a href="#L-1747"><span class="linenos">1747</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">EQ</span><span class="p">)</span>
-</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a> <span class="n">v</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-1749"><a href="#L-1749"><span class="linenos">1749</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span>
-</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</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-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="bp">self</span><span 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-1753"><a href="#L-1753"><span class="linenos">1753</span></a> <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-1754"><a href="#L-1754"><span class="linenos">1754</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
-</span><span id="L-1755"><a href="#L-1755"><span class="linenos">1755</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="L-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
-</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
-</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</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><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="p">)</span>
-</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a>
-</span><span id="L-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <span class="k">def</span> <span class="nf">_parse_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1762"><a href="#L-1762"><span class="linenos">1762</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">PARTITION</span><span class="p">):</span>
-</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a>
-</span><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</span></a> <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-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</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_conjunction</span><span class="p">)</span>
-</span><span id="L-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="p">)</span>
-</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a>
-</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a> <span class="k">def</span> <span class="nf">_parse_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">Expression</span><span class="p">:</span>
-</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1771"><a href="#L-1771"><span class="linenos">1771</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-1772"><a href="#L-1772"><span class="linenos">1772</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-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1774"><a href="#L-1774"><span class="linenos">1774</span></a>
-</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="c1"># In presto we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
-</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="c1"># Source: https://prestodb.io/docs/current/sql/values.html</span>
-</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="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-1778"><a href="#L-1778"><span class="linenos">1778</span></a>
-</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="k">def</span> <span class="nf">_parse_select</span><span class="p">(</span>
-</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">nested</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">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 class="n">parse_subquery_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</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-1782"><a href="#L-1782"><span class="linenos">1782</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">()</span>
-</span><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
-</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
+</span><span id="L-1694"><a href="#L-1694"><span class="linenos">1694</span></a> <span class="k">def</span> <span class="nf">_parse_load_data</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-1695"><a href="#L-1695"><span class="linenos">1695</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
+</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</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;INPATH&quot;</span><span class="p">)</span>
+</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a> <span class="n">inpath</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-1698"><a href="#L-1698"><span class="linenos">1698</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
+</span><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a> <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">INTO</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-1700"><a href="#L-1700"><span class="linenos">1700</span></a>
+</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a> <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-1702"><a href="#L-1702"><span class="linenos">1702</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
+</span><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</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-1704"><a href="#L-1704"><span class="linenos">1704</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="L-1705"><a href="#L-1705"><span class="linenos">1705</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="L-1706"><a href="#L-1706"><span class="linenos">1706</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
+</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</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</span><span class="p">(),</span>
+</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</span></a> <span class="n">input_format</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;INPUTFORMAT&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-1709"><a href="#L-1709"><span class="linenos">1709</span></a> <span class="n">serde</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;SERDE&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-1710"><a href="#L-1710"><span class="linenos">1710</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_delete</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-1713"><a href="#L-1713"><span class="linenos">1713</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">FROM</span><span class="p">)</span>
+</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</span></a>
+</span><span id="L-1715"><a href="#L-1715"><span class="linenos">1715</span></a> <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-1716"><a href="#L-1716"><span class="linenos">1716</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
+</span><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</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-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <span class="n">using</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">_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_table</span><span class="p">()),</span>
+</span><span id="L-1719"><a href="#L-1719"><span class="linenos">1719</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-1720"><a href="#L-1720"><span class="linenos">1720</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a> <span class="p">)</span>
+</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</span></a>
+</span><span id="L-1723"><a href="#L-1723"><span class="linenos">1723</span></a> <span class="k">def</span> <span class="nf">_parse_update</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-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <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-1725"><a href="#L-1725"><span class="linenos">1725</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="L-1727"><a href="#L-1727"><span class="linenos">1727</span></a> <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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UPDATE_ALIAS_TOKENS</span><span class="p">),</span>
+</span><span id="L-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="s2">&quot;expressions&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">SET</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_equality</span><span class="p">),</span>
+</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</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">_parse_from</span><span class="p">(),</span>
+</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
+</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <span class="p">},</span>
+</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_uncache</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-1736"><a href="#L-1736"><span class="linenos">1736</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-1737"><a href="#L-1737"><span class="linenos">1737</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 TABLE after UNCACHE&quot;</span><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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span>
+</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</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-1742"><a href="#L-1742"><span class="linenos">1742</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-1743"><a href="#L-1743"><span class="linenos">1743</span></a> <span class="p">)</span>
+</span><span id="L-1744"><a href="#L-1744"><span class="linenos">1744</span></a>
+</span><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</span></a> <span class="k">def</span> <span class="nf">_parse_cache</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-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="n">lazy</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">LAZY</span><span class="p">)</span>
+</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</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-1748"><a href="#L-1748"><span class="linenos">1748</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</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-1749"><a href="#L-1749"><span class="linenos">1749</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a>
+</span><span id="L-1751"><a href="#L-1751"><span class="linenos">1751</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">):</span>
+</span><span id="L-1752"><a href="#L-1752"><span class="linenos">1752</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-1753"><a href="#L-1753"><span class="linenos">1753</span></a> <span class="n">k</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-1754"><a href="#L-1754"><span class="linenos">1754</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">EQ</span><span class="p">)</span>
+</span><span id="L-1755"><a href="#L-1755"><span class="linenos">1755</span></a> <span class="n">v</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-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span>
+</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</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-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="bp">self</span><span 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-1760"><a href="#L-1760"><span class="linenos">1760</span></a> <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-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
+</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
+</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
+</span><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</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><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1769"><a href="#L-1769"><span class="linenos">1769</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">PARTITION</span><span class="p">):</span>
+</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</span></a>
+</span><span id="L-1772"><a href="#L-1772"><span class="linenos">1772</span></a> <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-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</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_conjunction</span><span class="p">)</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><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="k">def</span> <span class="nf">_parse_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">Expression</span><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="bp">self</span><span 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-1778"><a href="#L-1778"><span class="linenos">1778</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-1779"><a href="#L-1779"><span class="linenos">1779</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-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="c1"># In presto we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
+</span><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a> <span class="c1"># Source: https://prestodb.io/docs/current/sql/values.html</span>
+</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="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-1785"><a href="#L-1785"><span class="linenos">1785</span></a>
-</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</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-1787"><a href="#L-1787"><span class="linenos">1787</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 any statement following CTE&quot;</span><span class="p">)</span>
-</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</span></a> <span class="k">return</span> <span class="n">cte</span>
-</span><span id="L-1789"><a href="#L-1789"><span class="linenos">1789</span></a>
-</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="k">if</span> <span class="s2">&quot;with&quot;</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;with&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="p">)</span>
-</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</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;</span><span class="si">{</span><span class="n">this</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> does not support CTE&quot;</span><span class="p">)</span>
-</span><span id="L-1794"><a href="#L-1794"><span class="linenos">1794</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
-</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</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">SELECT</span><span class="p">):</span>
-</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</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-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="n">kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</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-1800"><a href="#L-1800"><span class="linenos">1800</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">))</span>
-</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</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">text</span>
-</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</span></a> <span class="p">)</span>
-</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
-</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <span class="n">all_</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">ALL</span><span class="p">)</span>
-</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</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><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</span></a>
-</span><span id="L-1807"><a href="#L-1807"><span class="linenos">1807</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</span></a> <span class="n">distinct</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-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
-</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="n">on</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 class="k">if</span> <span class="bp">self</span><span 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="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a> <span class="p">)</span>
-</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a>
-</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <span class="n">all_</span> <span class="ow">and</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</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 ALL and DISTINCT after SELECT&quot;</span><span class="p">)</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="n">limit</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">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</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_expression</span><span class="p">)</span>
-</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a>
-</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">expression</span><span class="p">(</span>
-</span><span id="L-1820"><a href="#L-1820"><span class="linenos">1820</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
-</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
-</span><span id="L-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
-</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</span></a> <span class="p">)</span>
-</span><span id="L-1827"><a href="#L-1827"><span class="linenos">1827</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</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">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
-</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;into&quot;</span><span class="p">,</span> <span class="n">into</span><span class="p">)</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="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
-</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</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="bp">self</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-1838"><a href="#L-1838"><span class="linenos">1838</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">table</span> <span class="ow">or</span> <span class="n">nested</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-1839"><a href="#L-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">_parse_table</span><span class="p">()</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</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-1840"><a href="#L-1840"><span class="linenos">1840</span></a> <span class="bp">self</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-1841"><a href="#L-1841"><span class="linenos">1841</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 class="n">this</span><span class="p">)</span>
-</span><span id="L-1842"><a href="#L-1842"><span class="linenos">1842</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-1786"><a href="#L-1786"><span class="linenos">1786</span></a> <span class="k">def</span> <span class="nf">_parse_select</span><span class="p">(</span>
+</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">nested</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">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 class="n">parse_subquery_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</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-1789"><a href="#L-1789"><span class="linenos">1789</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">()</span>
+</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
+</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
+</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a>
+</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</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-1794"><a href="#L-1794"><span class="linenos">1794</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 any statement following CTE&quot;</span><span class="p">)</span>
+</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</span></a> <span class="k">return</span> <span class="n">cte</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="k">if</span> <span class="s2">&quot;with&quot;</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="L-1798"><a href="#L-1798"><span class="linenos">1798</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;with&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="p">)</span>
+</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</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;</span><span class="si">{</span><span class="n">this</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> does not support CTE&quot;</span><span class="p">)</span>
+</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
+</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</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">SELECT</span><span class="p">):</span>
+</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</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-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="n">kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</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-1807"><a href="#L-1807"><span class="linenos">1807</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">))</span>
+</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</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">text</span>
+</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="p">)</span>
+</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
+</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a> <span class="n">all_</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">ALL</span><span class="p">)</span>
+</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</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><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a>
+</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</span></a> <span class="n">distinct</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-1816"><a href="#L-1816"><span class="linenos">1816</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
+</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</span></a> <span class="n">on</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 class="k">if</span> <span class="bp">self</span><span 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="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="p">)</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">if</span> <span class="n">all_</span> <span class="ow">and</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</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 ALL and DISTINCT after SELECT&quot;</span><span class="p">)</span>
+</span><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a>
+</span><span id="L-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="n">limit</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">top</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">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_expression</span><span class="p">)</span>
+</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a>
+</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</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-1827"><a href="#L-1827"><span class="linenos">1827</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
+</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
+</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-1832"><a href="#L-1832"><span class="linenos">1832</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
+</span><span id="L-1833"><a href="#L-1833"><span class="linenos">1833</span></a> <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="n">comments</span> <span class="o">=</span> <span class="n">comments</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">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
+</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="k">if</span> <span class="n">into</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="n">set</span><span class="p">(</span><span class="s2">&quot;into&quot;</span><span class="p">,</span> <span class="n">into</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">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
+</span><span id="L-1841"><a href="#L-1841"><span class="linenos">1841</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="L-1842"><a href="#L-1842"><span class="linenos">1842</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</span>
</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</span></a>
-</span><span id="L-1844"><a href="#L-1844"><span class="linenos">1844</span></a> <span class="c1"># early return so that subquery unions aren&#39;t parsed again</span>
-</span><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</span></a> <span class="c1"># SELECT * FROM (SELECT 1) UNION ALL SELECT 1</span>
-</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a> <span class="c1"># Union ALL should be a property of the top select node, not the subquery</span>
-</span><span id="L-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="k">return</span> <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="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="n">parse_subquery_alias</span><span class="p">)</span>
-</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</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">VALUES</span><span class="p">):</span>
-</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</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-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span>
-</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</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-1852"><a href="#L-1852"><span class="linenos">1852</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-1853"><a href="#L-1853"><span class="linenos">1853</span></a> <span class="p">)</span>
-</span><span id="L-1854"><a href="#L-1854"><span class="linenos">1854</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</span></a>
-</span><span id="L-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="k">return</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-1858"><a href="#L-1858"><span class="linenos">1858</span></a>
-</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="k">def</span> <span class="nf">_parse_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_with_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">Expression</span><span class="p">]:</span>
-</span><span id="L-1860"><a href="#L-1860"><span class="linenos">1860</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_with_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">WITH</span><span class="p">):</span>
-</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a>
-</span><span id="L-1863"><a href="#L-1863"><span class="linenos">1863</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-1864"><a href="#L-1864"><span class="linenos">1864</span></a> <span class="n">recursive</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">RECURSIVE</span><span class="p">)</span>
+</span><span id="L-1844"><a href="#L-1844"><span class="linenos">1844</span></a> <span class="bp">self</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-1845"><a href="#L-1845"><span class="linenos">1845</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">table</span> <span class="ow">or</span> <span class="n">nested</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</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="k">if</span> <span class="n">table</span> <span class="k">else</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-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="bp">self</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-1848"><a href="#L-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">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</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-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="c1"># early return so that subquery unions aren&#39;t parsed again</span>
+</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a> <span class="c1"># SELECT * FROM (SELECT 1) UNION ALL SELECT 1</span>
+</span><span id="L-1853"><a href="#L-1853"><span class="linenos">1853</span></a> <span class="c1"># Union ALL should be a property of the top select node, not the subquery</span>
+</span><span id="L-1854"><a href="#L-1854"><span class="linenos">1854</span></a> <span class="k">return</span> <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="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="n">parse_subquery_alias</span><span class="p">)</span>
+</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</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">VALUES</span><span class="p">):</span>
+</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</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-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</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">_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-1859"><a href="#L-1859"><span class="linenos">1859</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-1860"><a href="#L-1860"><span class="linenos">1860</span></a> <span class="p">)</span>
+</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</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">return</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-1865"><a href="#L-1865"><span class="linenos">1865</span></a>
-</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</span></a> <span class="n">expressions</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_cte</span><span class="p">())</span>
+</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="k">def</span> <span class="nf">_parse_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_with_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">Expression</span><span class="p">]:</span>
+</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_with_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">WITH</span><span class="p">):</span>
+</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</span></a>
-</span><span id="L-1870"><a href="#L-1870"><span class="linenos">1870</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 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">WITH</span><span class="p">):</span>
-</span><span id="L-1871"><a href="#L-1871"><span class="linenos">1871</span></a> <span class="k">break</span>
-</span><span id="L-1872"><a href="#L-1872"><span class="linenos">1872</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</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">WITH</span><span class="p">)</span>
-</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a>
-</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <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-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</span>
-</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</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-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
-</span><span id="L-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="bp">self</span><span 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-1870"><a href="#L-1870"><span class="linenos">1870</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-1871"><a href="#L-1871"><span class="linenos">1871</span></a> <span class="n">recursive</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">RECURSIVE</span><span class="p">)</span>
+</span><span id="L-1872"><a href="#L-1872"><span class="linenos">1872</span></a>
+</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="n">expressions</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_cte</span><span class="p">())</span>
+</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a>
+</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</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 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">WITH</span><span class="p">):</span>
+</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</span></a> <span class="k">break</span>
+</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</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">WITH</span><span class="p">)</span>
+</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a>
+</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <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-1883"><a href="#L-1883"><span class="linenos">1883</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</span>
+</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a> <span class="p">)</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="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-1887"><a href="#L-1887"><span class="linenos">1887</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
-</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="n">this</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_statement</span><span class="p">),</span>
-</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
-</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</span></a> <span class="p">)</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">_parse_table_alias</span><span class="p">(</span>
-</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</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-1895"><a href="#L-1895"><span class="linenos">1895</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-1896"><a href="#L-1896"><span class="linenos">1896</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1897"><a href="#L-1897"><span class="linenos">1897</span></a> <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">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-1898"><a href="#L-1898"><span class="linenos">1898</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-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="p">)</span>
-</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a>
-</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</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-1902"><a href="#L-1902"><span class="linenos">1902</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1903"><a href="#L-1903"><span class="linenos">1903</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_function_parameter</span><span class="p">)</span>
-</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <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-1905"><a href="#L-1905"><span class="linenos">1905</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1886"><a href="#L-1886"><span class="linenos">1886</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</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-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
+</span><span id="L-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="bp">self</span><span 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-1892"><a href="#L-1892"><span class="linenos">1892</span></a>
+</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a> <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-1894"><a href="#L-1894"><span class="linenos">1894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
+</span><span id="L-1895"><a href="#L-1895"><span class="linenos">1895</span></a> <span class="n">this</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_statement</span><span class="p">),</span>
+</span><span id="L-1896"><a href="#L-1896"><span class="linenos">1896</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
+</span><span id="L-1897"><a href="#L-1897"><span class="linenos">1897</span></a> <span class="p">)</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">_parse_table_alias</span><span class="p">(</span>
+</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</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-1902"><a href="#L-1902"><span class="linenos">1902</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-1903"><a href="#L-1903"><span class="linenos">1903</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <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">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-1905"><a href="#L-1905"><span class="linenos">1905</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-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="p">)</span>
</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a>
-</span><span id="L-1908"><a href="#L-1908"><span class="linenos">1908</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="n">columns</span><span class="p">:</span>
-</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a>
-</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</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">_parse_subquery</span><span class="p">(</span>
-</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</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">parse_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <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-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
-</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <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-1920"><a href="#L-1920"><span class="linenos">1920</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">parse_alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</span></a> <span class="p">)</span>
-</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a>
-</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</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="kc">None</span><span class="p">:</span>
-</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">MODIFIABLES</span><span class="p">):</span>
-</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</span></a> <span class="k">return</span>
-</span><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a>
-</span><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</span></a> <span class="n">table</span> <span class="o">=</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><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">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</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-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="L-1932"><a href="#L-1932"><span class="linenos">1932</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-1908"><a href="#L-1908"><span class="linenos">1908</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-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1910"><a href="#L-1910"><span class="linenos">1910</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_function_parameter</span><span class="p">)</span>
+</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <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-1912"><a href="#L-1912"><span class="linenos">1912</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</span></a>
+</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</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="n">columns</span><span class="p">:</span>
+</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</span></a>
+</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a>
+</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a> <span class="k">def</span> <span class="nf">_parse_subquery</span><span class="p">(</span>
+</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</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">parse_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</span></a> <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-1924"><a href="#L-1924"><span class="linenos">1924</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
+</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a> <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-1927"><a href="#L-1927"><span class="linenos">1927</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">parse_alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</span></a> <span class="p">)</span>
+</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</span></a>
+</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</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="kc">None</span><span class="p">:</span>
+</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">MODIFIABLES</span><span class="p">):</span>
+</span><span id="L-1932"><a href="#L-1932"><span class="linenos">1932</span></a> <span class="k">return</span>
</span><span id="L-1933"><a href="#L-1933"><span class="linenos">1933</span></a>
-</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</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-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">lateral</span><span class="p">)</span>
-</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a>
-</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="n">comma</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="bp">self</span><span 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-1941"><a href="#L-1941"><span class="linenos">1941</span></a> <span class="k">if</span> <span class="n">comma</span><span class="p">:</span>
-</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</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="o">.</span><span class="n">append</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_table</span><span class="p">())</span>
-</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</span></a>
-</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">lateral</span> <span class="ow">or</span> <span class="n">join</span> <span class="ow">or</span> <span class="n">comma</span><span class="p">):</span>
-</span><span id="L-1945"><a href="#L-1945"><span class="linenos">1945</span></a> <span class="k">break</span>
+</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="n">table</span> <span class="o">=</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><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a>
+</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</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-1938"><a href="#L-1938"><span class="linenos">1938</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</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-1940"><a href="#L-1940"><span class="linenos">1940</span></a>
+</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</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-1944"><a href="#L-1944"><span class="linenos">1944</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="L-1945"><a href="#L-1945"><span class="linenos">1945</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">lateral</span><span class="p">)</span>
</span><span id="L-1946"><a href="#L-1946"><span class="linenos">1946</span></a>
-</span><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">parser</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-1948"><a href="#L-1948"><span class="linenos">1948</span></a> <span class="n">expression</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-1949"><a href="#L-1949"><span class="linenos">1949</span></a>
-</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-1951"><a href="#L-1951"><span class="linenos">1951</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-1952"><a href="#L-1952"><span class="linenos">1952</span></a>
-</span><span id="L-1953"><a href="#L-1953"><span class="linenos">1953</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-1954"><a href="#L-1954"><span class="linenos">1954</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1955"><a href="#L-1955"><span class="linenos">1955</span></a> <span class="n">hints</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</span><span class="p">)</span>
-</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</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-1957"><a href="#L-1957"><span class="linenos">1957</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-1958"><a href="#L-1958"><span class="linenos">1958</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1947"><a href="#L-1947"><span class="linenos">1947</span></a> <span class="n">comma</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="bp">self</span><span 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-1948"><a href="#L-1948"><span class="linenos">1948</span></a> <span class="k">if</span> <span class="n">comma</span><span class="p">:</span>
+</span><span id="L-1949"><a href="#L-1949"><span class="linenos">1949</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="o">.</span><span class="n">append</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_table</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">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">lateral</span> <span class="ow">or</span> <span class="n">join</span> <span class="ow">or</span> <span class="n">comma</span><span class="p">):</span>
+</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</span></a> <span class="k">break</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">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">parser</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a> <span class="n">expression</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-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">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-1958"><a href="#L-1958"><span class="linenos">1958</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-1959"><a href="#L-1959"><span class="linenos">1959</span></a>
-</span><span id="L-1960"><a href="#L-1960"><span class="linenos">1960</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</span></a>
-</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</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">Expression</span><span class="p">]:</span>
-</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</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-1964"><a href="#L-1964"><span class="linenos">1964</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a>
-</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</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-1967"><a href="#L-1967"><span class="linenos">1967</span></a> <span class="n">unlogged</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">UNLOGGED</span><span class="p">)</span>
-</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</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-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 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-1971"><a href="#L-1971"><span class="linenos">1971</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-1972"><a href="#L-1972"><span class="linenos">1972</span></a> <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 class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1975"><a href="#L-1975"><span class="linenos">1975</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">FROM</span><span class="p">):</span>
-</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</span></a>
-</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</span></a> <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-1979"><a href="#L-1979"><span class="linenos">1979</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">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_table</span><span class="p">)</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><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</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">Expression</span><span class="p">]:</span>
-</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</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-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a>
-</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">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</span></a>
-</span><span id="L-1988"><a href="#L-1988"><span class="linenos">1988</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-1989"><a href="#L-1989"><span class="linenos">1989</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-1990"><a href="#L-1990"><span class="linenos">1990</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-1991"><a href="#L-1991"><span class="linenos">1991</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_expression</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-1992"><a href="#L-1992"><span class="linenos">1992</span></a> <span class="p">)</span>
-</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</span></a>
-</span><span id="L-1994"><a href="#L-1994"><span class="linenos">1994</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-1995"><a href="#L-1995"><span class="linenos">1995</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">this</span><span class="o">=</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</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-1997"><a href="#L-1997"><span class="linenos">1997</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-1998"><a href="#L-1998"><span class="linenos">1998</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-1999"><a href="#L-1999"><span class="linenos">1999</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
-</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</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-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
-</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</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-2003"><a href="#L-2003"><span class="linenos">2003</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
-</span><span id="L-2004"><a href="#L-2004"><span class="linenos">2004</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">this</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2005"><a href="#L-2005"><span class="linenos">2005</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2006"><a href="#L-2006"><span class="linenos">2006</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2007"><a href="#L-2007"><span class="linenos">2007</span></a>
-</span><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</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-2009"><a href="#L-2009"><span class="linenos">2009</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</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-2011"><a href="#L-2011"><span class="linenos">2011</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; PAST LAST ROW&quot;</span>
-</span><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</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-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO NEXT ROW&quot;</span>
-</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</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-2015"><a href="#L-2015"><span class="linenos">2015</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-2016"><a href="#L-2016"><span class="linenos">2016</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-2017"><a href="#L-2017"><span class="linenos">2017</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-2018"><a href="#L-2018"><span class="linenos">2018</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">this</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <span class="k">else</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="kc">None</span>
-</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a>
-</span><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</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-2023"><a href="#L-2023"><span class="linenos">2023</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-2024"><a href="#L-2024"><span class="linenos">2024</span></a>
-</span><span id="L-2025"><a href="#L-2025"><span class="linenos">2025</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-2026"><a href="#L-2026"><span class="linenos">2026</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-2027"><a href="#L-2027"><span class="linenos">2027</span></a>
-</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</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-2030"><a href="#L-2030"><span class="linenos">2030</span></a>
-</span><span id="L-2031"><a href="#L-2031"><span class="linenos">2031</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-2032"><a href="#L-2032"><span class="linenos">2032</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-2033"><a href="#L-2033"><span class="linenos">2033</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</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-2035"><a href="#L-2035"><span class="linenos">2035</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
-</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</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-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</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-2039"><a href="#L-2039"><span class="linenos">2039</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-2040"><a href="#L-2040"><span class="linenos">2040</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="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">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</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="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-2046"><a href="#L-2046"><span class="linenos">2046</span></a> <span class="k">lambda</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-2047"><a href="#L-2047"><span class="linenos">2047</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</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-2049"><a href="#L-2049"><span class="linenos">2049</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-2050"><a href="#L-2050"><span class="linenos">2050</span></a> <span class="p">)</span>
-</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <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="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-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="k">else</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a>
-</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <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-2059"><a href="#L-2059"><span class="linenos">2059</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</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-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="L-2063"><a href="#L-2063"><span class="linenos">2063</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="L-2064"><a href="#L-2064"><span class="linenos">2064</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</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-2068"><a href="#L-2068"><span class="linenos">2068</span></a> <span class="p">)</span>
-</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</span></a>
-</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</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">Expression</span><span class="p">]:</span>
-</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</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><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</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-2073"><a href="#L-2073"><span class="linenos">2073</span></a>
-</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</span></a> <span class="k">if</span> <span class="n">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</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-2076"><a href="#L-2076"><span class="linenos">2076</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">cross_apply</span>
-</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</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-2079"><a href="#L-2079"><span class="linenos">2079</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-2080"><a href="#L-2080"><span class="linenos">2080</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-2081"><a href="#L-2081"><span class="linenos">2081</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-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</span></a>
-</span><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</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-2086"><a href="#L-2086"><span class="linenos">2086</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_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-2087"><a href="#L-2087"><span class="linenos">2087</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-2088"><a href="#L-2088"><span class="linenos">2088</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-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</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-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="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">Expression</span><span class="p">]</span>
-</span><span id="L-2094"><a href="#L-2094"><span class="linenos">2094</span></a>
-</span><span id="L-2095"><a href="#L-2095"><span class="linenos">2095</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="L-2096"><a href="#L-2096"><span class="linenos">2096</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-2097"><a href="#L-2097"><span class="linenos">2097</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-2098"><a href="#L-2098"><span class="linenos">2098</span></a> <span class="n">table_alias</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">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 class="p">)</span>
-</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2100"><a href="#L-2100"><span class="linenos">2100</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-1960"><a href="#L-1960"><span class="linenos">1960</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1962"><a href="#L-1962"><span class="linenos">1962</span></a> <span class="n">hints</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</span><span class="p">)</span>
+</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</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-1964"><a href="#L-1964"><span class="linenos">1964</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-1965"><a href="#L-1965"><span class="linenos">1965</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="k">return</span> <span class="kc">None</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="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">Expression</span><span class="p">]:</span>
+</span><span id="L-1970"><a href="#L-1970"><span class="linenos">1970</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-1971"><a href="#L-1971"><span class="linenos">1971</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a>
+</span><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</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-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="n">unlogged</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">UNLOGGED</span><span class="p">)</span>
+</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</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-1976"><a href="#L-1976"><span class="linenos">1976</span></a>
+</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</span></a> <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-1978"><a href="#L-1978"><span class="linenos">1978</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-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><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1982"><a href="#L-1982"><span class="linenos">1982</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">FROM</span><span class="p">):</span>
+</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a>
+</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a> <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-1986"><a href="#L-1986"><span class="linenos">1986</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">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_table</span><span class="p">)</span>
+</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</span></a> <span class="p">)</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="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">Expression</span><span class="p">]:</span>
+</span><span id="L-1990"><a href="#L-1990"><span class="linenos">1990</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-1991"><a href="#L-1991"><span class="linenos">1991</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</span></a>
+</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">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-1994"><a href="#L-1994"><span class="linenos">1994</span></a>
+</span><span id="L-1995"><a href="#L-1995"><span class="linenos">1995</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-1996"><a href="#L-1996"><span class="linenos">1996</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-1997"><a href="#L-1997"><span class="linenos">1997</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-1998"><a href="#L-1998"><span class="linenos">1998</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_expression</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-1999"><a href="#L-1999"><span class="linenos">1999</span></a> <span class="p">)</span>
+</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a>
+</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</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-2002"><a href="#L-2002"><span class="linenos">2002</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">this</span><span class="o">=</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</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-2004"><a href="#L-2004"><span class="linenos">2004</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-2005"><a href="#L-2005"><span class="linenos">2005</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-2006"><a href="#L-2006"><span class="linenos">2006</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
+</span><span id="L-2007"><a href="#L-2007"><span class="linenos">2007</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-2008"><a href="#L-2008"><span class="linenos">2008</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
+</span><span id="L-2009"><a href="#L-2009"><span class="linenos">2009</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-2010"><a href="#L-2010"><span class="linenos">2010</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; WITH UNMATCHED ROWS&quot;</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="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">text</span><span class="p">)</span>
+</span><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</span></a>
+</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</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-2016"><a href="#L-2016"><span class="linenos">2016</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="L-2017"><a href="#L-2017"><span class="linenos">2017</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-2018"><a href="#L-2018"><span class="linenos">2018</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; PAST LAST ROW&quot;</span>
+</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</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-2020"><a href="#L-2020"><span class="linenos">2020</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO NEXT ROW&quot;</span>
+</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</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-2022"><a href="#L-2022"><span class="linenos">2022</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-2023"><a href="#L-2023"><span class="linenos">2023</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-2024"><a href="#L-2024"><span class="linenos">2024</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-2025"><a href="#L-2025"><span class="linenos">2025</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">this</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2027"><a href="#L-2027"><span class="linenos">2027</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a>
+</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</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-2030"><a href="#L-2030"><span class="linenos">2030</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-2031"><a href="#L-2031"><span class="linenos">2031</span></a>
+</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</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-2033"><a href="#L-2033"><span class="linenos">2033</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-2034"><a href="#L-2034"><span class="linenos">2034</span></a>
+</span><span id="L-2035"><a href="#L-2035"><span class="linenos">2035</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</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-2037"><a href="#L-2037"><span class="linenos">2037</span></a>
+</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</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-2039"><a href="#L-2039"><span class="linenos">2039</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-2040"><a href="#L-2040"><span class="linenos">2040</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</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-2042"><a href="#L-2042"><span class="linenos">2042</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</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-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</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-2046"><a href="#L-2046"><span class="linenos">2046</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-2047"><a href="#L-2047"><span class="linenos">2047</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="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">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2049"><a href="#L-2049"><span class="linenos">2049</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a>
+</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="k">lambda</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-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
+</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</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-2056"><a href="#L-2056"><span class="linenos">2056</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-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="p">)</span>
+</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <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="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-2060"><a href="#L-2060"><span class="linenos">2060</span></a> <span class="k">else</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2064"><a href="#L-2064"><span class="linenos">2064</span></a>
+</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <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-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</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-2068"><a href="#L-2068"><span class="linenos">2068</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
+</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</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-2075"><a href="#L-2075"><span class="linenos">2075</span></a> <span class="p">)</span>
+</span><span id="L-2076"><a href="#L-2076"><span class="linenos">2076</span></a>
+</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</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">Expression</span><span class="p">]:</span>
+</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</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><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</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-2080"><a href="#L-2080"><span class="linenos">2080</span></a>
+</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="k">if</span> <span class="n">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">:</span>
+</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</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-2083"><a href="#L-2083"><span class="linenos">2083</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">cross_apply</span>
+</span><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</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-2086"><a href="#L-2086"><span class="linenos">2086</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-2087"><a href="#L-2087"><span class="linenos">2087</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-2088"><a href="#L-2088"><span class="linenos">2088</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-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a>
+</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</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-2093"><a href="#L-2093"><span class="linenos">2093</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_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-2094"><a href="#L-2094"><span class="linenos">2094</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-2095"><a href="#L-2095"><span class="linenos">2095</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-2096"><a href="#L-2096"><span class="linenos">2096</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2097"><a href="#L-2097"><span class="linenos">2097</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-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="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">Expression</span><span class="p">]</span>
</span><span id="L-2101"><a href="#L-2101"><span class="linenos">2101</span></a>
-</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</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-2103"><a href="#L-2103"><span class="linenos">2103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="L-2104"><a href="#L-2104"><span class="linenos">2104</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
-</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
-</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</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-2108"><a href="#L-2108"><span class="linenos">2108</span></a> <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="k">return</span> <span class="n">expression</span>
-</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a>
-</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a> <span class="k">def</span> <span class="nf">_parse_join_side_and_kind</span><span class="p">(</span>
-</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</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-2115"><a href="#L-2115"><span class="linenos">2115</span></a> <span class="k">return</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">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</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-2117"><a href="#L-2117"><span class="linenos">2117</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-2118"><a href="#L-2118"><span class="linenos">2118</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-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="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2122"><a href="#L-2122"><span class="linenos">2122</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-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="n">natural</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_side_and_kind</span><span class="p">()</span>
-</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</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-2125"><a href="#L-2125"><span class="linenos">2125</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-2126"><a href="#L-2126"><span class="linenos">2126</span></a>
-</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</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-2128"><a href="#L-2128"><span class="linenos">2128</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-2129"><a href="#L-2129"><span class="linenos">2129</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</span></a> <span class="n">natural</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</span></a>
-</span><span id="L-2133"><a href="#L-2133"><span class="linenos">2133</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-2134"><a href="#L-2134"><span class="linenos">2134</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-2135"><a href="#L-2135"><span class="linenos">2135</span></a>
-</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</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-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a>
-</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="k">if</span> <span class="n">outer_apply</span><span class="p">:</span>
-</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">Token</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="s2">&quot;LEFT&quot;</span><span class="p">)</span>
-</span><span id="L-2141"><a href="#L-2141"><span class="linenos">2141</span></a>
-</span><span id="L-2142"><a href="#L-2142"><span class="linenos">2142</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><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <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><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</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-2104"><a href="#L-2104"><span class="linenos">2104</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-2105"><a href="#L-2105"><span class="linenos">2105</span></a> <span class="n">table_alias</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">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 class="p">)</span>
+</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</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-2108"><a href="#L-2108"><span class="linenos">2108</span></a>
+</span><span id="L-2109"><a href="#L-2109"><span class="linenos">2109</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-2110"><a href="#L-2110"><span class="linenos">2110</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
+</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
+</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</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-2115"><a href="#L-2115"><span class="linenos">2115</span></a> <span class="p">)</span>
+</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</span></a>
+</span><span id="L-2117"><a href="#L-2117"><span class="linenos">2117</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</span></a>
+</span><span id="L-2119"><a href="#L-2119"><span class="linenos">2119</span></a> <span class="k">def</span> <span class="nf">_parse_join_side_and_kind</span><span class="p">(</span>
+</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2121"><a href="#L-2121"><span class="linenos">2121</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-2122"><a href="#L-2122"><span class="linenos">2122</span></a> <span class="k">return</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">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</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-2124"><a href="#L-2124"><span class="linenos">2124</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-2125"><a href="#L-2125"><span class="linenos">2125</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-2126"><a href="#L-2126"><span class="linenos">2126</span></a> <span class="p">)</span>
+</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</span></a>
+</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2129"><a href="#L-2129"><span class="linenos">2129</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-2130"><a href="#L-2130"><span class="linenos">2130</span></a> <span class="n">natural</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_side_and_kind</span><span class="p">()</span>
+</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</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-2132"><a href="#L-2132"><span class="linenos">2132</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-2133"><a href="#L-2133"><span class="linenos">2133</span></a>
+</span><span id="L-2134"><a href="#L-2134"><span class="linenos">2134</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-2135"><a href="#L-2135"><span class="linenos">2135</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-2136"><a href="#L-2136"><span class="linenos">2136</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="n">natural</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a>
+</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</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-2141"><a href="#L-2141"><span class="linenos">2141</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-2142"><a href="#L-2142"><span class="linenos">2142</span></a>
+</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</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-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</span></a>
-</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
-</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;natural&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</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-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</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-2152"><a href="#L-2152"><span class="linenos">2152</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</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-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="k">if</span> <span class="bp">self</span><span 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-2156"><a href="#L-2156"><span class="linenos">2156</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-2157"><a href="#L-2157"><span class="linenos">2157</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-2158"><a href="#L-2158"><span class="linenos">2158</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-2159"><a href="#L-2159"><span class="linenos">2159</span></a>
-</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a> <span class="k">if</span> <span class="n">outer_apply</span><span class="p">:</span>
+</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">Token</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="s2">&quot;LEFT&quot;</span><span class="p">)</span>
+</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a>
+</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</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><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2151"><a href="#L-2151"><span class="linenos">2151</span></a> <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><span id="L-2152"><a href="#L-2152"><span class="linenos">2152</span></a>
+</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
+</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;natural&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2155"><a href="#L-2155"><span class="linenos">2155</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</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-2157"><a href="#L-2157"><span class="linenos">2157</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</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-2159"><a href="#L-2159"><span class="linenos">2159</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</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-2161"><a href="#L-2161"><span class="linenos">2161</span></a>
-</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</span></a> <span class="k">def</span> <span class="nf">_parse_index</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-2163"><a href="#L-2163"><span class="linenos">2163</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-2164"><a href="#L-2164"><span class="linenos">2164</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-2165"><a href="#L-2165"><span class="linenos">2165</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-2162"><a href="#L-2162"><span class="linenos">2162</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2163"><a href="#L-2163"><span class="linenos">2163</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-2164"><a href="#L-2164"><span class="linenos">2164</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-2165"><a href="#L-2165"><span class="linenos">2165</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-2166"><a href="#L-2166"><span class="linenos">2166</span></a>
-</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</span></a> <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-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</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="n">index</span><span class="p">,</span>
-</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</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 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
-</span><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="n">columns</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-2172"><a href="#L-2172"><span class="linenos">2172</span></a> <span class="p">)</span>
+</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</span></a>
+</span><span id="L-2169"><a href="#L-2169"><span class="linenos">2169</span></a> <span class="k">def</span> <span class="nf">_parse_index</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-2170"><a href="#L-2170"><span class="linenos">2170</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-2171"><a href="#L-2171"><span class="linenos">2171</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-2172"><a href="#L-2172"><span class="linenos">2172</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-2173"><a href="#L-2173"><span class="linenos">2173</span></a>
-</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <span class="k">def</span> <span class="nf">_parse_create_table_index</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2175"><a href="#L-2175"><span class="linenos">2175</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-2176"><a href="#L-2176"><span class="linenos">2176</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-2177"><a href="#L-2177"><span class="linenos">2177</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-2178"><a href="#L-2178"><span class="linenos">2178</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-2179"><a href="#L-2179"><span class="linenos">2179</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</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-2181"><a href="#L-2181"><span class="linenos">2181</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2183"><a href="#L-2183"><span class="linenos">2183</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a> <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-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</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="n">index</span><span class="p">,</span>
-</span><span id="L-2187"><a href="#L-2187"><span class="linenos">2187</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="L-2188"><a href="#L-2188"><span class="linenos">2188</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="L-2191"><a href="#L-2191"><span class="linenos">2191</span></a> <span class="p">)</span>
-</span><span id="L-2192"><a href="#L-2192"><span class="linenos">2192</span></a>
-</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2195"><a href="#L-2195"><span class="linenos">2195</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</span></a>
-</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2198"><a href="#L-2198"><span class="linenos">2198</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><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</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-2200"><a href="#L-2200"><span class="linenos">2200</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-2201"><a href="#L-2201"><span class="linenos">2201</span></a> <span class="p">)</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="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-2204"><a href="#L-2204"><span class="linenos">2204</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</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 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_id_var</span><span class="p">())</span>
-</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2208"><a href="#L-2208"><span class="linenos">2208</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</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><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">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</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-2214"><a href="#L-2214"><span class="linenos">2214</span></a>
-</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a> <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-2216"><a href="#L-2216"><span class="linenos">2216</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-2217"><a href="#L-2217"><span class="linenos">2217</span></a> <span class="p">)</span>
+</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <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-2175"><a href="#L-2175"><span class="linenos">2175</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="L-2177"><a href="#L-2177"><span class="linenos">2177</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 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a> <span class="n">columns</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-2179"><a href="#L-2179"><span class="linenos">2179</span></a> <span class="p">)</span>
+</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a>
+</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a> <span class="k">def</span> <span class="nf">_parse_create_table_index</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2182"><a href="#L-2182"><span class="linenos">2182</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-2183"><a href="#L-2183"><span class="linenos">2183</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-2184"><a href="#L-2184"><span class="linenos">2184</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-2185"><a href="#L-2185"><span class="linenos">2185</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-2186"><a href="#L-2186"><span class="linenos">2186</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2187"><a href="#L-2187"><span class="linenos">2187</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-2188"><a href="#L-2188"><span class="linenos">2188</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2190"><a href="#L-2190"><span class="linenos">2190</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-2191"><a href="#L-2191"><span class="linenos">2191</span></a> <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-2192"><a href="#L-2192"><span class="linenos">2192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="L-2195"><a href="#L-2195"><span class="linenos">2195</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="L-2198"><a href="#L-2198"><span class="linenos">2198</span></a> <span class="p">)</span>
+</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</span></a>
+</span><span id="L-2200"><a href="#L-2200"><span class="linenos">2200</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2203"><a href="#L-2203"><span class="linenos">2203</span></a>
+</span><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</span></a> <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</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><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</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-2207"><a href="#L-2207"><span class="linenos">2207</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-2208"><a href="#L-2208"><span class="linenos">2208</span></a> <span class="p">)</span>
+</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a>
+</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</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-2211"><a href="#L-2211"><span class="linenos">2211</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</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 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_id_var</span><span class="p">())</span>
+</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-2217"><a href="#L-2217"><span class="linenos">2217</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><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">_parse_table</span><span class="p">(</span>
-</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</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-2222"><a href="#L-2222"><span class="linenos">2222</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-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="n">lateral</span><span class="p">:</span>
-</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="L-2226"><a href="#L-2226"><span class="linenos">2226</span></a>
-</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</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-2228"><a href="#L-2228"><span class="linenos">2228</span></a>
-</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="L-2231"><a href="#L-2231"><span class="linenos">2231</span></a>
-</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</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-2219"><a href="#L-2219"><span class="linenos">2219</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</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-2221"><a href="#L-2221"><span class="linenos">2221</span></a>
+</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <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-2223"><a href="#L-2223"><span class="linenos">2223</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-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="p">)</span>
+</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</span></a>
+</span><span id="L-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</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-2229"><a href="#L-2229"><span class="linenos">2229</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-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="n">lateral</span><span class="p">:</span>
+</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</span></a> <span class="k">return</span> <span class="n">lateral</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="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-2235"><a href="#L-2235"><span class="linenos">2235</span></a> <span class="k">return</span> <span class="n">values</span>
-</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a>
-</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</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-2234"><a href="#L-2234"><span class="linenos">2234</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-2235"><a href="#L-2235"><span class="linenos">2235</span></a>
+</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</span></a> <span class="k">return</span> <span class="n">unnest</span>
</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</span></a>
-</span><span id="L-2239"><a href="#L-2239"><span class="linenos">2239</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="L-2240"><a href="#L-2240"><span class="linenos">2240</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-2241"><a href="#L-2241"><span class="linenos">2241</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-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="L-2239"><a href="#L-2239"><span class="linenos">2239</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-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="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="L-2243"><a href="#L-2243"><span class="linenos">2243</span></a>
-</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</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_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</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-2245"><a href="#L-2245"><span class="linenos">2245</span></a>
-</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</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-2248"><a href="#L-2248"><span class="linenos">2248</span></a>
-</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
-</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</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-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="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-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">if</span> <span class="n">alias</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="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-2256"><a href="#L-2256"><span class="linenos">2256</span></a>
-</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</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-2258"><a href="#L-2258"><span class="linenos">2258</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-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="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-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">,</span>
-</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <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_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-2264"><a href="#L-2264"><span class="linenos">2264</span></a> <span class="p">)</span>
-</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</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-2246"><a href="#L-2246"><span class="linenos">2246</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</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-2248"><a href="#L-2248"><span class="linenos">2248</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-2249"><a href="#L-2249"><span class="linenos">2249</span></a> <span class="k">return</span> <span class="n">subquery</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="n">this</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="n">schema</span><span class="p">)</span>
+</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a>
+</span><span id="L-2253"><a href="#L-2253"><span class="linenos">2253</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="L-2254"><a href="#L-2254"><span class="linenos">2254</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-2255"><a href="#L-2255"><span class="linenos">2255</span></a>
+</span><span id="L-2256"><a href="#L-2256"><span class="linenos">2256</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
+</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</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-2258"><a href="#L-2258"><span class="linenos">2258</span></a>
+</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</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-2260"><a href="#L-2260"><span class="linenos">2260</span></a>
+</span><span id="L-2261"><a href="#L-2261"><span class="linenos">2261</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</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-2263"><a href="#L-2263"><span class="linenos">2263</span></a>
+</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</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-2265"><a href="#L-2265"><span class="linenos">2265</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-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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
-</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</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-2269"><a href="#L-2269"><span class="linenos">2269</span></a>
-</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</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-2272"><a href="#L-2272"><span class="linenos">2272</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
+</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</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-2268"><a href="#L-2268"><span class="linenos">2268</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">,</span>
+</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a> <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_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-2271"><a href="#L-2271"><span class="linenos">2271</span></a> <span class="p">)</span>
+</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</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-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">return</span> <span class="n">this</span>
-</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a>
-</span><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2277"><a href="#L-2277"><span class="linenos">2277</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-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a>
-</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</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_column</span><span class="p">)</span>
-</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="n">ordinality</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-2282"><a href="#L-2282"><span class="linenos">2282</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-2283"><a href="#L-2283"><span class="linenos">2283</span></a>
-</span><span id="L-2284"><a href="#L-2284"><span class="linenos">2284</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">unnest_column_only</span><span class="p">:</span>
-</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</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-2286"><a href="#L-2286"><span class="linenos">2286</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-2287"><a href="#L-2287"><span class="linenos">2287</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-2288"><a href="#L-2288"><span class="linenos">2288</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-2289"><a href="#L-2289"><span class="linenos">2289</span></a>
-</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</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">OFFSET</span><span class="p">):</span>
-</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</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-2293"><a href="#L-2293"><span class="linenos">2293</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 class="ow">or</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="s2">&quot;offset&quot;</span><span class="p">)</span>
-</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a>
-</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a> <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-2296"><a href="#L-2296"><span class="linenos">2296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span>
-</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</span></a> <span class="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span>
-</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
-</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
-</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a> <span class="p">)</span>
-</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a>
-</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</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">Expression</span><span class="p">]:</span>
-</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</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-2305"><a href="#L-2305"><span class="linenos">2305</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-2306"><a href="#L-2306"><span class="linenos">2306</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a>
-</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</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-2274"><a href="#L-2274"><span class="linenos">2274</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
+</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</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-2276"><a href="#L-2276"><span class="linenos">2276</span></a>
+</span><span id="L-2277"><a href="#L-2277"><span class="linenos">2277</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</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-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</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">return</span> <span class="n">this</span>
+</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</span></a>
+</span><span id="L-2283"><a href="#L-2283"><span class="linenos">2283</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2284"><a href="#L-2284"><span class="linenos">2284</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-2285"><a href="#L-2285"><span class="linenos">2285</span></a> <span class="k">return</span> <span class="kc">None</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="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_type</span><span class="p">)</span>
+</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="n">ordinality</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-2289"><a href="#L-2289"><span class="linenos">2289</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-2290"><a href="#L-2290"><span class="linenos">2290</span></a>
+</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</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">unnest_column_only</span><span class="p">:</span>
+</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</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-2293"><a href="#L-2293"><span class="linenos">2293</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-2294"><a href="#L-2294"><span class="linenos">2294</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-2295"><a href="#L-2295"><span class="linenos">2295</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-2296"><a href="#L-2296"><span class="linenos">2296</span></a>
+</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</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">OFFSET</span><span class="p">):</span>
+</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</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-2300"><a href="#L-2300"><span class="linenos">2300</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 class="ow">or</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="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a>
+</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a> <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-2303"><a href="#L-2303"><span class="linenos">2303</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span>
+</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a> <span class="n">expressions</span><span class="o">=</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="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span>
+</span><span id="L-2306"><a href="#L-2306"><span class="linenos">2306</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
+</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a> <span class="p">)</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">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</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-2312"><a href="#L-2312"><span class="linenos">2312</span></a>
-</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</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">Expression</span><span class="p">]:</span>
+</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</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-2312"><a href="#L-2312"><span class="linenos">2312</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-2313"><a href="#L-2313"><span class="linenos">2313</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a>
-</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</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">Expression</span><span class="p">]:</span>
-</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</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-2317"><a href="#L-2317"><span class="linenos">2317</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-2318"><a href="#L-2318"><span class="linenos">2318</span></a> <span class="p">):</span>
-</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a>
-</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2322"><a href="#L-2322"><span class="linenos">2322</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2327"><a href="#L-2327"><span class="linenos">2327</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</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="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span> <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">TABLE_SAMPLE</span> <span class="k">else</span> <span class="s2">&quot;USING SAMPLE&quot;</span>
-</span><span id="L-2330"><a href="#L-2330"><span class="linenos">2330</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><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="bp">self</span><span 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-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="n">num</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-2315"><a href="#L-2315"><span class="linenos">2315</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-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">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</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-2319"><a href="#L-2319"><span class="linenos">2319</span></a>
+</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</span></a>
+</span><span id="L-2322"><a href="#L-2322"><span class="linenos">2322</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">Expression</span><span class="p">]:</span>
+</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</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-2324"><a href="#L-2324"><span class="linenos">2324</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-2325"><a href="#L-2325"><span class="linenos">2325</span></a> <span class="p">):</span>
+</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2327"><a href="#L-2327"><span class="linenos">2327</span></a>
+</span><span id="L-2328"><a href="#L-2328"><span class="linenos">2328</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2329"><a href="#L-2329"><span class="linenos">2329</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2330"><a href="#L-2330"><span class="linenos">2330</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2331"><a href="#L-2331"><span class="linenos">2331</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2333"><a href="#L-2333"><span class="linenos">2333</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">):</span>
-</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</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-2338"><a href="#L-2338"><span class="linenos">2338</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">OUT_OF</span><span class="p">)</span>
-</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</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-2340"><a href="#L-2340"><span class="linenos">2340</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-2341"><a href="#L-2341"><span class="linenos">2341</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-2342"><a href="#L-2342"><span class="linenos">2342</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-2343"><a href="#L-2343"><span class="linenos">2343</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</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><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</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="bp">self</span><span 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-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">if</span> <span class="bp">self</span><span 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-2352"><a href="#L-2352"><span class="linenos">2352</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><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</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-2354"><a href="#L-2354"><span class="linenos">2354</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-2355"><a href="#L-2355"><span class="linenos">2355</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-2356"><a href="#L-2356"><span class="linenos">2356</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-2336"><a href="#L-2336"><span class="linenos">2336</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</span></a> <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">_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">TABLE_SAMPLE</span> <span class="k">else</span> <span class="s2">&quot;USING SAMPLE&quot;</span>
+</span><span id="L-2338"><a href="#L-2338"><span class="linenos">2338</span></a> <span class="p">)</span>
+</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</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><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="bp">self</span><span 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-2342"><a href="#L-2342"><span class="linenos">2342</span></a>
+</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</span></a> <span class="n">num</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-2344"><a href="#L-2344"><span class="linenos">2344</span></a>
+</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">):</span>
+</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</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-2347"><a href="#L-2347"><span class="linenos">2347</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">OUT_OF</span><span class="p">)</span>
+</span><span id="L-2348"><a href="#L-2348"><span class="linenos">2348</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-2349"><a href="#L-2349"><span class="linenos">2349</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-2350"><a href="#L-2350"><span class="linenos">2350</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-2351"><a href="#L-2351"><span class="linenos">2351</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-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</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><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a>
-</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">expression</span><span class="p">(</span>
-</span><span id="L-2359"><a href="#L-2359"><span class="linenos">2359</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="L-2360"><a href="#L-2360"><span class="linenos">2360</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="L-2361"><a href="#L-2361"><span class="linenos">2361</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-2362"><a href="#L-2362"><span class="linenos">2362</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-2363"><a href="#L-2363"><span class="linenos">2363</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-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a> <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">_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">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-2372"><a href="#L-2372"><span class="linenos">2372</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><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a>
-</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</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">Expression</span><span class="p">]:</span>
-</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</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-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">if</span> <span class="bp">self</span><span 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-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</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-2380"><a href="#L-2380"><span class="linenos">2380</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</span></a> <span class="k">else</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="kc">None</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="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2385"><a href="#L-2385"><span class="linenos">2385</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</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="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-2388"><a href="#L-2388"><span class="linenos">2388</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-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="k">return</span> <span class="kc">None</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">if</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="L-2392"><a href="#L-2392"><span class="linenos">2392</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-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</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-2358"><a href="#L-2358"><span class="linenos">2358</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-2359"><a href="#L-2359"><span class="linenos">2359</span></a>
+</span><span id="L-2360"><a href="#L-2360"><span class="linenos">2360</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2361"><a href="#L-2361"><span class="linenos">2361</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><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</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-2363"><a href="#L-2363"><span class="linenos">2363</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-2364"><a href="#L-2364"><span class="linenos">2364</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-2365"><a href="#L-2365"><span class="linenos">2365</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-2366"><a href="#L-2366"><span class="linenos">2366</span></a>
+</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">expression</span><span class="p">(</span>
+</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</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-2371"><a href="#L-2371"><span class="linenos">2371</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-2372"><a href="#L-2372"><span class="linenos">2372</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-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="L-2377"><a href="#L-2377"><span class="linenos">2377</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <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="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">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-2381"><a href="#L-2381"><span class="linenos">2381</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><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a>
+</span><span id="L-2383"><a href="#L-2383"><span class="linenos">2383</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">Expression</span><span class="p">]:</span>
+</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</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-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">if</span> <span class="bp">self</span><span 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-2387"><a href="#L-2387"><span class="linenos">2387</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2388"><a href="#L-2388"><span class="linenos">2388</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-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</span></a> <span class="k">return</span> <span class="kc">None</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="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a>
-</span><span id="L-2396"><a href="#L-2396"><span class="linenos">2396</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-2397"><a href="#L-2397"><span class="linenos">2397</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-2398"><a href="#L-2398"><span class="linenos">2398</span></a>
-</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</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-2400"><a href="#L-2400"><span class="linenos">2400</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-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="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-2403"><a href="#L-2403"><span class="linenos">2403</span></a>
-</span><span id="L-2404"><a href="#L-2404"><span class="linenos">2404</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-2405"><a href="#L-2405"><span class="linenos">2405</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-2406"><a href="#L-2406"><span class="linenos">2406</span></a>
-</span><span id="L-2407"><a href="#L-2407"><span class="linenos">2407</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</span></a>
-</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</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-2396"><a href="#L-2396"><span class="linenos">2396</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-2397"><a href="#L-2397"><span class="linenos">2397</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-2398"><a href="#L-2398"><span class="linenos">2398</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a>
+</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="L-2401"><a href="#L-2401"><span class="linenos">2401</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-2402"><a href="#L-2402"><span class="linenos">2402</span></a> <span class="k">else</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">_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-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">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</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-2407"><a href="#L-2407"><span class="linenos">2407</span></a>
+</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</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-2409"><a href="#L-2409"><span class="linenos">2409</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-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="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 class="n">exp</span><span class="o">.</span><span class="n">Pivot</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">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">)</span>
+</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</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-2412"><a href="#L-2412"><span class="linenos">2412</span></a>
-</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</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-2414"><a href="#L-2414"><span class="linenos">2414</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-2413"><a href="#L-2413"><span class="linenos">2413</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-2414"><a href="#L-2414"><span class="linenos">2414</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-2415"><a href="#L-2415"><span class="linenos">2415</span></a>
-</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</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-2417"><a href="#L-2417"><span class="linenos">2417</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-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="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-2420"><a href="#L-2420"><span class="linenos">2420</span></a> <span class="k">for</span> <span class="n">col</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-2421"><a href="#L-2421"><span class="linenos">2421</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-2422"><a href="#L-2422"><span class="linenos">2422</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-2423"><a href="#L-2423"><span class="linenos">2423</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2425"><a href="#L-2425"><span class="linenos">2425</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="L-2426"><a href="#L-2426"><span class="linenos">2426</span></a>
-</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</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 class="n">quoted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTED_PIVOT_COLUMNS</span><span class="p">))</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="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-2430"><a href="#L-2430"><span class="linenos">2430</span></a>
-</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</span></a> <span class="k">return</span> <span class="n">pivot</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">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">pivot_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">-&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-2434"><a href="#L-2434"><span class="linenos">2434</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">pivot_columns</span><span class="p">]</span>
+</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">value</span><span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2419"><a href="#L-2419"><span class="linenos">2419</span></a>
+</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</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 class="n">exp</span><span class="o">.</span><span class="n">Pivot</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">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">)</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">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-2423"><a href="#L-2423"><span class="linenos">2423</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-2424"><a href="#L-2424"><span class="linenos">2424</span></a>
+</span><span id="L-2425"><a href="#L-2425"><span class="linenos">2425</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-2426"><a href="#L-2426"><span class="linenos">2426</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-2427"><a href="#L-2427"><span class="linenos">2427</span></a>
+</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</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-2429"><a href="#L-2429"><span class="linenos">2429</span></a> <span class="k">for</span> <span class="n">col</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-2430"><a href="#L-2430"><span class="linenos">2430</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-2431"><a href="#L-2431"><span class="linenos">2431</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-2432"><a href="#L-2432"><span class="linenos">2432</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a>
-</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</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">Expression</span><span class="p">]:</span>
-</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</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-2438"><a href="#L-2438"><span class="linenos">2438</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</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 class="n">quoted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTED_PIVOT_COLUMNS</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="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-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="bp">self</span><span class="o">.</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 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-2442"><a href="#L-2442"><span class="linenos">2442</span></a> <span class="p">)</span>
-</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a>
-</span><span id="L-2444"><a href="#L-2444"><span class="linenos">2444</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">Expression</span><span class="p">]:</span>
-</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</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-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a>
-</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</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-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">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</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-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</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-2454"><a href="#L-2454"><span class="linenos">2454</span></a>
-</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</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-2456"><a href="#L-2456"><span class="linenos">2456</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</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-2440"><a href="#L-2440"><span class="linenos">2440</span></a> <span class="k">return</span> <span class="n">pivot</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">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">pivot_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">-&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-2443"><a href="#L-2443"><span class="linenos">2443</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">pivot_columns</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">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">Expression</span><span class="p">]:</span>
+</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</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-2447"><a href="#L-2447"><span class="linenos">2447</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a>
+</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a> <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-2450"><a href="#L-2450"><span class="linenos">2450</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-2451"><a href="#L-2451"><span class="linenos">2451</span></a> <span class="p">)</span>
+</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a>
+</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</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">Expression</span><span class="p">]:</span>
+</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</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-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="k">return</span> <span class="kc">None</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="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-2458"><a href="#L-2458"><span class="linenos">2458</span></a>
-</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2461"><a href="#L-2461"><span class="linenos">2461</span></a>
-</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</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-2463"><a href="#L-2463"><span class="linenos">2463</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2464"><a href="#L-2464"><span class="linenos">2464</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-2465"><a href="#L-2465"><span class="linenos">2465</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-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="k">if</span> <span class="bp">self</span><span 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-2468"><a href="#L-2468"><span class="linenos">2468</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-2469"><a href="#L-2469"><span class="linenos">2469</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-2459"><a href="#L-2459"><span class="linenos">2459</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</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-2461"><a href="#L-2461"><span class="linenos">2461</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</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-2463"><a href="#L-2463"><span class="linenos">2463</span></a>
+</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</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-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</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-2467"><a href="#L-2467"><span class="linenos">2467</span></a>
+</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">expressions</span> <span class="ow">or</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="p">):</span>
-</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span 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-2471"><a href="#L-2471"><span class="linenos">2471</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-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2473"><a href="#L-2473"><span class="linenos">2473</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-2474"><a href="#L-2474"><span class="linenos">2474</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-2475"><a href="#L-2475"><span class="linenos">2475</span></a>
-</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2477"><a href="#L-2477"><span class="linenos">2477</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-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2476"><a href="#L-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">CUBE</span><span class="p">):</span>
+</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</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-2478"><a href="#L-2478"><span class="linenos">2478</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-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">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-2481"><a href="#L-2481"><span class="linenos">2481</span></a>
-</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</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-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2484"><a href="#L-2484"><span class="linenos">2484</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-2485"><a href="#L-2485"><span class="linenos">2485</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-2486"><a href="#L-2486"><span class="linenos">2486</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2487"><a href="#L-2487"><span class="linenos">2487</span></a>
-</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</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-2489"><a href="#L-2489"><span class="linenos">2489</span></a>
-</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</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">Expression</span><span class="p">]:</span>
-</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</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-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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">Expression</span><span class="p">]:</span>
-</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</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-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2499"><a href="#L-2499"><span class="linenos">2499</span></a>
-</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</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-2502"><a href="#L-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">Expression</span><span class="p">]:</span>
-</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</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-2504"><a href="#L-2504"><span class="linenos">2504</span></a> <span class="k">return</span> <span class="n">this</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="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-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span 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_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-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <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">def</span> <span class="nf">_parse_sort</span><span class="p">(</span>
-</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <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">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">exp</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="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2513"><a href="#L-2513"><span class="linenos">2513</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_type</span><span class="p">):</span>
-</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="k">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-2516"><a href="#L-2516"><span class="linenos">2516</span></a>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</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="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-2518"><a href="#L-2518"><span class="linenos">2518</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-2519"><a href="#L-2519"><span class="linenos">2519</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">ASC</span><span class="p">)</span>
-</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="n">is_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><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">)</span>
-</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">)</span>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="n">is_desc</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</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-2525"><a href="#L-2525"><span class="linenos">2525</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-2526"><a href="#L-2526"><span class="linenos">2526</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-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="bp">self</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-2531"><a href="#L-2531"><span class="linenos">2531</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">null_ordering</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</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 class="ow">and</span> <span class="bp">self</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-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="p">):</span>
-</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a>
-</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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><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">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
-</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</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-2541"><a href="#L-2541"><span class="linenos">2541</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-2542"><a href="#L-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</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-2543"><a href="#L-2543"><span class="linenos">2543</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-2544"><a href="#L-2544"><span class="linenos">2544</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-2545"><a href="#L-2545"><span class="linenos">2545</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="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="p">)</span>
+</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="p">(</span><span class="n">expressions</span> <span class="ow">or</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="p">):</span>
+</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="k">break</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">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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-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</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-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="k">return</span> <span class="kc">None</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">_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-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">_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-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2493"><a href="#L-2493"><span class="linenos">2493</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-2494"><a href="#L-2494"><span class="linenos">2494</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-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 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-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="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-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_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">Expression</span><span class="p">]:</span>
+</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</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-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2502"><a href="#L-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 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-2503"><a href="#L-2503"><span class="linenos">2503</span></a>
+</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</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">Expression</span><span class="p">]:</span>
+</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</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-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_order</span><span class="p">(</span>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</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-2511"><a href="#L-2511"><span class="linenos">2511</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-2512"><a href="#L-2512"><span class="linenos">2512</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-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="k">return</span> <span class="n">this</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="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-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span 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_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-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="p">)</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">def</span> <span class="nf">_parse_sort</span><span class="p">(</span>
+</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <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">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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</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-2522"><a href="#L-2522"><span class="linenos">2522</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_type</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="kc">None</span>
+</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="k">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-2525"><a href="#L-2525"><span class="linenos">2525</span></a>
+</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</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="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-2527"><a href="#L-2527"><span class="linenos">2527</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-2528"><a href="#L-2528"><span class="linenos">2528</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">ASC</span><span class="p">)</span>
+</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="n">is_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><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">)</span>
+</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">)</span>
+</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="n">is_desc</span> <span class="ow">or</span> <span class="kc">False</span>
+</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</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-2534"><a href="#L-2534"><span class="linenos">2534</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-2535"><a href="#L-2535"><span class="linenos">2535</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-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="bp">self</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-2540"><a href="#L-2540"><span class="linenos">2540</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">null_ordering</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="p">)</span>
+</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="ow">and</span> <span class="bp">self</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-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="p">):</span>
+</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a>
+</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a>
-</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</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-2550"><a href="#L-2550"><span class="linenos">2550</span></a>
-</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="k">return</span> <span class="n">limit_exp</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="bp">self</span><span 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-2554"><a href="#L-2554"><span class="linenos">2554</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-2555"><a href="#L-2555"><span class="linenos">2555</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="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
+</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</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-2550"><a href="#L-2550"><span class="linenos">2550</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-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2552"><a href="#L-2552"><span class="linenos">2552</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-2553"><a href="#L-2553"><span class="linenos">2553</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-2554"><a href="#L-2554"><span class="linenos">2554</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="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a> <span class="p">)</span>
</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a>
-</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="n">count</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-2558"><a href="#L-2558"><span class="linenos">2558</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-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</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-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="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-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="k">return</span> <span class="n">limit_exp</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">only</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">ONLY</span><span class="p">)</span>
-</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</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-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">only</span> <span class="ow">and</span> <span class="n">with_ties</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;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</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="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-2569"><a href="#L-2569"><span class="linenos">2569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</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-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="p">)</span>
-</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a>
-</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="k">return</span> <span class="n">this</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="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-2579"><a href="#L-2579"><span class="linenos">2579</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">OFFSET</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-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="k">return</span> <span class="n">this</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="n">count</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-2583"><a href="#L-2583"><span class="linenos">2583</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-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_lock</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2587"><a href="#L-2587"><span class="linenos">2587</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-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">True</span><span class="p">)</span>
-</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</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;SHARE&quot;</span><span class="p">):</span>
-</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">False</span><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">return</span> <span class="kc">None</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">_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-2595"><a href="#L-2595"><span class="linenos">2595</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">SET_OPERATIONS</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="n">this</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="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-2599"><a href="#L-2599"><span class="linenos">2599</span></a>
-</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</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-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
-</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</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-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
-</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
+</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2563"><a href="#L-2563"><span class="linenos">2563</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-2564"><a href="#L-2564"><span class="linenos">2564</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="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
+</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a>
+</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="n">count</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-2567"><a href="#L-2567"><span class="linenos">2567</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-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="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-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="n">only</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">ONLY</span><span class="p">)</span>
+</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</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-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">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-2575"><a href="#L-2575"><span class="linenos">2575</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-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="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-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</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-2583"><a href="#L-2583"><span class="linenos">2583</span></a> <span class="p">)</span>
+</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a>
+</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a> <span class="k">return</span> <span class="n">this</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">_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-2588"><a href="#L-2588"><span class="linenos">2588</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">OFFSET</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-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="k">return</span> <span class="n">this</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="n">count</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-2592"><a href="#L-2592"><span class="linenos">2592</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-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_parse_lock</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2596"><a href="#L-2596"><span class="linenos">2596</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-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">True</span><span class="p">)</span>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</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;SHARE&quot;</span><span class="p">):</span>
+</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">False</span><span class="p">)</span>
+</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a>
+</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="k">return</span> <span class="kc">None</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">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-2604"><a href="#L-2604"><span class="linenos">2604</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">SET_OPERATIONS</span><span class="p">):</span>
+</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="k">return</span> <span class="n">this</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">return</span> <span class="bp">self</span><span class="o">.</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="n">expression</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="n">this</span><span class="p">,</span>
-</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</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-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="n">expression</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="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-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <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">_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-2615"><a href="#L-2615"><span class="linenos">2615</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-2616"><a href="#L-2616"><span class="linenos">2616</span></a>
-</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</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-2618"><a href="#L-2618"><span class="linenos">2618</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-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">_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-2621"><a href="#L-2621"><span class="linenos">2621</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-2607"><a href="#L-2607"><span class="linenos">2607</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-2608"><a href="#L-2608"><span class="linenos">2608</span></a>
+</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</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-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
+</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</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-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
+</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="L-2618"><a href="#L-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="L-2619"><a href="#L-2619"><span class="linenos">2619</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-2620"><a href="#L-2620"><span class="linenos">2620</span></a> <span class="n">expression</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="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-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="p">)</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">_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-2624"><a href="#L-2624"><span class="linenos">2624</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-2623"><a href="#L-2623"><span class="linenos">2623</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-2624"><a href="#L-2624"><span class="linenos">2624</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-2625"><a href="#L-2625"><span class="linenos">2625</span></a>
-</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2627"><a href="#L-2627"><span class="linenos">2627</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-2628"><a href="#L-2628"><span class="linenos">2628</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-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">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-2631"><a href="#L-2631"><span class="linenos">2631</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-2632"><a href="#L-2632"><span class="linenos">2632</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-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</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-2627"><a href="#L-2627"><span class="linenos">2627</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-2628"><a href="#L-2628"><span class="linenos">2628</span></a>
+</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</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-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">_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-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">_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-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">_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-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="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</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-2637"><a href="#L-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">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-2635"><a href="#L-2635"><span class="linenos">2635</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-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">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</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-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="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2642"><a href="#L-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">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-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">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-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">if</span> <span class="n">negate</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">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-2639"><a href="#L-2639"><span class="linenos">2639</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-2640"><a href="#L-2640"><span class="linenos">2640</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-2641"><a href="#L-2641"><span class="linenos">2641</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-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a>
+</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</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-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">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-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">if</span> <span class="bp">self</span><span 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-2649"><a href="#L-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">_parse_is</span><span class="p">(</span><span class="n">this</span><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">return</span> <span class="n">this</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">_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-2654"><a href="#L-2654"><span class="linenos">2654</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-2655"><a href="#L-2655"><span class="linenos">2655</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-2656"><a href="#L-2656"><span class="linenos">2656</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_FROM</span><span class="p">):</span>
-</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</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-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">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_expression</span><span class="p">())</span>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2651"><a href="#L-2651"><span class="linenos">2651</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-2652"><a href="#L-2652"><span class="linenos">2652</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-2653"><a href="#L-2653"><span class="linenos">2653</span></a>
+</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
+</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</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-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">if</span> <span class="bp">self</span><span 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-2658"><a href="#L-2658"><span class="linenos">2658</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-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="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-2661"><a href="#L-2661"><span class="linenos">2661</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-2662"><a href="#L-2662"><span class="linenos">2662</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-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a>
-</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</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-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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="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-2669"><a href="#L-2669"><span class="linenos">2669</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-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</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-2672"><a href="#L-2672"><span class="linenos">2672</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">L_PAREN</span><span class="p">):</span>
-</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</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_select_or_expression</span><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="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-2676"><a href="#L-2676"><span class="linenos">2676</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-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</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-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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</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-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="k">return</span> <span class="n">this</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">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-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 class="o">-</span> <span class="mi">1</span>
+</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</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-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_FROM</span><span class="p">):</span>
+</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</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-2667"><a href="#L-2667"><span class="linenos">2667</span></a> <span class="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_expression</span><span class="p">())</span>
+</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a>
+</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</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-2670"><a href="#L-2670"><span class="linenos">2670</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-2671"><a href="#L-2671"><span class="linenos">2671</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-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-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">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-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">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-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">_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="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-2678"><a href="#L-2678"><span class="linenos">2678</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-2679"><a href="#L-2679"><span class="linenos">2679</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</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-2681"><a href="#L-2681"><span class="linenos">2681</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">L_PAREN</span><span class="p">):</span>
+</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</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_select_or_expression</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">return</span> <span class="n">this</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">_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">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-2687"><a href="#L-2687"><span class="linenos">2687</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-2688"><a href="#L-2688"><span class="linenos">2688</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-2689"><a href="#L-2689"><span class="linenos">2689</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-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2691"><a href="#L-2691"><span class="linenos">2691</span></a>
-</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</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-2693"><a href="#L-2693"><span class="linenos">2693</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-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2696"><a href="#L-2696"><span class="linenos">2696</span></a>
-</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2698"><a href="#L-2698"><span class="linenos">2698</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><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</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-2685"><a href="#L-2685"><span class="linenos">2685</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-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</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-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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</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-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">return</span> <span class="n">this</span>
+</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a>
+</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</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">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-2696"><a href="#L-2696"><span class="linenos">2696</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-2697"><a href="#L-2697"><span class="linenos">2697</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-2698"><a href="#L-2698"><span class="linenos">2698</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-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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 class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
-</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a>
-</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</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-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="k">if</span> <span class="n">this</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><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</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-2701"><a href="#L-2701"><span class="linenos">2701</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-2702"><a href="#L-2702"><span class="linenos">2702</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-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="k">return</span> <span class="n">this</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">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-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_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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="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><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="k">return</span> <span class="kc">None</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="c1"># Try to not clutter Snowflake&#39;s multi-part intervals like INTERVAL &#39;1 day, 1 year&#39;</span>
-</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</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-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</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="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">seq_get</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-2714"><a href="#L-2714"><span class="linenos">2714</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">seq_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</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">return</span> <span class="bp">self</span><span 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-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">_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-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">_parse_term</span><span class="p">()</span>
-</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a>
-</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</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-2723"><a href="#L-2723"><span class="linenos">2723</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-2724"><a href="#L-2724"><span class="linenos">2724</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-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</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-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="p">)</span>
-</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</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-2729"><a href="#L-2729"><span class="linenos">2729</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-2730"><a href="#L-2730"><span class="linenos">2730</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-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="p">)</span>
-</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</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-2733"><a href="#L-2733"><span class="linenos">2733</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-2734"><a href="#L-2734"><span class="linenos">2734</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-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="p">)</span>
-</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="k">break</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="k">return</span> <span class="n">this</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">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-2742"><a href="#L-2742"><span class="linenos">2742</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-2743"><a href="#L-2743"><span class="linenos">2743</span></a>
-</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</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-2745"><a href="#L-2745"><span class="linenos">2745</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">FACTOR</span><span class="p">)</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">_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-2748"><a href="#L-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_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-2749"><a href="#L-2749"><span class="linenos">2749</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-2750"><a href="#L-2750"><span class="linenos">2750</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-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="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="n">interval</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><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="k">if</span> <span class="n">interval</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="n">interval</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="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-2758"><a href="#L-2758"><span class="linenos">2758</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><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</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-2710"><a href="#L-2710"><span class="linenos">2710</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 class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a>
+</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</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-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="k">if</span> <span class="n">this</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><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</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-2718"><a href="#L-2718"><span class="linenos">2718</span></a>
+</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="c1"># Try to not clutter Snowflake&#39;s multi-part intervals like INTERVAL &#39;1 day, 1 year&#39;</span>
+</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</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-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</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">seq_get</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-2723"><a href="#L-2723"><span class="linenos">2723</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">seq_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</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">return</span> <span class="bp">self</span><span 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-2726"><a href="#L-2726"><span class="linenos">2726</span></a>
+</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</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-2728"><a href="#L-2728"><span class="linenos">2728</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-2729"><a href="#L-2729"><span class="linenos">2729</span></a>
+</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</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-2732"><a href="#L-2732"><span class="linenos">2732</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-2733"><a href="#L-2733"><span class="linenos">2733</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-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</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-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="p">)</span>
+</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</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-2738"><a href="#L-2738"><span class="linenos">2738</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-2739"><a href="#L-2739"><span class="linenos">2739</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-2740"><a href="#L-2740"><span class="linenos">2740</span></a> <span class="p">)</span>
+</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</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-2742"><a href="#L-2742"><span class="linenos">2742</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-2743"><a href="#L-2743"><span class="linenos">2743</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-2744"><a href="#L-2744"><span class="linenos">2744</span></a> <span class="p">)</span>
+</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a> <span class="k">break</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="n">this</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">_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-2751"><a href="#L-2751"><span class="linenos">2751</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-2752"><a href="#L-2752"><span class="linenos">2752</span></a>
+</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</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-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">_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">FACTOR</span><span class="p">)</span>
+</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a>
+</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</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-2757"><a href="#L-2757"><span class="linenos">2757</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-2758"><a href="#L-2758"><span class="linenos">2758</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-2759"><a href="#L-2759"><span class="linenos">2759</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-2760"><a href="#L-2760"><span class="linenos">2760</span></a>
-</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</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-2763"><a href="#L-2763"><span class="linenos">2763</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-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</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-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2767"><a href="#L-2767"><span class="linenos">2767</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">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-2768"><a href="#L-2768"><span class="linenos">2768</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-2769"><a href="#L-2769"><span class="linenos">2769</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-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="k">return</span> <span class="n">data_type</span>
-</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a>
-</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="k">return</span> <span class="n">this</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">def</span> <span class="nf">_parse_types</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2775"><a href="#L-2775"><span class="linenos">2775</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-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="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-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">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-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a>
-</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</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-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">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-2785"><a href="#L-2785"><span class="linenos">2785</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="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="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-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span>
-</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a>
-</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</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_kwargs</span><span class="p">)</span>
-</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</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_types</span><span class="p">)</span>
-</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</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-2799"><a href="#L-2799"><span class="linenos">2799</span></a>
-</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</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-2801"><a href="#L-2801"><span class="linenos">2801</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-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a>
-</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</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">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-2808"><a href="#L-2808"><span class="linenos">2808</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-2809"><a href="#L-2809"><span class="linenos">2809</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><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</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 class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)],</span>
-</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="n">nested</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 class="p">)</span>
-</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a>
-</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</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-2815"><a href="#L-2815"><span class="linenos">2815</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-2816"><a href="#L-2816"><span class="linenos">2816</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><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <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-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="p">)</span>
-</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a>
-</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="k">return</span> <span class="n">this</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">if</span> <span class="bp">self</span><span 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_BRACKET</span><span class="p">):</span>
-</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</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-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="k">return</span> <span class="kc">None</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="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">t</span><span class="o">.</span><span class="n">Optional</span><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-2828"><a href="#L-2828"><span class="linenos">2828</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-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</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_kwargs</span><span class="p">)</span>
-</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</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_types</span><span class="p">)</span>
-</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a>
-</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</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-2835"><a href="#L-2835"><span class="linenos">2835</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-2836"><a href="#L-2836"><span class="linenos">2836</span></a>
-</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</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-2838"><a href="#L-2838"><span class="linenos">2838</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-2839"><a href="#L-2839"><span class="linenos">2839</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-2840"><a href="#L-2840"><span class="linenos">2840</span></a>
-</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="n">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="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</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-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span>
-</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a> <span class="n">value</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">TIMESTAMPTZ</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-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</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">WITH_LOCAL_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span>
-</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="p">):</span>
-</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="n">value</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-2849"><a href="#L-2849"><span class="linenos">2849</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">WITHOUT_TIME_ZONE</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">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">:</span>
-</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="n">value</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">TIME</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-2852"><a href="#L-2852"><span class="linenos">2852</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">value</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">TIMESTAMP</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-2854"><a href="#L-2854"><span class="linenos">2854</span></a>
-</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</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">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a> <span class="n">value</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">TIMESTAMP</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-2859"><a href="#L-2859"><span class="linenos">2859</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-2860"><a href="#L-2860"><span class="linenos">2860</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-2861"><a href="#L-2861"><span class="linenos">2861</span></a>
-</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="n">value</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="n">exp</span><span 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-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="n">value</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-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">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-2868"><a href="#L-2868"><span class="linenos">2868</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-2869"><a href="#L-2869"><span class="linenos">2869</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-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="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</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-2873"><a href="#L-2873"><span class="linenos">2873</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="n">interval</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><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="k">return</span> <span class="n">interval</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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</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><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</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-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="k">if</span> <span class="n">data_type</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="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-2772"><a href="#L-2772"><span class="linenos">2772</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-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</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-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2776"><a href="#L-2776"><span class="linenos">2776</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">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-2777"><a href="#L-2777"><span class="linenos">2777</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-2778"><a href="#L-2778"><span class="linenos">2778</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-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="k">return</span> <span class="n">data_type</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">return</span> <span class="n">this</span>
+</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a>
+</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2784"><a href="#L-2784"><span class="linenos">2784</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-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="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-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">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-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a>
+</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</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-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">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-2794"><a href="#L-2794"><span class="linenos">2794</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="p">)</span>
+</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a>
+</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</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-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span>
+</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="n">expressions</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">maybe_func</span> <span class="o">=</span> <span class="kc">False</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">if</span> <span class="bp">self</span><span 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-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</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_kwargs</span><span class="p">)</span>
+</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</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_types</span><span class="p">)</span>
+</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</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-2808"><a href="#L-2808"><span class="linenos">2808</span></a>
+</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</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-2810"><a href="#L-2810"><span class="linenos">2810</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-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="k">return</span> <span class="kc">None</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">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a>
+</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</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">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-2816"><a href="#L-2816"><span class="linenos">2816</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-2817"><a href="#L-2817"><span class="linenos">2817</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><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</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 class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)],</span>
+</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="p">)</span>
+</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a>
+</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</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-2823"><a href="#L-2823"><span class="linenos">2823</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-2824"><a href="#L-2824"><span class="linenos">2824</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><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <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-2826"><a href="#L-2826"><span class="linenos">2826</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <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="n">this</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">if</span> <span class="bp">self</span><span 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_BRACKET</span><span class="p">):</span>
+</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</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-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="k">return</span> <span class="kc">None</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="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">t</span><span class="o">.</span><span class="n">Optional</span><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-2836"><a href="#L-2836"><span class="linenos">2836</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-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</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_kwargs</span><span class="p">)</span>
+</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</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_types</span><span class="p">)</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">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-2843"><a href="#L-2843"><span class="linenos">2843</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-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="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-2846"><a href="#L-2846"><span class="linenos">2846</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-2847"><a href="#L-2847"><span class="linenos">2847</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-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">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="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</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-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span>
+</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a> <span class="n">value</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">TIMESTAMPTZ</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-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</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">WITH_LOCAL_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span>
+</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="p">):</span>
+</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="n">value</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-2857"><a href="#L-2857"><span class="linenos">2857</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">WITHOUT_TIME_ZONE</span><span class="p">):</span>
+</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</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">TIME</span><span class="p">:</span>
+</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="n">value</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">TIME</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-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="n">value</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">TIMESTAMP</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-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="n">maybe_func</span> <span class="o">=</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span>
+</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a>
+</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="n">value</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">TIMESTAMP</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-2867"><a href="#L-2867"><span class="linenos">2867</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-2868"><a href="#L-2868"><span class="linenos">2868</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-2869"><a href="#L-2869"><span class="linenos">2869</span></a>
+</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <span class="n">value</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="n">exp</span><span 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-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a> <span class="n">value</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-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="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-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="n">value</span><span class="p">:</span>
-</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="k">return</span> <span class="n">value</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="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</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="o">.</span><span class="n">upper</span><span class="p">()],</span>
-</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <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">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</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-2877"><a href="#L-2877"><span class="linenos">2877</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-2878"><a href="#L-2878"><span class="linenos">2878</span></a>
+</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">peek</span><span class="p">:</span>
+</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</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-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="k">return</span> <span class="kc">None</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="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-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="n">value</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="n">value</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">def</span> <span class="nf">_parse_struct_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2889"><a href="#L-2889"><span class="linenos">2889</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-2890"><a href="#L-2890"><span class="linenos">2890</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-2891"><a href="#L-2891"><span class="linenos">2891</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-2892"><a href="#L-2892"><span class="linenos">2892</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><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="n">data_type</span><span class="p">:</span>
-</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</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-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">_parse_types</span><span class="p">()</span>
-</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span 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">data_type</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">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-2900"><a href="#L-2900"><span class="linenos">2900</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">AT_TIME_ZONE</span><span class="p">):</span>
-</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_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-2905"><a href="#L-2905"><span class="linenos">2905</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-2906"><a href="#L-2906"><span class="linenos">2906</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-2907"><a href="#L-2907"><span class="linenos">2907</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-2908"><a href="#L-2908"><span class="linenos">2908</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-2909"><a href="#L-2909"><span class="linenos">2909</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-2910"><a href="#L-2910"><span class="linenos">2910</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-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</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">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="o">.</span><span class="n">upper</span><span class="p">()],</span>
+</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <span class="p">)</span>
+</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a>
+</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="k">def</span> <span class="nf">_parse_struct_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2897"><a href="#L-2897"><span class="linenos">2897</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-2898"><a href="#L-2898"><span class="linenos">2898</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-2899"><a href="#L-2899"><span class="linenos">2899</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-2900"><a href="#L-2900"><span class="linenos">2900</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><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a>
+</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</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-2904"><a href="#L-2904"><span class="linenos">2904</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-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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span 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">data_type</span><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">_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-2908"><a href="#L-2908"><span class="linenos">2908</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">AT_TIME_ZONE</span><span class="p">):</span>
+</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 class="k">return</span> <span class="bp">self</span><span 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-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">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-2913"><a href="#L-2913"><span class="linenos">2913</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-2914"><a href="#L-2914"><span class="linenos">2914</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-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">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-2917"><a href="#L-2917"><span class="linenos">2917</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-2918"><a href="#L-2918"><span class="linenos">2918</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-2919"><a href="#L-2919"><span class="linenos">2919</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-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="k">elif</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</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-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="n">field</span> <span class="o">=</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">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-2925"><a href="#L-2925"><span class="linenos">2925</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-2926"><a href="#L-2926"><span class="linenos">2926</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-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <span class="p">)</span>
-</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="n">field</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 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="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-2930"><a href="#L-2930"><span class="linenos">2930</span></a>
-</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</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-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</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-2936"><a href="#L-2936"><span class="linenos">2936</span></a>
-</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</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-2939"><a href="#L-2939"><span class="linenos">2939</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-2940"><a href="#L-2940"><span class="linenos">2940</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-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</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-2944"><a href="#L-2944"><span class="linenos">2944</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-2945"><a href="#L-2945"><span class="linenos">2945</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-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">else</span><span class="p">:</span>
-</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</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-2949"><a href="#L-2949"><span class="linenos">2949</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-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">return</span> <span class="n">this</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">_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-2954"><a href="#L-2954"><span class="linenos">2954</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-2955"><a href="#L-2955"><span class="linenos">2955</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-2956"><a href="#L-2956"><span class="linenos">2956</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-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">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-2959"><a href="#L-2959"><span class="linenos">2959</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-2960"><a href="#L-2960"><span class="linenos">2960</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-2961"><a href="#L-2961"><span class="linenos">2961</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-2962"><a href="#L-2962"><span class="linenos">2962</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-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">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-2964"><a href="#L-2964"><span class="linenos">2964</span></a> <span class="k">return</span> <span class="n">primary</span>
-</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a>
-</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</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-2967"><a href="#L-2967"><span class="linenos">2967</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-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">if</span> <span class="bp">self</span><span 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-2970"><a href="#L-2970"><span class="linenos">2970</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-2971"><a href="#L-2971"><span class="linenos">2971</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-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">query</span><span class="p">:</span>
-</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</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-2975"><a href="#L-2975"><span class="linenos">2975</span></a> <span class="k">else</span><span class="p">:</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><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</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_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-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="n">this</span> <span class="o">=</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-2981"><a href="#L-2981"><span class="linenos">2981</span></a> <span class="bp">self</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-2982"><a href="#L-2982"><span class="linenos">2982</span></a>
-</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</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-2984"><a href="#L-2984"><span class="linenos">2984</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-2985"><a href="#L-2985"><span class="linenos">2985</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-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="p">)</span>
-</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</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-2988"><a href="#L-2988"><span class="linenos">2988</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-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="k">else</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="bp">self</span><span 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-2912"><a href="#L-2912"><span class="linenos">2912</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-2913"><a href="#L-2913"><span class="linenos">2913</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-2914"><a href="#L-2914"><span class="linenos">2914</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-2915"><a href="#L-2915"><span class="linenos">2915</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-2916"><a href="#L-2916"><span class="linenos">2916</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-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">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</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-2919"><a href="#L-2919"><span class="linenos">2919</span></a>
+</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</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-2921"><a href="#L-2921"><span class="linenos">2921</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-2922"><a href="#L-2922"><span class="linenos">2922</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-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">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-2925"><a href="#L-2925"><span class="linenos">2925</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-2926"><a href="#L-2926"><span class="linenos">2926</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-2927"><a href="#L-2927"><span class="linenos">2927</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-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="k">elif</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</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-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</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-2933"><a href="#L-2933"><span class="linenos">2933</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-2934"><a href="#L-2934"><span class="linenos">2934</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-2935"><a href="#L-2935"><span class="linenos">2935</span></a> <span class="p">)</span>
+</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</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="kc">True</span><span class="p">)</span>
+</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</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><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <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="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-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
+</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</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-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">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</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-2951"><a href="#L-2951"><span class="linenos">2951</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-2952"><a href="#L-2952"><span class="linenos">2952</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-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</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-2956"><a href="#L-2956"><span class="linenos">2956</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-2957"><a href="#L-2957"><span class="linenos">2957</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-2958"><a href="#L-2958"><span class="linenos">2958</span></a> <span class="p">)</span>
+</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</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-2961"><a href="#L-2961"><span class="linenos">2961</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-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="n">this</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_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-2966"><a href="#L-2966"><span class="linenos">2966</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-2967"><a href="#L-2967"><span class="linenos">2967</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-2968"><a href="#L-2968"><span class="linenos">2968</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-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">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-2971"><a href="#L-2971"><span class="linenos">2971</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-2972"><a href="#L-2972"><span class="linenos">2972</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-2973"><a href="#L-2973"><span class="linenos">2973</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-2974"><a href="#L-2974"><span class="linenos">2974</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-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">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-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="k">return</span> <span class="n">primary</span>
+</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a>
+</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</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-2979"><a href="#L-2979"><span class="linenos">2979</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-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="bp">self</span><span 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-2982"><a href="#L-2982"><span class="linenos">2982</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-2983"><a href="#L-2983"><span class="linenos">2983</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-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">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</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-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</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-2989"><a href="#L-2989"><span class="linenos">2989</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_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-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <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">_prev_comments</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">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-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="bp">self</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-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="n">this</span> <span class="ow">and</span> <span class="n">comments</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="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</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="n">this</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">return</span> <span class="kc">None</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">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</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-3005"><a href="#L-3005"><span class="linenos">3005</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-3006"><a href="#L-3006"><span class="linenos">3006</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-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="k">return</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_primary</span><span class="p">()</span>
-</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</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-3010"><a href="#L-3010"><span class="linenos">3010</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-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">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="bp">self</span><span class="p">,</span> <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><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</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-3016"><a href="#L-3016"><span class="linenos">3016</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-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a>
-</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</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-3020"><a href="#L-3020"><span class="linenos">3020</span></a>
-</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</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">NO_PAREN_FUNCTION_PARSERS</span><span class="p">):</span>
-</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_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><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a>
-</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</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-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="k">if</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-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span 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-3028"><a href="#L-3028"><span class="linenos">3028</span></a>
+</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</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-2996"><a href="#L-2996"><span class="linenos">2996</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-2997"><a href="#L-2997"><span class="linenos">2997</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-2998"><a href="#L-2998"><span class="linenos">2998</span></a> <span class="p">)</span>
+</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</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-3000"><a href="#L-3000"><span class="linenos">3000</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-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</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-3003"><a href="#L-3003"><span class="linenos">3003</span></a>
+</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</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-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <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">_prev_comments</span><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="n">this</span> <span class="ow">and</span> <span class="n">comments</span><span class="p">:</span>
+</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a>
+</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a>
+</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="k">return</span> <span class="kc">None</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">def</span> <span class="nf">_parse_field</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="p">,</span>
+</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</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-3017"><a href="#L-3017"><span class="linenos">3017</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-3018"><a href="#L-3018"><span class="linenos">3018</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-3019"><a href="#L-3019"><span class="linenos">3019</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</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-3021"><a href="#L-3021"><span class="linenos">3021</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-3022"><a href="#L-3022"><span class="linenos">3022</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-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="p">)</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">_parse_function</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="p">,</span> <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 class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</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-3028"><a href="#L-3028"><span class="linenos">3028</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-3029"><a href="#L-3029"><span class="linenos">3029</span></a> <span class="k">return</span> <span class="kc">None</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">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-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="k">return</span> <span class="kc">None</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="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-3035"><a href="#L-3035"><span class="linenos">3035</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-3036"><a href="#L-3036"><span class="linenos">3036</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-3037"><a href="#L-3037"><span class="linenos">3037</span></a>
-</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</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-3039"><a href="#L-3039"><span class="linenos">3039</span></a>
-</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</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-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</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-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">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-3046"><a href="#L-3046"><span class="linenos">3046</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-3047"><a href="#L-3047"><span class="linenos">3047</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-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</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-3032"><a href="#L-3032"><span class="linenos">3032</span></a>
+</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</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">NO_PAREN_FUNCTION_PARSERS</span><span class="p">):</span>
+</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_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><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">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-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="k">if</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-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span 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-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">return</span> <span class="kc">None</span>
+</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a>
+</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</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-3044"><a href="#L-3044"><span class="linenos">3044</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a>
+</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</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-3047"><a href="#L-3047"><span class="linenos">3047</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-3048"><a href="#L-3048"><span class="linenos">3048</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-3049"><a href="#L-3049"><span class="linenos">3049</span></a>
-</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</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-3051"><a href="#L-3051"><span class="linenos">3051</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-3052"><a href="#L-3052"><span class="linenos">3052</span></a>
-</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</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-3054"><a href="#L-3054"><span class="linenos">3054</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_lambda</span><span class="p">)</span>
-</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a>
-</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a> <span class="k">if</span> <span class="n">function</span><span class="p">:</span>
-</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="c1"># Clickhouse supports function calls like foo(x, y)(z), so for these we need to also parse the</span>
-</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="c1"># second parameter list (i.e. &quot;(z)&quot;) and the corresponding function will receive both arg lists.</span>
-</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a> <span class="k">if</span> <span class="n">count_params</span><span class="p">(</span><span class="n">function</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="n">params</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</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-3062"><a href="#L-3062"><span class="linenos">3062</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-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="n">this</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">params</span><span class="p">)</span>
-</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="k">else</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="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</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-3051"><a href="#L-3051"><span class="linenos">3051</span></a>
+</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</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-3053"><a href="#L-3053"><span class="linenos">3053</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-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</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-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">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-3058"><a href="#L-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">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-3059"><a href="#L-3059"><span class="linenos">3059</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-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="k">return</span> <span class="n">this</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="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-3063"><a href="#L-3063"><span class="linenos">3063</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-3064"><a href="#L-3064"><span class="linenos">3064</span></a>
+</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</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-3066"><a href="#L-3066"><span class="linenos">3066</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_lambda</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">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</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-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="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-3073"><a href="#L-3073"><span class="linenos">3073</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-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="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-3076"><a href="#L-3076"><span class="linenos">3076</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-3077"><a href="#L-3077"><span class="linenos">3077</span></a>
-</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</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-3080"><a href="#L-3080"><span class="linenos">3080</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-3081"><a href="#L-3081"><span class="linenos">3081</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-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">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-3084"><a href="#L-3084"><span class="linenos">3084</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-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="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-3087"><a href="#L-3087"><span class="linenos">3087</span></a> <span class="k">return</span> <span class="n">this</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="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-3090"><a href="#L-3090"><span class="linenos">3090</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-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <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-3092"><a href="#L-3092"><span class="linenos">3092</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-3093"><a href="#L-3093"><span class="linenos">3093</span></a> <span class="p">)</span>
+</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</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-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="c1"># Clickhouse supports function calls like foo(x, y)(z), so for these we need to also parse the</span>
+</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="c1"># second parameter list (i.e. &quot;(z)&quot;) and the corresponding function will receive both arg lists.</span>
+</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">if</span> <span class="n">count_params</span><span class="p">(</span><span class="n">function</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a> <span class="n">params</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</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-3074"><a href="#L-3074"><span class="linenos">3074</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-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="n">this</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">params</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">this</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-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="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><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">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-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="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-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">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</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">_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-3088"><a href="#L-3088"><span class="linenos">3088</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-3089"><a href="#L-3089"><span class="linenos">3089</span></a>
+</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</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-3092"><a href="#L-3092"><span class="linenos">3092</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-3093"><a href="#L-3093"><span class="linenos">3093</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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3096"><a href="#L-3096"><span class="linenos">3096</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-3097"><a href="#L-3097"><span class="linenos">3097</span></a> <span class="k">if</span> <span class="n">literal</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="bp">self</span><span 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-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">return</span> <span class="bp">self</span><span 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-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="k">def</span> <span class="nf">_parse_national</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">Expression</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">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">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">token</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
-</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a>
-</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</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">Expression</span><span class="p">:</span>
-</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</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-3108"><a href="#L-3108"><span class="linenos">3108</span></a>
-</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</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-3110"><a href="#L-3110"><span class="linenos">3110</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-3111"><a href="#L-3111"><span class="linenos">3111</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-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">return</span> <span class="bp">self</span><span 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-3114"><a href="#L-3114"><span class="linenos">3114</span></a>
-</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3116"><a href="#L-3116"><span class="linenos">3116</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-3117"><a href="#L-3117"><span class="linenos">3117</span></a>
-</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3119"><a href="#L-3119"><span class="linenos">3119</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_id_var</span><span class="p">)</span>
+</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</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-3096"><a href="#L-3096"><span class="linenos">3096</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-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="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-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="k">return</span> <span class="n">this</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="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-3102"><a href="#L-3102"><span class="linenos">3102</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-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">expression</span><span class="p">(</span>
+</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</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-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">_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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3108"><a href="#L-3108"><span class="linenos">3108</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-3109"><a href="#L-3109"><span class="linenos">3109</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
+</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3111"><a href="#L-3111"><span class="linenos">3111</span></a>
+</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_parse_national</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">Expression</span><span class="p">:</span>
+</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">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">token</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a>
+</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</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">Expression</span><span class="p">:</span>
+</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</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-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">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-3122"><a href="#L-3122"><span class="linenos">3122</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-3123"><a href="#L-3123"><span class="linenos">3123</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</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-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">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-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">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-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="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-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="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-3121"><a href="#L-3121"><span class="linenos">3121</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-3122"><a href="#L-3122"><span class="linenos">3122</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-3123"><a href="#L-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">_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-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="k">return</span> <span class="bp">self</span><span 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-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">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3128"><a href="#L-3128"><span class="linenos">3128</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-3129"><a href="#L-3129"><span class="linenos">3129</span></a>
+</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3131"><a href="#L-3131"><span class="linenos">3131</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_id_var</span><span class="p">)</span>
</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a>
-</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3134"><a href="#L-3134"><span class="linenos">3134</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-3135"><a href="#L-3135"><span class="linenos">3135</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-3136"><a href="#L-3136"><span class="linenos">3136</span></a> <span class="p">)</span>
-</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</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><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="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">EQ</span><span class="p">):</span>
-</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">left</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-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="n">left</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">)))</span>
+</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</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-3134"><a href="#L-3134"><span class="linenos">3134</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-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</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-3137"><a href="#L-3137"><span class="linenos">3137</span></a>
+</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</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-3139"><a href="#L-3139"><span class="linenos">3139</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-3140"><a href="#L-3140"><span class="linenos">3140</span></a>
+</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</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-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">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-3144"><a href="#L-3144"><span class="linenos">3144</span></a>
-</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">):</span>
-</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</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">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-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</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">RESPECT_NULLS</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="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="n">this</span><span class="p">))</span>
+</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3146"><a href="#L-3146"><span class="linenos">3146</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-3147"><a href="#L-3147"><span class="linenos">3147</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-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="p">)</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">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><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">_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-3153"><a href="#L-3153"><span class="linenos">3153</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-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">try</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="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-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
-</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="k">pass</span>
-</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</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-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">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-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a>
-</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</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><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <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><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a> <span class="ow">or</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-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="p">)</span>
-</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</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-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">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-3152"><a href="#L-3152"><span class="linenos">3152</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">EQ</span><span class="p">):</span>
+</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">left</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-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="n">left</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">)))</span>
+</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a>
+</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</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-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">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-3160"><a href="#L-3160"><span class="linenos">3160</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-3161"><a href="#L-3161"><span class="linenos">3161</span></a>
+</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</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-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
+</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a> <span class="k">pass</span>
+</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</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-3169"><a href="#L-3169"><span class="linenos">3169</span></a>
+</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="bp">self</span><span 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-3171"><a href="#L-3171"><span class="linenos">3171</span></a> <span class="k">return</span> <span class="n">this</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">_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-3174"><a href="#L-3174"><span class="linenos">3174</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-3175"><a href="#L-3175"><span class="linenos">3175</span></a>
-</span><span id="L-3176"><a href="#L-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_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-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">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-3178"><a href="#L-3178"><span class="linenos">3178</span></a>
-</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</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-3182"><a href="#L-3182"><span class="linenos">3182</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-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="k">break</span>
-</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</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-3173"><a href="#L-3173"><span class="linenos">3173</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><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <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><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="ow">or</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-3176"><a href="#L-3176"><span class="linenos">3176</span></a> <span class="p">)</span>
+</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</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-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_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-3181"><a href="#L-3181"><span class="linenos">3181</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-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="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-3184"><a href="#L-3184"><span class="linenos">3184</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="k">return</span> <span class="n">this</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">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_auto_increment</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-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</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</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-3196"><a href="#L-3196"><span class="linenos">3196</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-3197"><a href="#L-3197"><span class="linenos">3197</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-3198"><a href="#L-3198"><span class="linenos">3198</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-3199"><a href="#L-3199"><span class="linenos">3199</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-3200"><a href="#L-3200"><span class="linenos">3200</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-3201"><a href="#L-3201"><span class="linenos">3201</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-3202"><a href="#L-3202"><span class="linenos">3202</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-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">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-3205"><a href="#L-3205"><span class="linenos">3205</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-3206"><a href="#L-3206"><span class="linenos">3206</span></a>
-</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</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-3208"><a href="#L-3208"><span class="linenos">3208</span></a>
-</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</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">Expression</span><span class="p">:</span>
-</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3211"><a href="#L-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><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</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-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="p">)</span>
-</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a>
-</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_generated_as_identity</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-3218"><a href="#L-3218"><span class="linenos">3218</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BY_DEFAULT</span><span class="p">):</span>
-</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</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">False</span><span class="p">)</span>
-</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <span class="k">else</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_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</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-3186"><a href="#L-3186"><span class="linenos">3186</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</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-3189"><a href="#L-3189"><span class="linenos">3189</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-3190"><a href="#L-3190"><span class="linenos">3190</span></a> <span class="k">break</span>
+</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</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-3192"><a href="#L-3192"><span class="linenos">3192</span></a>
+</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</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-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a>
+</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3197"><a href="#L-3197"><span class="linenos">3197</span></a>
+</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</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-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a>
+</span><span id="L-3202"><a href="#L-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</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-3203"><a href="#L-3203"><span class="linenos">3203</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-3204"><a href="#L-3204"><span class="linenos">3204</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-3205"><a href="#L-3205"><span class="linenos">3205</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-3206"><a href="#L-3206"><span class="linenos">3206</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-3207"><a href="#L-3207"><span class="linenos">3207</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-3208"><a href="#L-3208"><span class="linenos">3208</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-3209"><a href="#L-3209"><span class="linenos">3209</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-3210"><a href="#L-3210"><span class="linenos">3210</span></a>
+</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</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-3212"><a href="#L-3212"><span class="linenos">3212</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-3213"><a href="#L-3213"><span class="linenos">3213</span></a>
+</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</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-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">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">Expression</span><span class="p">:</span>
+</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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">expression</span><span class="p">(</span>
+</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</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-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <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">return</span> <span class="bp">self</span><span 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-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="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;IDENTITY&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="bp">self</span><span 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-3226"><a href="#L-3226"><span class="linenos">3226</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;START&quot;</span><span class="p">,</span> <span class="s2">&quot;WITH&quot;</span><span class="p">):</span>
-</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</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-3228"><a href="#L-3228"><span class="linenos">3228</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-3229"><a href="#L-3229"><span class="linenos">3229</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-3230"><a href="#L-3230"><span class="linenos">3230</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-3231"><a href="#L-3231"><span class="linenos">3231</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-3232"><a href="#L-3232"><span class="linenos">3232</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-3233"><a href="#L-3233"><span class="linenos">3233</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-3234"><a href="#L-3234"><span class="linenos">3234</span></a>
-</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</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-3236"><a href="#L-3236"><span class="linenos">3236</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-3237"><a href="#L-3237"><span class="linenos">3237</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-3238"><a href="#L-3238"><span class="linenos">3238</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-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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</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-3225"><a href="#L-3225"><span class="linenos">3225</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BY_DEFAULT</span><span class="p">):</span>
+</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</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">False</span><span class="p">)</span>
+</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</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-3229"><a href="#L-3229"><span class="linenos">3229</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-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="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;IDENTITY&quot;</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="bp">self</span><span 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-3233"><a href="#L-3233"><span class="linenos">3233</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;START&quot;</span><span class="p">,</span> <span class="s2">&quot;WITH&quot;</span><span class="p">):</span>
+</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</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-3235"><a href="#L-3235"><span class="linenos">3235</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-3236"><a href="#L-3236"><span class="linenos">3236</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-3237"><a href="#L-3237"><span class="linenos">3237</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-3238"><a href="#L-3238"><span class="linenos">3238</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-3239"><a href="#L-3239"><span class="linenos">3239</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-3240"><a href="#L-3240"><span class="linenos">3240</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-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="k">return</span> <span class="n">this</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="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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3245"><a href="#L-3245"><span class="linenos">3245</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-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_not_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-3249"><a href="#L-3249"><span class="linenos">3249</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-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3251"><a href="#L-3251"><span class="linenos">3251</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-3252"><a href="#L-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 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-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</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-3243"><a href="#L-3243"><span class="linenos">3243</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-3244"><a href="#L-3244"><span class="linenos">3244</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-3245"><a href="#L-3245"><span class="linenos">3245</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-3246"><a href="#L-3246"><span class="linenos">3246</span></a>
+</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</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-3248"><a href="#L-3248"><span class="linenos">3248</span></a>
+</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="k">return</span> <span class="n">this</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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3252"><a href="#L-3252"><span class="linenos">3252</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-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">_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-3256"><a href="#L-3256"><span class="linenos">3256</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3257"><a href="#L-3257"><span class="linenos">3257</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-3258"><a href="#L-3258"><span class="linenos">3258</span></a> <span class="k">else</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="kc">None</span>
-</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a>
-</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</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-3262"><a href="#L-3262"><span class="linenos">3262</span></a> <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-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</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-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="p">)</span>
+</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="k">def</span> <span class="nf">_parse_not_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-3256"><a href="#L-3256"><span class="linenos">3256</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-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 class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</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;CASESPECIFIC&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">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-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_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-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3264"><a href="#L-3264"><span class="linenos">3264</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-3265"><a href="#L-3265"><span class="linenos">3265</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="n">this</span> <span class="o">=</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">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="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-3271"><a href="#L-3271"><span class="linenos">3271</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-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">_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-3273"><a href="#L-3273"><span class="linenos">3273</span></a>
-</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</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="p">[]</span>
+</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</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-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <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-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</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-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="p">)</span>
+</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a>
+</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a>
-</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</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-3279"><a href="#L-3279"><span class="linenos">3279</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-3280"><a href="#L-3280"><span class="linenos">3280</span></a> <span class="k">break</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="n">append</span><span class="p">(</span><span class="n">constraint</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">return</span> <span class="bp">self</span><span 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-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_unnamed_constraint</span><span class="p">(</span>
-</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</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-3287"><a href="#L-3287"><span class="linenos">3287</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-3288"><a href="#L-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_texts</span><span class="p">(</span><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 class="p">):</span>
-</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="k">return</span> <span class="kc">None</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">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-3292"><a href="#L-3292"><span class="linenos">3292</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-3293"><a href="#L-3293"><span class="linenos">3293</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-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">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-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">_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">Expression</span><span class="p">:</span>
-</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unique</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_id_vars</span><span class="p">())</span>
+</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</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-3278"><a href="#L-3278"><span class="linenos">3278</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-3279"><a href="#L-3279"><span class="linenos">3279</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-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="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-3282"><a href="#L-3282"><span class="linenos">3282</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a>
+</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</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-3286"><a href="#L-3286"><span class="linenos">3286</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-3287"><a href="#L-3287"><span class="linenos">3287</span></a> <span class="k">break</span>
+</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</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-3289"><a href="#L-3289"><span class="linenos">3289</span></a>
+</span><span id="L-3290"><a href="#L-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</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-3291"><a href="#L-3291"><span class="linenos">3291</span></a>
+</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</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-3294"><a href="#L-3294"><span class="linenos">3294</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-3295"><a href="#L-3295"><span class="linenos">3295</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_texts</span><span class="p">(</span><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 class="p">):</span>
+</span><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a>
+</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</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-3299"><a href="#L-3299"><span class="linenos">3299</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-3300"><a href="#L-3300"><span class="linenos">3300</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-3301"><a href="#L-3301"><span class="linenos">3301</span></a>
-</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</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-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</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-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="k">break</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">if</span> <span class="bp">self</span><span 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-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</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-3311"><a href="#L-3311"><span class="linenos">3311</span></a>
-</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
-</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</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">CASCADE</span><span class="p">):</span>
-</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</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-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</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-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</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-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">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-3324"><a href="#L-3324"><span class="linenos">3324</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-3325"><a href="#L-3325"><span class="linenos">3325</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-3326"><a href="#L-3326"><span class="linenos">3326</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-3327"><a href="#L-3327"><span class="linenos">3327</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-3328"><a href="#L-3328"><span class="linenos">3328</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-3329"><a href="#L-3329"><span class="linenos">3329</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-3330"><a href="#L-3330"><span class="linenos">3330</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-3331"><a href="#L-3331"><span class="linenos">3331</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-3332"><a href="#L-3332"><span class="linenos">3332</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-3333"><a href="#L-3333"><span class="linenos">3333</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-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="k">break</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">return</span> <span class="n">options</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">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="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-3340"><a href="#L-3340"><span class="linenos">3340</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-3341"><a href="#L-3341"><span class="linenos">3341</span></a> <span class="k">return</span> <span class="kc">None</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">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</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-3302"><a href="#L-3302"><span class="linenos">3302</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-3303"><a href="#L-3303"><span class="linenos">3303</span></a>
+</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</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">Expression</span><span class="p">:</span>
+</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</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">advance</span><span class="o">=</span><span class="kc">False</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="bp">self</span><span class="o">.</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><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unique</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_id_vars</span><span class="p">())</span>
+</span><span id="L-3308"><a href="#L-3308"><span class="linenos">3308</span></a>
+</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</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-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</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-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="k">break</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">if</span> <span class="bp">self</span><span 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-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
+</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</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">CASCADE</span><span class="p">):</span>
+</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</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-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</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-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</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-3329"><a href="#L-3329"><span class="linenos">3329</span></a>
+</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</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-3331"><a href="#L-3331"><span class="linenos">3331</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-3332"><a href="#L-3332"><span class="linenos">3332</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-3333"><a href="#L-3333"><span class="linenos">3333</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-3334"><a href="#L-3334"><span class="linenos">3334</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-3335"><a href="#L-3335"><span class="linenos">3335</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-3336"><a href="#L-3336"><span class="linenos">3336</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-3337"><a href="#L-3337"><span class="linenos">3337</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-3338"><a href="#L-3338"><span class="linenos">3338</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-3339"><a href="#L-3339"><span class="linenos">3339</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-3340"><a href="#L-3340"><span class="linenos">3340</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-3341"><a href="#L-3341"><span class="linenos">3341</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</span></a> <span class="k">break</span>
+</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a>
+</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</span></a> <span class="k">return</span> <span class="n">options</span>
</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a>
-</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3347"><a href="#L-3347"><span class="linenos">3347</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-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="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-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">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-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">_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">Expression</span><span class="p">:</span>
-</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</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-3354"><a href="#L-3354"><span class="linenos">3354</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-3355"><a href="#L-3355"><span class="linenos">3355</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a>
-</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</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-3358"><a href="#L-3358"><span class="linenos">3358</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-3359"><a href="#L-3359"><span class="linenos">3359</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-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="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-3362"><a href="#L-3362"><span class="linenos">3362</span></a>
-</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">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
-</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</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-3366"><a href="#L-3366"><span class="linenos">3366</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-3367"><a href="#L-3367"><span class="linenos">3367</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-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</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-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="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-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">return</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">ForeignKey</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">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="p">)</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">def</span> <span class="nf">_parse_primary_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">Expression</span><span class="p">:</span>
-</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3380"><a href="#L-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">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-3381"><a href="#L-3381"><span class="linenos">3381</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-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <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">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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3386"><a href="#L-3386"><span class="linenos">3386</span></a>
-</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</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-3388"><a href="#L-3388"><span class="linenos">3388</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-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3346"><a href="#L-3346"><span class="linenos">3346</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="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-3347"><a href="#L-3347"><span class="linenos">3347</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-3348"><a href="#L-3348"><span class="linenos">3348</span></a> <span class="k">return</span> <span class="kc">None</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="n">expressions</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</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="k">if</span> <span class="bp">self</span><span 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-3354"><a href="#L-3354"><span class="linenos">3354</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-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="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-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">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-3358"><a href="#L-3358"><span class="linenos">3358</span></a>
+</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</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">Expression</span><span class="p">:</span>
+</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</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-3361"><a href="#L-3361"><span class="linenos">3361</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-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="n">options</span> <span class="o">=</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">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-3365"><a href="#L-3365"><span class="linenos">3365</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-3366"><a href="#L-3366"><span class="linenos">3366</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-3367"><a href="#L-3367"><span class="linenos">3367</span></a>
+</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
+</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</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-3373"><a href="#L-3373"><span class="linenos">3373</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-3374"><a href="#L-3374"><span class="linenos">3374</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-3375"><a href="#L-3375"><span class="linenos">3375</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</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-3378"><a href="#L-3378"><span class="linenos">3378</span></a>
+</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</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-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="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-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</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">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span> <span class="c1"># type: ignore</span>
+</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a> <span class="p">)</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_primary_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">Expression</span><span class="p">:</span>
+</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</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-3388"><a href="#L-3388"><span class="linenos">3388</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-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><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</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-3392"><a href="#L-3392"><span class="linenos">3392</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-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="k">return</span> <span class="n">this</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">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-3396"><a href="#L-3396"><span class="linenos">3396</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3391"><a href="#L-3391"><span class="linenos">3391</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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</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 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-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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</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-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">if</span> <span class="bp">self</span><span 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-3399"><a href="#L-3399"><span class="linenos">3399</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">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">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-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</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_slice</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-3402"><a href="#L-3402"><span class="linenos">3402</span></a>
-</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</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-3405"><a href="#L-3405"><span class="linenos">3405</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-3406"><a href="#L-3406"><span class="linenos">3406</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-3407"><a href="#L-3407"><span class="linenos">3407</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-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="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">index_offset</span><span class="p">)</span>
-</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</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-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">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-3413"><a href="#L-3413"><span class="linenos">3413</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-3414"><a href="#L-3414"><span class="linenos">3414</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-3415"><a href="#L-3415"><span class="linenos">3415</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-3416"><a href="#L-3416"><span class="linenos">3416</span></a>
-</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="n">this</span><span class="o">.</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><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</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-3419"><a href="#L-3419"><span class="linenos">3419</span></a>
-</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</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-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3422"><a href="#L-3422"><span class="linenos">3422</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3423"><a href="#L-3423"><span class="linenos">3423</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a>
-</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</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-3426"><a href="#L-3426"><span class="linenos">3426</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</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="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-3430"><a href="#L-3430"><span class="linenos">3430</span></a>
-</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</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-3432"><a href="#L-3432"><span class="linenos">3432</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-3433"><a href="#L-3433"><span class="linenos">3433</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-3434"><a href="#L-3434"><span class="linenos">3434</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-3435"><a href="#L-3435"><span class="linenos">3435</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-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="bp">self</span><span 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-3438"><a href="#L-3438"><span class="linenos">3438</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-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="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-3441"><a href="#L-3441"><span class="linenos">3441</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-3442"><a href="#L-3442"><span class="linenos">3442</span></a>
-</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</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-3444"><a href="#L-3444"><span class="linenos">3444</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">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-3445"><a href="#L-3445"><span class="linenos">3445</span></a> <span class="p">)</span>
+</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</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-3399"><a href="#L-3399"><span class="linenos">3399</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-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="k">return</span> <span class="n">this</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="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-3403"><a href="#L-3403"><span class="linenos">3403</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3404"><a href="#L-3404"><span class="linenos">3404</span></a>
+</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3406"><a href="#L-3406"><span class="linenos">3406</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">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">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-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</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_slice</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-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="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</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-3412"><a href="#L-3412"><span class="linenos">3412</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-3413"><a href="#L-3413"><span class="linenos">3413</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-3414"><a href="#L-3414"><span class="linenos">3414</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-3415"><a href="#L-3415"><span class="linenos">3415</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</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">index_offset</span><span class="p">)</span>
+</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</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-3418"><a href="#L-3418"><span class="linenos">3418</span></a>
+</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</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-3420"><a href="#L-3420"><span class="linenos">3420</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-3421"><a href="#L-3421"><span class="linenos">3421</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-3422"><a href="#L-3422"><span class="linenos">3422</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-3423"><a href="#L-3423"><span class="linenos">3423</span></a>
+</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <span class="n">this</span><span class="o">.</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><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</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-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">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-3428"><a href="#L-3428"><span class="linenos">3428</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3429"><a href="#L-3429"><span class="linenos">3429</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a>
+</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</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-3433"><a href="#L-3433"><span class="linenos">3433</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a>
+</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</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-3437"><a href="#L-3437"><span class="linenos">3437</span></a>
+</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</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-3439"><a href="#L-3439"><span class="linenos">3439</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-3440"><a href="#L-3440"><span class="linenos">3440</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-3441"><a href="#L-3441"><span class="linenos">3441</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-3442"><a href="#L-3442"><span class="linenos">3442</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-3443"><a href="#L-3443"><span class="linenos">3443</span></a>
+</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3445"><a href="#L-3445"><span class="linenos">3445</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-3446"><a href="#L-3446"><span class="linenos">3446</span></a>
-</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</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-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3449"><a href="#L-3449"><span class="linenos">3449</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-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="n">this</span> <span class="o">=</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><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</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-3453"><a href="#L-3453"><span class="linenos">3453</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</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-3455"><a href="#L-3455"><span class="linenos">3455</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-3456"><a href="#L-3456"><span class="linenos">3456</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-3457"><a href="#L-3457"><span class="linenos">3457</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-3458"><a href="#L-3458"><span class="linenos">3458</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-3459"><a href="#L-3459"><span class="linenos">3459</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-3460"><a href="#L-3460"><span class="linenos">3460</span></a>
-</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</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-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">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">Expression</span><span class="p">:</span>
-</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</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-3465"><a href="#L-3465"><span class="linenos">3465</span></a>
-</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3467"><a href="#L-3467"><span class="linenos">3467</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-3470"><a href="#L-3470"><span class="linenos">3470</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-3471"><a href="#L-3471"><span class="linenos">3471</span></a>
-</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">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-3447"><a href="#L-3447"><span class="linenos">3447</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-3448"><a href="#L-3448"><span class="linenos">3448</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-3449"><a href="#L-3449"><span class="linenos">3449</span></a>
+</span><span id="L-3450"><a href="#L-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_window</span><span class="p">(</span>
+</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</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">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-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_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-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3456"><a href="#L-3456"><span class="linenos">3456</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-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="n">this</span> <span class="o">=</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><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</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-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</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-3462"><a href="#L-3462"><span class="linenos">3462</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-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="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</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-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span 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-3469"><a href="#L-3469"><span class="linenos">3469</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-3470"><a href="#L-3470"><span class="linenos">3470</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-3471"><a href="#L-3471"><span class="linenos">3471</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-3472"><a href="#L-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">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-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_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="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-3475"><a href="#L-3475"><span class="linenos">3475</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-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">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-3478"><a href="#L-3478"><span class="linenos">3478</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-3479"><a href="#L-3479"><span class="linenos">3479</span></a>
-</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</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-3474"><a href="#L-3474"><span class="linenos">3474</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-3475"><a href="#L-3475"><span class="linenos">3475</span></a>
+</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</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">Expression</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">_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-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="bp">self</span><span 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-3480"><a href="#L-3480"><span class="linenos">3480</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</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-3484"><a href="#L-3484"><span class="linenos">3484</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-3485"><a href="#L-3485"><span class="linenos">3485</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3486"><a href="#L-3486"><span class="linenos">3486</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-3487"><a href="#L-3487"><span class="linenos">3487</span></a>
-</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</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-3483"><a href="#L-3483"><span class="linenos">3483</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-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="bp">self</span><span 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-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_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="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-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">_parse_conjunction</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="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-3491"><a href="#L-3491"><span class="linenos">3491</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><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</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-3491"><a href="#L-3491"><span class="linenos">3491</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-3492"><a href="#L-3492"><span class="linenos">3492</span></a>
-</span><span id="L-3493"><a href="#L-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">DISTINCT</span><span class="p">):</span>
-</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</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-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">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="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-3496"><a href="#L-3496"><span class="linenos">3496</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</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-3498"><a href="#L-3498"><span class="linenos">3498</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">0</span><span class="p">)</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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</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-3502"><a href="#L-3502"><span class="linenos">3502</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</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">expression</span><span class="p">)</span>
-</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3493"><a href="#L-3493"><span class="linenos">3493</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-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="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</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-3497"><a href="#L-3497"><span class="linenos">3497</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-3498"><a href="#L-3498"><span class="linenos">3498</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3499"><a href="#L-3499"><span class="linenos">3499</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-3500"><a href="#L-3500"><span class="linenos">3500</span></a>
+</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="L-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_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-3504"><a href="#L-3504"><span class="linenos">3504</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><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</span></a>
-</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</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-3507"><a href="#L-3507"><span class="linenos">3507</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-3508"><a href="#L-3508"><span class="linenos">3508</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-3509"><a href="#L-3509"><span class="linenos">3509</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">WITHIN_GROUP</span><span class="p">):</span>
-</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</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-3511"><a href="#L-3511"><span class="linenos">3511</span></a> <span class="n">this</span> <span class="o">=</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><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a>
-</span><span id="L-3515"><a href="#L-3515"><span class="linenos">3515</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-3516"><a href="#L-3516"><span class="linenos">3516</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">expression</span><span class="p">)</span>
-</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3506"><a href="#L-3506"><span class="linenos">3506</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3507"><a href="#L-3507"><span class="linenos">3507</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-3508"><a href="#L-3508"><span class="linenos">3508</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 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="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-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</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-3511"><a href="#L-3511"><span class="linenos">3511</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">0</span><span class="p">)</span>
+</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a>
+</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</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-3514"><a href="#L-3514"><span class="linenos">3514</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-3515"><a href="#L-3515"><span class="linenos">3515</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</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">expression</span><span class="p">)</span>
+</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3518"><a href="#L-3518"><span class="linenos">3518</span></a>
-</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</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><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">_parse_bitwise</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">if</span> <span class="bp">self</span><span 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-3524"><a href="#L-3524"><span class="linenos">3524</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</span><span class="p">())</span>
-</span><span id="L-3525"><a href="#L-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</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-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="n">to</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="k">else</span><span class="p">:</span>
-</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</span></a>
-</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</span></a> <span class="c1"># Swap the argument order if needed to produce the correct AST</span>
-</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONVERT_TYPE_FIRST</span><span class="p">:</span>
-</span><span id="L-3532"><a href="#L-3532"><span class="linenos">3532</span></a> <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">this</span>
-</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a>
-</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</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-3520"><a href="#L-3520"><span class="linenos">3520</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-3521"><a href="#L-3521"><span class="linenos">3521</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-3522"><a href="#L-3522"><span class="linenos">3522</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">WITHIN_GROUP</span><span class="p">):</span>
+</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</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-3524"><a href="#L-3524"><span class="linenos">3524</span></a> <span class="n">this</span> <span class="o">=</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><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="k">return</span> <span class="n">this</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="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-3529"><a href="#L-3529"><span class="linenos">3529</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">expression</span><span class="p">)</span>
+</span><span id="L-3530"><a href="#L-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">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-3531"><a href="#L-3531"><span class="linenos">3531</span></a>
+</span><span id="L-3532"><a href="#L-3532"><span class="linenos">3532</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</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><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</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-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_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">Expression</span><span class="p">]:</span>
-</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a><span class="sd"> There are generally two variants of the DECODE function:</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="sd"> - DECODE(bin, charset)</span>
-</span><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
+</span><span id="L-3536"><a href="#L-3536"><span class="linenos">3536</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3537"><a href="#L-3537"><span class="linenos">3537</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</span><span class="p">())</span>
+</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</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-3539"><a href="#L-3539"><span class="linenos">3539</span></a> <span class="n">to</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-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a>
-</span><span id="L-3543"><a href="#L-3543"><span class="linenos">3543</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</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-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="c1"># Swap the argument order if needed to produce the correct AST</span>
+</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONVERT_TYPE_FIRST</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="p">,</span> <span class="n">to</span> <span class="o">=</span> <span class="n">to</span><span class="p">,</span> <span class="n">this</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a>
-</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</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-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3551"><a href="#L-3551"><span class="linenos">3551</span></a>
-</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</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-3553"><a href="#L-3553"><span class="linenos">3553</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-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-3549"><a href="#L-3549"><span class="linenos">3549</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">Expression</span><span class="p">]:</span>
+</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a><span class="sd"> There are generally two variants of the DECODE function:</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="sd"> - DECODE(bin, charset)</span>
+</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</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">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</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-3558"><a href="#L-3558"><span class="linenos">3558</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-3559"><a href="#L-3559"><span class="linenos">3559</span></a> <span class="k">return</span> <span class="kc">None</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="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-3562"><a href="#L-3562"><span class="linenos">3562</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</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-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <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="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-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</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-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="p">)</span>
-</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</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-3571"><a href="#L-3571"><span class="linenos">3571</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-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</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-3574"><a href="#L-3574"><span class="linenos">3574</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-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <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 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-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">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-3580"><a href="#L-3580"><span class="linenos">3580</span></a>
-</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</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">Expression</span><span class="p">]:</span>
-</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</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-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="n">key</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-3584"><a href="#L-3584"><span class="linenos">3584</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-3585"><a href="#L-3585"><span class="linenos">3585</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-3586"><a href="#L-3586"><span class="linenos">3586</span></a> <span class="n">value</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-3587"><a href="#L-3587"><span class="linenos">3587</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-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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="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-3592"><a href="#L-3592"><span class="linenos">3592</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_json_key_value</span><span class="p">)</span>
+</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</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-3561"><a href="#L-3561"><span class="linenos">3561</span></a>
+</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</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-3563"><a href="#L-3563"><span class="linenos">3563</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3564"><a href="#L-3564"><span class="linenos">3564</span></a>
+</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</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-3566"><a href="#L-3566"><span class="linenos">3566</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-3567"><a href="#L-3567"><span class="linenos">3567</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a>
+</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</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-3571"><a href="#L-3571"><span class="linenos">3571</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-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="k">return</span> <span class="kc">None</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="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-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3576"><a href="#L-3576"><span class="linenos">3576</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-3577"><a href="#L-3577"><span class="linenos">3577</span></a> <span class="p">)</span>
+</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</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-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</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-3581"><a href="#L-3581"><span class="linenos">3581</span></a> <span class="p">)</span>
+</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</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-3584"><a href="#L-3584"><span class="linenos">3584</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-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</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-3587"><a href="#L-3587"><span class="linenos">3587</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-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="p">),</span>
+</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3591"><a href="#L-3591"><span class="linenos">3591</span></a> <span class="p">)</span>
+</span><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</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-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="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</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 class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
-</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;NULL ON NULL&quot;</span>
-</span><span id="L-3597"><a href="#L-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_text_seq</span><span class="p">(</span><span class="s2">&quot;ABSENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
-</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;ABSENT ON NULL&quot;</span>
-</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a>
-</span><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3601"><a href="#L-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_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-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3603"><a href="#L-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_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-3604"><a href="#L-3604"><span class="linenos">3604</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</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-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_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">Expression</span><span class="p">]:</span>
+</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</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-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="n">key</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-3599"><a href="#L-3599"><span class="linenos">3599</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-3600"><a href="#L-3600"><span class="linenos">3600</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-3601"><a href="#L-3601"><span class="linenos">3601</span></a> <span class="n">value</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-3602"><a href="#L-3602"><span class="linenos">3602</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-3603"><a href="#L-3603"><span class="linenos">3603</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3605"><a href="#L-3605"><span class="linenos">3605</span></a>
-</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</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-3607"><a href="#L-3607"><span class="linenos">3607</span></a>
-</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</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_type</span><span class="p">()</span>
-</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="n">format_json</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">)</span>
-</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</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-3611"><a href="#L-3611"><span class="linenos">3611</span></a>
-</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">expression</span><span class="p">(</span>
-</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</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-3616"><a href="#L-3616"><span class="linenos">3616</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-3617"><a href="#L-3617"><span class="linenos">3617</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-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="n">format_json</span><span class="o">=</span><span class="n">format_json</span><span class="p">,</span>
-</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="p">)</span>
-</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</span></a>
-</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="k">def</span> <span class="nf">_parse_logarithm</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-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="c1"># Default argument order is base, expression</span>
-</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</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_range</span><span class="p">)</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">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
-</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</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="n">exp</span><span class="o">.</span><span class="n">Log</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-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">return</span> <span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Ln</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_DEFAULTS_TO_LN</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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-3633"><a href="#L-3633"><span class="linenos">3633</span></a> <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">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">Expression</span><span class="p">:</span>
-</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</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-3637"><a href="#L-3637"><span class="linenos">3637</span></a>
-</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</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-3639"><a href="#L-3639"><span class="linenos">3639</span></a>
-</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</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-3641"><a href="#L-3641"><span class="linenos">3641</span></a>
-</span><span id="L-3642"><a href="#L-3642"><span class="linenos">3642</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-3643"><a href="#L-3643"><span class="linenos">3643</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-3644"><a href="#L-3644"><span class="linenos">3644</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-3645"><a href="#L-3645"><span class="linenos">3645</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-3646"><a href="#L-3646"><span class="linenos">3646</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-3647"><a href="#L-3647"><span class="linenos">3647</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</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-3649"><a href="#L-3649"><span class="linenos">3649</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</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="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-3607"><a href="#L-3607"><span class="linenos">3607</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_json_key_value</span><span class="p">)</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="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</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 class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
+</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;NULL ON NULL&quot;</span>
+</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</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;ABSENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
+</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;ABSENT ON NULL&quot;</span>
+</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a>
+</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</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-3617"><a href="#L-3617"><span class="linenos">3617</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</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-3619"><a href="#L-3619"><span class="linenos">3619</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a>
+</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</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-3622"><a href="#L-3622"><span class="linenos">3622</span></a>
+</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</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_type</span><span class="p">()</span>
+</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a> <span class="n">format_json</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">)</span>
+</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</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-3626"><a href="#L-3626"><span class="linenos">3626</span></a>
+</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a> <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-3628"><a href="#L-3628"><span class="linenos">3628</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3630"><a href="#L-3630"><span class="linenos">3630</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-3631"><a href="#L-3631"><span class="linenos">3631</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-3632"><a href="#L-3632"><span class="linenos">3632</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-3633"><a href="#L-3633"><span class="linenos">3633</span></a> <span class="n">format_json</span><span class="o">=</span><span class="n">format_json</span><span class="p">,</span>
+</span><span id="L-3634"><a href="#L-3634"><span class="linenos">3634</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="L-3635"><a href="#L-3635"><span class="linenos">3635</span></a> <span class="p">)</span>
+</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</span></a>
+</span><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a> <span class="k">def</span> <span class="nf">_parse_logarithm</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-3638"><a href="#L-3638"><span class="linenos">3638</span></a> <span class="c1"># Default argument order is base, expression</span>
+</span><span id="L-3639"><a href="#L-3639"><span class="linenos">3639</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_range</span><span class="p">)</span>
+</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</span></a>
+</span><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</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">&gt;</span> <span class="mi">1</span><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="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
+</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
+</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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-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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ln</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_DEFAULTS_TO_LN</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="p">)</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="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">Expression</span><span class="p">:</span>
+</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</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-3652"><a href="#L-3652"><span class="linenos">3652</span></a>
-</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">expression</span><span class="p">(</span>
-</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</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-3655"><a href="#L-3655"><span class="linenos">3655</span></a> <span class="p">)</span>
+</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</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-3654"><a href="#L-3654"><span class="linenos">3654</span></a>
+</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</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-3656"><a href="#L-3656"><span class="linenos">3656</span></a>
-</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</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-3659"><a href="#L-3659"><span class="linenos">3659</span></a>
-</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3661"><a href="#L-3661"><span class="linenos">3661</span></a> <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-3662"><a href="#L-3662"><span class="linenos">3662</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-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">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</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-3667"><a href="#L-3667"><span class="linenos">3667</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-3668"><a href="#L-3668"><span class="linenos">3668</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</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-3670"><a href="#L-3670"><span class="linenos">3670</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-3657"><a href="#L-3657"><span class="linenos">3657</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-3658"><a href="#L-3658"><span class="linenos">3658</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-3659"><a href="#L-3659"><span class="linenos">3659</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-3660"><a href="#L-3660"><span class="linenos">3660</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-3661"><a href="#L-3661"><span class="linenos">3661</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-3662"><a href="#L-3662"><span class="linenos">3662</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</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-3664"><a href="#L-3664"><span class="linenos">3664</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3667"><a href="#L-3667"><span class="linenos">3667</span></a>
+</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a> <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-3669"><a href="#L-3669"><span class="linenos">3669</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-3670"><a href="#L-3670"><span class="linenos">3670</span></a> <span class="p">)</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="n">this</span> <span class="o">=</span> <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-3673"><a href="#L-3673"><span class="linenos">3673</span></a>
-</span><span id="L-3674"><a href="#L-3674"><span class="linenos">3674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><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">return</span> <span class="n">this</span>
-</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a>
-</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</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">Expression</span><span class="p">:</span>
-</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</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-3680"><a href="#L-3680"><span class="linenos">3680</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-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">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">Expression</span><span class="p">:</span>
-</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a>
-</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</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-3687"><a href="#L-3687"><span class="linenos">3687</span></a>
-</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3689"><a href="#L-3689"><span class="linenos">3689</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-3690"><a href="#L-3690"><span class="linenos">3690</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3691"><a href="#L-3691"><span class="linenos">3691</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-3672"><a href="#L-3672"><span class="linenos">3672</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</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-3674"><a href="#L-3674"><span class="linenos">3674</span></a>
+</span><span id="L-3675"><a href="#L-3675"><span class="linenos">3675</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</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-3678"><a href="#L-3678"><span class="linenos">3678</span></a> <span class="p">)</span>
+</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</span></a>
+</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</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-3682"><a href="#L-3682"><span class="linenos">3682</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-3683"><a href="#L-3683"><span class="linenos">3683</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</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-3685"><a href="#L-3685"><span class="linenos">3685</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-3686"><a href="#L-3686"><span class="linenos">3686</span></a>
+</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a> <span class="n">this</span> <span class="o">=</span> <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-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="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-3690"><a href="#L-3690"><span class="linenos">3690</span></a>
+</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</span></a> <span class="k">return</span> <span class="n">this</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="n">this</span> <span class="o">=</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><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">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</span></a>
-</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="k">return</span> <span class="n">this</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">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">Expression</span><span class="p">:</span>
-</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
-</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</span></a>
-</span><span id="L-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a>
-</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</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">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</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-3693"><a href="#L-3693"><span class="linenos">3693</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">Expression</span><span class="p">:</span>
+</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</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-3695"><a href="#L-3695"><span class="linenos">3695</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-3696"><a href="#L-3696"><span class="linenos">3696</span></a>
+</span><span id="L-3697"><a href="#L-3697"><span class="linenos">3697</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">Expression</span><span class="p">:</span>
+</span><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</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="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-3702"><a href="#L-3702"><span class="linenos">3702</span></a>
+</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3704"><a href="#L-3704"><span class="linenos">3704</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-3705"><a href="#L-3705"><span class="linenos">3705</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3706"><a href="#L-3706"><span class="linenos">3706</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-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">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-3709"><a href="#L-3709"><span class="linenos">3709</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-3710"><a href="#L-3710"><span class="linenos">3710</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-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-3716"><a href="#L-3716"><span class="linenos">3716</span></a> <span class="n">collation</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-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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span>
-</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
-</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span><span class="p">,</span>
-</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a> <span class="p">)</span>
-</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</span></a>
-</span><span id="L-3726"><a href="#L-3726"><span class="linenos">3726</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3727"><a href="#L-3727"><span class="linenos">3727</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-3728"><a href="#L-3728"><span class="linenos">3728</span></a>
-</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</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-3730"><a href="#L-3730"><span class="linenos">3730</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-3731"><a href="#L-3731"><span class="linenos">3731</span></a>
-</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</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-3734"><a href="#L-3734"><span class="linenos">3734</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-3735"><a href="#L-3735"><span class="linenos">3735</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-3736"><a href="#L-3736"><span class="linenos">3736</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">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><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</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-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="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</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-3741"><a href="#L-3741"><span class="linenos">3741</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">):</span>
-</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</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-3743"><a href="#L-3743"><span class="linenos">3743</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-3744"><a href="#L-3744"><span class="linenos">3744</span></a>
-</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
-</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</span></a>
-</span><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</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="c1"># The below changes handle</span>
-</span><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="L-3754"><a href="#L-3754"><span class="linenos">3754</span></a>
-</span><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</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-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">):</span>
-</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</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">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-3761"><a href="#L-3761"><span class="linenos">3761</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">RESPECT_NULLS</span><span class="p">):</span>
-</span><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</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">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-3763"><a href="#L-3763"><span class="linenos">3763</span></a>
-</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="k">if</span> <span class="n">alias</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">_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-3767"><a href="#L-3767"><span class="linenos">3767</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">OVER</span><span class="p">):</span>
-</span><span id="L-3768"><a href="#L-3768"><span class="linenos">3768</span></a> <span class="k">return</span> <span class="n">this</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="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-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</span></a> <span class="n">this</span> <span class="o">=</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><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a>
+</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="k">return</span> <span class="n">this</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">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">Expression</span><span class="p">:</span>
+</span><span id="L-3714"><a href="#L-3714"><span class="linenos">3714</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="L-3715"><a href="#L-3715"><span class="linenos">3715</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a>
+</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a>
+</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</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">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</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-3722"><a href="#L-3722"><span class="linenos">3722</span></a>
+</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</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-3724"><a href="#L-3724"><span class="linenos">3724</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-3725"><a href="#L-3725"><span class="linenos">3725</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-3726"><a href="#L-3726"><span class="linenos">3726</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span 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-3731"><a href="#L-3731"><span class="linenos">3731</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-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="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-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span>
+</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
+</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-3738"><a href="#L-3738"><span class="linenos">3738</span></a> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span><span class="p">,</span>
+</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</span></a> <span class="p">)</span>
+</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a>
+</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3742"><a href="#L-3742"><span class="linenos">3742</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-3743"><a href="#L-3743"><span class="linenos">3743</span></a>
+</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</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-3745"><a href="#L-3745"><span class="linenos">3745</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-3746"><a href="#L-3746"><span class="linenos">3746</span></a>
+</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</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-3749"><a href="#L-3749"><span class="linenos">3749</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-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">):</span>
+</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RESPECT_NULLS</span><span class="p">):</span>
+</span><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3754"><a href="#L-3754"><span class="linenos">3754</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a>
+</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="L-3757"><a href="#L-3757"><span class="linenos">3757</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-3758"><a href="#L-3758"><span class="linenos">3758</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-3759"><a href="#L-3759"><span class="linenos">3759</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-3760"><a href="#L-3760"><span class="linenos">3760</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">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><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</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-3762"><a href="#L-3762"><span class="linenos">3762</span></a>
+</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</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-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">):</span>
+</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</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-3767"><a href="#L-3767"><span class="linenos">3767</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-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="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a>
-</span><span id="L-3773"><a href="#L-3773"><span class="linenos">3773</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-3774"><a href="#L-3774"><span class="linenos">3774</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-3775"><a href="#L-3775"><span class="linenos">3775</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-3776"><a href="#L-3776"><span class="linenos">3776</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-3777"><a href="#L-3777"><span class="linenos">3777</span></a>
-</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</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-3780"><a href="#L-3780"><span class="linenos">3780</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-3781"><a href="#L-3781"><span class="linenos">3781</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-3782"><a href="#L-3782"><span class="linenos">3782</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-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="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-3785"><a href="#L-3785"><span class="linenos">3785</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</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-3788"><a href="#L-3788"><span class="linenos">3788</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-3789"><a href="#L-3789"><span class="linenos">3789</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-3790"><a href="#L-3790"><span class="linenos">3790</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-3791"><a href="#L-3791"><span class="linenos">3791</span></a> <span class="p">)</span>
-</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3793"><a href="#L-3793"><span class="linenos">3793</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a>
-</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</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-3796"><a href="#L-3796"><span class="linenos">3796</span></a>
-</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a> <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-3798"><a href="#L-3798"><span class="linenos">3798</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><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">this</span><span class="p">,</span>
-</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</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-3801"><a href="#L-3801"><span class="linenos">3801</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</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-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="p">)</span>
-</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a>
-</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</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-3807"><a href="#L-3807"><span class="linenos">3807</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-3773"><a href="#L-3773"><span class="linenos">3773</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</span></a>
+</span><span id="L-3776"><a href="#L-3776"><span class="linenos">3776</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
+</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</span></a>
+</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="L-3780"><a href="#L-3780"><span class="linenos">3780</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-3781"><a href="#L-3781"><span class="linenos">3781</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</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-3784"><a href="#L-3784"><span class="linenos">3784</span></a>
+</span><span id="L-3785"><a href="#L-3785"><span class="linenos">3785</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</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-3789"><a href="#L-3789"><span class="linenos">3789</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-3790"><a href="#L-3790"><span class="linenos">3790</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</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-3793"><a href="#L-3793"><span class="linenos">3793</span></a>
+</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</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-3795"><a href="#L-3795"><span class="linenos">3795</span></a> <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-3796"><a href="#L-3796"><span class="linenos">3796</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-3797"><a href="#L-3797"><span class="linenos">3797</span></a> <span class="p">)</span>
+</span><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a>
+</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</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-3800"><a href="#L-3800"><span class="linenos">3800</span></a>
+</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</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-3802"><a href="#L-3802"><span class="linenos">3802</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-3803"><a href="#L-3803"><span class="linenos">3803</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a>
+</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</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-3806"><a href="#L-3806"><span class="linenos">3806</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-3807"><a href="#L-3807"><span class="linenos">3807</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-3808"><a href="#L-3808"><span class="linenos">3808</span></a>
-</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</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">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</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-3812"><a href="#L-3812"><span class="linenos">3812</span></a> <span class="p">)</span>
-</span><span id="L-3813"><a href="#L-3813"><span class="linenos">3813</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-3814"><a href="#L-3814"><span class="linenos">3814</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</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-3815"><a href="#L-3815"><span class="linenos">3815</span></a> <span class="p">}</span>
-</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</span></a>
-</span><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
-</span><span id="L-3818"><a href="#L-3818"><span class="linenos">3818</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-3819"><a href="#L-3819"><span class="linenos">3819</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-3820"><a href="#L-3820"><span class="linenos">3820</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-3821"><a href="#L-3821"><span class="linenos">3821</span></a>
-</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</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-3823"><a href="#L-3823"><span class="linenos">3823</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a>
-</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3826"><a href="#L-3826"><span class="linenos">3826</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-3827"><a href="#L-3827"><span class="linenos">3827</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="L-3828"><a href="#L-3828"><span class="linenos">3828</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</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-3830"><a href="#L-3830"><span class="linenos">3830</span></a> <span class="p">)</span>
-</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</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-3832"><a href="#L-3832"><span class="linenos">3832</span></a> <span class="k">return</span> <span class="n">aliases</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="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><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="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</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-3811"><a href="#L-3811"><span class="linenos">3811</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-3812"><a href="#L-3812"><span class="linenos">3812</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-3813"><a href="#L-3813"><span class="linenos">3813</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-3814"><a href="#L-3814"><span class="linenos">3814</span></a>
+</span><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</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-3816"><a href="#L-3816"><span class="linenos">3816</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-3818"><a href="#L-3818"><span class="linenos">3818</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-3819"><a href="#L-3819"><span class="linenos">3819</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-3820"><a href="#L-3820"><span class="linenos">3820</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-3821"><a href="#L-3821"><span class="linenos">3821</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-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="p">)</span>
+</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a>
+</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</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-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="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-3829"><a href="#L-3829"><span class="linenos">3829</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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">this</span><span class="p">,</span>
+</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</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-3832"><a href="#L-3832"><span class="linenos">3832</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-3833"><a href="#L-3833"><span class="linenos">3833</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</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-3835"><a href="#L-3835"><span class="linenos">3835</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="L-3836"><a href="#L-3836"><span class="linenos">3836</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</span></a> <span class="p">)</span>
</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a>
-</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a>
-</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</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-3844"><a href="#L-3844"><span class="linenos">3844</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-3845"><a href="#L-3845"><span class="linenos">3845</span></a> <span class="n">prefix_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-3846"><a href="#L-3846"><span class="linenos">3846</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-3847"><a href="#L-3847"><span class="linenos">3847</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-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">if</span> <span class="n">identifier</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">identifier</span>
-</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a>
-</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a>
-</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</span></a> <span class="k">if</span> <span class="n">prefix_tokens</span><span class="p">:</span>
-</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</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">prefix_tokens</span><span class="p">):</span>
-</span><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</span></a> <span class="n">prefix</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-3839"><a href="#L-3839"><span class="linenos">3839</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-3840"><a href="#L-3840"><span class="linenos">3840</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-3841"><a href="#L-3841"><span class="linenos">3841</span></a>
+</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</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">UNBOUNDED</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</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-3845"><a href="#L-3845"><span class="linenos">3845</span></a> <span class="p">)</span>
+</span><span id="L-3846"><a href="#L-3846"><span class="linenos">3846</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-3847"><a href="#L-3847"><span class="linenos">3847</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</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-3848"><a href="#L-3848"><span class="linenos">3848</span></a> <span class="p">}</span>
+</span><span id="L-3849"><a href="#L-3849"><span class="linenos">3849</span></a>
+</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</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-3852"><a href="#L-3852"><span class="linenos">3852</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-3853"><a href="#L-3853"><span class="linenos">3853</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-3854"><a href="#L-3854"><span class="linenos">3854</span></a>
+</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</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-3856"><a href="#L-3856"><span class="linenos">3856</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a>
-</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</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-3859"><a href="#L-3859"><span class="linenos">3859</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-3860"><a href="#L-3860"><span class="linenos">3860</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="n">prefix</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-3861"><a href="#L-3861"><span class="linenos">3861</span></a>
-</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a> <span class="k">return</span> <span class="kc">None</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">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-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3866"><a href="#L-3866"><span class="linenos">3866</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">STRING</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-3867"><a href="#L-3867"><span class="linenos">3867</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-3858"><a href="#L-3858"><span class="linenos">3858</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3859"><a href="#L-3859"><span class="linenos">3859</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-3860"><a href="#L-3860"><span class="linenos">3860</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</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-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="p">)</span>
+</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</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-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a>
+</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</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><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a>
-</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</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">Expression</span><span class="p">]:</span>
-</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</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-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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-3871"><a href="#L-3871"><span class="linenos">3871</span></a>
-</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</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-3873"><a href="#L-3873"><span class="linenos">3873</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3874"><a href="#L-3874"><span class="linenos">3874</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-3875"><a href="#L-3875"><span class="linenos">3875</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-3876"><a href="#L-3876"><span class="linenos">3876</span></a>
-</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</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-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3879"><a href="#L-3879"><span class="linenos">3879</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3880"><a href="#L-3880"><span class="linenos">3880</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-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="k">return</span> <span class="n">this</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_id_var</span><span class="p">(</span>
+</span><span id="L-3875"><a href="#L-3875"><span class="linenos">3875</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</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-3877"><a href="#L-3877"><span class="linenos">3877</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-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="n">prefix_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-3879"><a href="#L-3879"><span class="linenos">3879</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-3880"><a href="#L-3880"><span class="linenos">3880</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-3881"><a href="#L-3881"><span class="linenos">3881</span></a>
-</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
-</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="bp">self</span><span class="p">,</span> <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 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><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</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-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</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-3887"><a href="#L-3887"><span class="linenos">3887</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-3888"><a href="#L-3888"><span class="linenos">3888</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-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="p">):</span>
-</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3891"><a href="#L-3891"><span class="linenos">3891</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-3892"><a href="#L-3892"><span class="linenos">3892</span></a>
-</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</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="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-3894"><a href="#L-3894"><span class="linenos">3894</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">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_KEYWORDS</span><span class="p">:</span>
-</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</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-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a>
-</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</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-3900"><a href="#L-3900"><span class="linenos">3900</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-3882"><a href="#L-3882"><span class="linenos">3882</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a>
+</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">prefix_tokens</span><span class="p">:</span>
+</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</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">prefix_tokens</span><span class="p">):</span>
+</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="n">prefix</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-3890"><a href="#L-3890"><span class="linenos">3890</span></a>
+</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</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-3892"><a href="#L-3892"><span class="linenos">3892</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-3893"><a href="#L-3893"><span class="linenos">3893</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="n">prefix</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-3894"><a href="#L-3894"><span class="linenos">3894</span></a>
+</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a>
+</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</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-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3899"><a href="#L-3899"><span class="linenos">3899</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">STRING</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-3900"><a href="#L-3900"><span class="linenos">3900</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-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">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-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3904"><a href="#L-3904"><span class="linenos">3904</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-3905"><a href="#L-3905"><span class="linenos">3905</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a>
-</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</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-3908"><a href="#L-3908"><span class="linenos">3908</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3909"><a href="#L-3909"><span class="linenos">3909</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-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3911"><a href="#L-3911"><span class="linenos">3911</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-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="k">return</span> <span class="kc">None</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">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-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3916"><a href="#L-3916"><span class="linenos">3916</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-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="k">return</span> <span class="kc">None</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">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">Expression</span><span class="p">:</span>
-</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</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_BRACE</span><span class="p">)</span>
-</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</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-3922"><a href="#L-3922"><span class="linenos">3922</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-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">wrapped</span><span class="o">=</span><span class="n">wrapped</span><span class="p">)</span>
-</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a>
-</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</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-3926"><a href="#L-3926"><span class="linenos">3926</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-3927"><a href="#L-3927"><span class="linenos">3927</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-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
-</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a> <span class="k">return</span> <span class="n">placeholder</span>
-</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</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-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="k">return</span> <span class="kc">None</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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3934"><a href="#L-3934"><span class="linenos">3934</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-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3936"><a href="#L-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 class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</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-3938"><a href="#L-3938"><span class="linenos">3938</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_column</span><span class="p">)</span>
+</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</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">Expression</span><span class="p">]:</span>
+</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</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-3904"><a href="#L-3904"><span class="linenos">3904</span></a>
+</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</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-3906"><a href="#L-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</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-3907"><a href="#L-3907"><span class="linenos">3907</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-3908"><a href="#L-3908"><span class="linenos">3908</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-3909"><a href="#L-3909"><span class="linenos">3909</span></a>
+</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</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-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3913"><a href="#L-3913"><span class="linenos">3913</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-3914"><a href="#L-3914"><span class="linenos">3914</span></a>
+</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a> <span class="bp">self</span><span class="p">,</span> <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 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><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</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-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</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-3920"><a href="#L-3920"><span class="linenos">3920</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-3921"><a href="#L-3921"><span class="linenos">3921</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-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="p">):</span>
+</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3924"><a href="#L-3924"><span class="linenos">3924</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-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">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="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-3927"><a href="#L-3927"><span class="linenos">3927</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">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_KEYWORDS</span><span class="p">:</span>
+</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</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-3930"><a href="#L-3930"><span class="linenos">3930</span></a> <span class="k">return</span> <span class="kc">None</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">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-3933"><a href="#L-3933"><span class="linenos">3933</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-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">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-3936"><a href="#L-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">NULL</span><span class="p">):</span>
+</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</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-3938"><a href="#L-3938"><span class="linenos">3938</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a>
-</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3941"><a href="#L-3941"><span class="linenos">3941</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-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3944"><a href="#L-3944"><span class="linenos">3944</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-3945"><a href="#L-3945"><span class="linenos">3945</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-3940"><a href="#L-3940"><span class="linenos">3940</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-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3942"><a href="#L-3942"><span class="linenos">3942</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-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3944"><a href="#L-3944"><span class="linenos">3944</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-3945"><a href="#L-3945"><span class="linenos">3945</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a>
-</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="k">def</span> <span class="nf">_parse_csv</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="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-3949"><a href="#L-3949"><span class="linenos">3949</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-3950"><a href="#L-3950"><span class="linenos">3950</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-3951"><a href="#L-3951"><span class="linenos">3951</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-3952"><a href="#L-3952"><span class="linenos">3952</span></a>
-</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</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-3954"><a href="#L-3954"><span class="linenos">3954</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a> <span class="n">parse_result</span><span class="o">.</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><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a>
-</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</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-3958"><a href="#L-3958"><span class="linenos">3958</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-3959"><a href="#L-3959"><span class="linenos">3959</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-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="n">items</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_tokens</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 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-3965"><a href="#L-3965"><span class="linenos">3965</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-3966"><a href="#L-3966"><span class="linenos">3966</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-3967"><a href="#L-3967"><span class="linenos">3967</span></a>
-</span><span id="L-3968"><a href="#L-3968"><span class="linenos">3968</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-3969"><a href="#L-3969"><span class="linenos">3969</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-3970"><a href="#L-3970"><span class="linenos">3970</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-3971"><a href="#L-3971"><span class="linenos">3971</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</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-3973"><a href="#L-3973"><span class="linenos">3973</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-3974"><a href="#L-3974"><span class="linenos">3974</span></a> <span class="p">)</span>
-</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a>
-</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a>
-</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</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="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-3979"><a href="#L-3979"><span class="linenos">3979</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><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a>
-</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</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-3983"><a href="#L-3983"><span class="linenos">3983</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-3984"><a href="#L-3984"><span class="linenos">3984</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 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><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</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-3948"><a href="#L-3948"><span class="linenos">3948</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3949"><a href="#L-3949"><span class="linenos">3949</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-3950"><a href="#L-3950"><span class="linenos">3950</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</span></a>
+</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</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">Expression</span><span class="p">:</span>
+</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</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_BRACE</span><span class="p">)</span>
+</span><span id="L-3954"><a href="#L-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">_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-3955"><a href="#L-3955"><span class="linenos">3955</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-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">wrapped</span><span class="o">=</span><span class="n">wrapped</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="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-3959"><a href="#L-3959"><span class="linenos">3959</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-3960"><a href="#L-3960"><span class="linenos">3960</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-3961"><a href="#L-3961"><span class="linenos">3961</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</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-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a>
+</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3967"><a href="#L-3967"><span class="linenos">3967</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-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3969"><a href="#L-3969"><span class="linenos">3969</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3970"><a href="#L-3970"><span class="linenos">3970</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-3971"><a href="#L-3971"><span class="linenos">3971</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_column</span><span class="p">)</span>
+</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</span></a>
+</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3974"><a href="#L-3974"><span class="linenos">3974</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-3975"><a href="#L-3975"><span class="linenos">3975</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3977"><a href="#L-3977"><span class="linenos">3977</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-3978"><a href="#L-3978"><span class="linenos">3978</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-3979"><a href="#L-3979"><span class="linenos">3979</span></a>
+</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</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-3982"><a href="#L-3982"><span class="linenos">3982</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-3983"><a href="#L-3983"><span class="linenos">3983</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-3984"><a href="#L-3984"><span class="linenos">3984</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-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">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="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-3987"><a href="#L-3987"><span class="linenos">3987</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-3988"><a href="#L-3988"><span class="linenos">3988</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-3989"><a href="#L-3989"><span class="linenos">3989</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-3990"><a href="#L-3990"><span class="linenos">3990</span></a> <span class="k">return</span> <span class="n">parse_result</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="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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3993"><a href="#L-3993"><span class="linenos">3993</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 class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">())</span>
-</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a>
-</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</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-3996"><a href="#L-3996"><span class="linenos">3996</span></a> <span class="k">return</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-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <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-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="p">)</span>
-</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a>
-</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</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">Expression</span><span class="p">:</span>
-</span><span id="L-4001"><a href="#L-4001"><span class="linenos">4001</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</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-4003"><a href="#L-4003"><span class="linenos">4003</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-4004"><a href="#L-4004"><span class="linenos">4004</span></a>
-</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</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-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="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</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-4011"><a href="#L-4011"><span class="linenos">4011</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-4012"><a href="#L-4012"><span class="linenos">4012</span></a>
-</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</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-4015"><a href="#L-4015"><span class="linenos">4015</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-4016"><a href="#L-4016"><span class="linenos">4016</span></a> <span class="k">break</span>
-</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a>
-</span><span id="L-4018"><a href="#L-4018"><span class="linenos">4018</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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">Expression</span><span class="p">:</span>
-</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</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-3986"><a href="#L-3986"><span class="linenos">3986</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-3987"><a href="#L-3987"><span class="linenos">3987</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="n">parse_result</span><span class="o">.</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><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a>
+</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</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-3991"><a href="#L-3991"><span class="linenos">3991</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-3992"><a href="#L-3992"><span class="linenos">3992</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-3993"><a href="#L-3993"><span class="linenos">3993</span></a>
+</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a> <span class="k">return</span> <span class="n">items</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">def</span> <span class="nf">_parse_tokens</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="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-3998"><a href="#L-3998"><span class="linenos">3998</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-3999"><a href="#L-3999"><span class="linenos">3999</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-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">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-4002"><a href="#L-4002"><span class="linenos">4002</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-4003"><a href="#L-4003"><span class="linenos">4003</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-4004"><a href="#L-4004"><span class="linenos">4004</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</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-4006"><a href="#L-4006"><span class="linenos">4006</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-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="p">)</span>
+</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a>
+</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a>
+</span><span id="L-4011"><a href="#L-4011"><span class="linenos">4011</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="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-4012"><a href="#L-4012"><span class="linenos">4012</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><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">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</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-4016"><a href="#L-4016"><span class="linenos">4016</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-4017"><a href="#L-4017"><span class="linenos">4017</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 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><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="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="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-4020"><a href="#L-4020"><span class="linenos">4020</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-4021"><a href="#L-4021"><span class="linenos">4021</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-4022"><a href="#L-4022"><span class="linenos">4022</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-4023"><a href="#L-4023"><span class="linenos">4023</span></a> <span class="k">return</span> <span class="n">parse_result</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="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-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="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-4028"><a href="#L-4028"><span class="linenos">4028</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-4029"><a href="#L-4029"><span class="linenos">4029</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-4030"><a href="#L-4030"><span class="linenos">4030</span></a>
-</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4032"><a href="#L-4032"><span class="linenos">4032</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-4033"><a href="#L-4033"><span class="linenos">4033</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-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="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4037"><a href="#L-4037"><span class="linenos">4037</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4038"><a href="#L-4038"><span class="linenos">4038</span></a>
-</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</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-4040"><a href="#L-4040"><span class="linenos">4040</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-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span 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-4044"><a href="#L-4044"><span class="linenos">4044</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-4045"><a href="#L-4045"><span class="linenos">4045</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_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-4046"><a href="#L-4046"><span class="linenos">4046</span></a>
-</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</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-4049"><a href="#L-4049"><span class="linenos">4049</span></a>
-</span><span id="L-4050"><a href="#L-4050"><span class="linenos">4050</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</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-4052"><a href="#L-4052"><span class="linenos">4052</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-4053"><a href="#L-4053"><span class="linenos">4053</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-4054"><a href="#L-4054"><span class="linenos">4054</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-4055"><a href="#L-4055"><span class="linenos">4055</span></a> <span class="p">)</span>
-</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</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-4025"><a href="#L-4025"><span class="linenos">4025</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4026"><a href="#L-4026"><span class="linenos">4026</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 class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">())</span>
+</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a>
+</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</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-4029"><a href="#L-4029"><span class="linenos">4029</span></a> <span class="k">return</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-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <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-4031"><a href="#L-4031"><span class="linenos">4031</span></a> <span class="p">)</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="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">Expression</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="kc">None</span>
+</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</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-4036"><a href="#L-4036"><span class="linenos">4036</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-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="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-4039"><a href="#L-4039"><span class="linenos">4039</span></a>
+</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</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-4044"><a href="#L-4044"><span class="linenos">4044</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-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="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</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-4048"><a href="#L-4048"><span class="linenos">4048</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-4049"><a href="#L-4049"><span class="linenos">4049</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span 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-4052"><a href="#L-4052"><span class="linenos">4052</span></a>
+</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</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">Expression</span><span class="p">:</span>
+</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</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-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">return</span> <span class="n">expression</span>
+</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</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-4059"><a href="#L-4059"><span class="linenos">4059</span></a>
-</span><span id="L-4060"><a href="#L-4060"><span class="linenos">4060</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">Expression</span><span class="p">]:</span>
-</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</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-4062"><a href="#L-4062"><span class="linenos">4062</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-4063"><a href="#L-4063"><span class="linenos">4063</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-4064"><a href="#L-4064"><span class="linenos">4064</span></a> <span class="k">return</span> <span class="n">drop</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="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</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">Expression</span><span class="p">:</span>
-</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a> <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-4069"><a href="#L-4069"><span class="linenos">4069</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-4070"><a href="#L-4070"><span class="linenos">4070</span></a> <span class="p">)</span>
+</span><span id="L-4060"><a href="#L-4060"><span class="linenos">4060</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-4061"><a href="#L-4061"><span class="linenos">4061</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-4062"><a href="#L-4062"><span class="linenos">4062</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-4063"><a href="#L-4063"><span class="linenos">4063</span></a>
+</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4065"><a href="#L-4065"><span class="linenos">4065</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-4066"><a href="#L-4066"><span class="linenos">4066</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-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="k">if</span> <span class="n">is_rollback</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">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-4070"><a href="#L-4070"><span class="linenos">4070</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4073"><a href="#L-4073"><span class="linenos">4073</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4074"><a href="#L-4074"><span class="linenos">4074</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-4072"><a href="#L-4072"><span class="linenos">4072</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-4073"><a href="#L-4073"><span class="linenos">4073</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-4074"><a href="#L-4074"><span class="linenos">4074</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</span></a>
-</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</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-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">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-4080"><a href="#L-4080"><span class="linenos">4080</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-4081"><a href="#L-4081"><span class="linenos">4081</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><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</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-4077"><a href="#L-4077"><span class="linenos">4077</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-4078"><a href="#L-4078"><span class="linenos">4078</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_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-4079"><a href="#L-4079"><span class="linenos">4079</span></a>
+</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</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-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><span id="L-4084"><a href="#L-4084"><span class="linenos">4084</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-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="p">)</span>
-</span><span id="L-4086"><a href="#L-4086"><span class="linenos">4086</span></a>
-</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</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-4088"><a href="#L-4088"><span class="linenos">4088</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-4089"><a href="#L-4089"><span class="linenos">4089</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-4090"><a href="#L-4090"><span class="linenos">4090</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-4091"><a href="#L-4091"><span class="linenos">4091</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4093"><a href="#L-4093"><span class="linenos">4093</span></a>
-</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">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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4097"><a href="#L-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 class="o">-</span> <span class="mi">1</span>
+</span><span id="L-4083"><a href="#L-4083"><span class="linenos">4083</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="L-4084"><a href="#L-4084"><span class="linenos">4084</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-4085"><a href="#L-4085"><span class="linenos">4085</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-4086"><a href="#L-4086"><span class="linenos">4086</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-4087"><a href="#L-4087"><span class="linenos">4087</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-4088"><a href="#L-4088"><span class="linenos">4088</span></a> <span class="p">)</span>
+</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</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-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">return</span> <span class="n">expression</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">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">Expression</span><span class="p">]:</span>
+</span><span id="L-4094"><a href="#L-4094"><span class="linenos">4094</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-4095"><a href="#L-4095"><span class="linenos">4095</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-4096"><a href="#L-4096"><span class="linenos">4096</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-4097"><a href="#L-4097"><span class="linenos">4097</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a>
-</span><span id="L-4099"><a href="#L-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_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-4100"><a href="#L-4100"><span class="linenos">4100</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-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="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-4103"><a href="#L-4103"><span class="linenos">4103</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_column</span><span class="p">)</span>
+</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</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">Expression</span><span class="p">:</span>
+</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a> <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-4102"><a href="#L-4102"><span class="linenos">4102</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-4103"><a href="#L-4103"><span class="linenos">4103</span></a> <span class="p">)</span>
</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a>
-</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</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">Expression</span><span class="p">:</span>
-</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</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-4107"><a href="#L-4107"><span class="linenos">4107</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-4105"><a href="#L-4105"><span class="linenos">4105</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4106"><a href="#L-4106"><span class="linenos">4106</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</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-4108"><a href="#L-4108"><span class="linenos">4108</span></a>
-</span><span id="L-4109"><a href="#L-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_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-4110"><a href="#L-4110"><span class="linenos">4110</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_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-4112"><a href="#L-4112"><span class="linenos">4112</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4113"><a href="#L-4113"><span class="linenos">4113</span></a>
-</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</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-4115"><a href="#L-4115"><span class="linenos">4115</span></a> <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-4116"><a href="#L-4116"><span class="linenos">4116</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</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-4119"><a href="#L-4119"><span class="linenos">4119</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-4120"><a href="#L-4120"><span class="linenos">4120</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-4121"><a href="#L-4121"><span class="linenos">4121</span></a> <span class="p">)</span>
-</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a>
-</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4124"><a href="#L-4124"><span class="linenos">4124</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-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">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-4127"><a href="#L-4127"><span class="linenos">4127</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4128"><a href="#L-4128"><span class="linenos">4128</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-4129"><a href="#L-4129"><span class="linenos">4129</span></a>
-</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</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-4131"><a href="#L-4131"><span class="linenos">4131</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-4132"><a href="#L-4132"><span class="linenos">4132</span></a>
-</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</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">exp</span><span class="o">.</span><span class="n">Expression</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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</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">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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</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="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-4141"><a href="#L-4141"><span class="linenos">4141</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-4142"><a href="#L-4142"><span class="linenos">4142</span></a>
-</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</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-4144"><a href="#L-4144"><span class="linenos">4144</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-4145"><a href="#L-4145"><span class="linenos">4145</span></a>
-</span><span id="L-4146"><a href="#L-4146"><span class="linenos">4146</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-4147"><a href="#L-4147"><span class="linenos">4147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</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-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="n">parser</span><span class="p">:</span>
-</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</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-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="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-4154"><a href="#L-4154"><span class="linenos">4154</span></a> <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-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4157"><a href="#L-4157"><span class="linenos">4157</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a> <span class="p">)</span>
-</span><span id="L-4160"><a href="#L-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_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a>
-</span><span id="L-4162"><a href="#L-4162"><span class="linenos">4162</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">Expression</span><span class="p">:</span>
-</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</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-4164"><a href="#L-4164"><span class="linenos">4164</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-4109"><a href="#L-4109"><span class="linenos">4109</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-4110"><a href="#L-4110"><span class="linenos">4110</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-4111"><a href="#L-4111"><span class="linenos">4111</span></a>
+</span><span id="L-4112"><a href="#L-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_text_seq</span><span class="p">(</span><span class="s2">&quot;CHECK&quot;</span><span class="p">):</span>
+</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</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-4114"><a href="#L-4114"><span class="linenos">4114</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><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">return</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">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-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><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</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-4121"><a href="#L-4121"><span class="linenos">4121</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-4122"><a href="#L-4122"><span class="linenos">4122</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-4123"><a href="#L-4123"><span class="linenos">4123</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-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4125"><a href="#L-4125"><span class="linenos">4125</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span 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-4128"><a href="#L-4128"><span class="linenos">4128</span></a>
+</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4130"><a href="#L-4130"><span class="linenos">4130</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-4131"><a href="#L-4131"><span class="linenos">4131</span></a>
+</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</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-4133"><a href="#L-4133"><span class="linenos">4133</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-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="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-4136"><a href="#L-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_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><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</span></a>
+</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</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">Expression</span><span class="p">:</span>
+</span><span id="L-4139"><a href="#L-4139"><span class="linenos">4139</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-4140"><a href="#L-4140"><span class="linenos">4140</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-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="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-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">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-4144"><a href="#L-4144"><span class="linenos">4144</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-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4146"><a href="#L-4146"><span class="linenos">4146</span></a>
+</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">_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-4148"><a href="#L-4148"><span class="linenos">4148</span></a> <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-4149"><a href="#L-4149"><span class="linenos">4149</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</span></a> <span class="n">this</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">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-4152"><a href="#L-4152"><span class="linenos">4152</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-4153"><a href="#L-4153"><span class="linenos">4153</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-4154"><a href="#L-4154"><span class="linenos">4154</span></a> <span class="p">)</span>
+</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a>
+</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4157"><a href="#L-4157"><span class="linenos">4157</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-4158"><a href="#L-4158"><span class="linenos">4158</span></a>
+</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</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-4160"><a href="#L-4160"><span class="linenos">4160</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4161"><a href="#L-4161"><span class="linenos">4161</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-4162"><a href="#L-4162"><span class="linenos">4162</span></a>
+</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</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-4164"><a href="#L-4164"><span class="linenos">4164</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-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="bp">self</span><span 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-4167"><a href="#L-4167"><span class="linenos">4167</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-4168"><a href="#L-4168"><span class="linenos">4168</span></a>
-</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</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-4170"><a href="#L-4170"><span class="linenos">4170</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-4171"><a href="#L-4171"><span class="linenos">4171</span></a>
-</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</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-4174"><a href="#L-4174"><span class="linenos">4174</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-4175"><a href="#L-4175"><span class="linenos">4175</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-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="kc">False</span>
-</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</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-4179"><a href="#L-4179"><span class="linenos">4179</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-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="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-4166"><a href="#L-4166"><span class="linenos">4166</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</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-4168"><a href="#L-4168"><span class="linenos">4168</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4169"><a href="#L-4169"><span class="linenos">4169</span></a>
+</span><span id="L-4170"><a href="#L-4170"><span class="linenos">4170</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4171"><a href="#L-4171"><span class="linenos">4171</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-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="bp">self</span><span 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-4174"><a href="#L-4174"><span class="linenos">4174</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-4175"><a href="#L-4175"><span class="linenos">4175</span></a>
+</span><span id="L-4176"><a href="#L-4176"><span class="linenos">4176</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-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_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-4178"><a href="#L-4178"><span class="linenos">4178</span></a>
+</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</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-4180"><a href="#L-4180"><span class="linenos">4180</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4181"><a href="#L-4181"><span class="linenos">4181</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-4182"><a href="#L-4182"><span class="linenos">4182</span></a>
-</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">THEN</span><span class="p">)</span>
-</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a>
-</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4186"><a href="#L-4186"><span class="linenos">4186</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-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</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-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</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-4191"><a href="#L-4191"><span class="linenos">4191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</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-4193"><a href="#L-4193"><span class="linenos">4193</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-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="p">)</span>
-</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</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-4196"><a href="#L-4196"><span class="linenos">4196</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-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</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-4199"><a href="#L-4199"><span class="linenos">4199</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4200"><a href="#L-4200"><span class="linenos">4200</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-4201"><a href="#L-4201"><span class="linenos">4201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</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-4203"><a href="#L-4203"><span class="linenos">4203</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-4204"><a href="#L-4204"><span class="linenos">4204</span></a> <span class="p">)</span>
-</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</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-4206"><a href="#L-4206"><span class="linenos">4206</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-4207"><a href="#L-4207"><span class="linenos">4207</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a>
-</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</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">expression</span><span class="p">(</span>
-</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="L-4213"><a href="#L-4213"><span class="linenos">4213</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a> <span class="p">)</span>
-</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</span></a> <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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</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><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</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-4229"><a href="#L-4229"><span class="linenos">4229</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 class="c1"># type: ignore</span>
-</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</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-4232"><a href="#L-4232"><span class="linenos">4232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Show</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-4234"><a href="#L-4234"><span class="linenos">4234</span></a>
-</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</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-4237"><a href="#L-4237"><span class="linenos">4237</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-4238"><a href="#L-4238"><span class="linenos">4238</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-4239"><a href="#L-4239"><span class="linenos">4239</span></a>
-</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</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-4241"><a href="#L-4241"><span class="linenos">4241</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-4183"><a href="#L-4183"><span class="linenos">4183</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</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-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">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-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <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-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</span></a> <span class="p">)</span>
+</span><span id="L-4193"><a href="#L-4193"><span class="linenos">4193</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-4194"><a href="#L-4194"><span class="linenos">4194</span></a>
+</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</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">Expression</span><span class="p">:</span>
+</span><span id="L-4196"><a href="#L-4196"><span class="linenos">4196</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-4197"><a href="#L-4197"><span class="linenos">4197</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-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="bp">self</span><span 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-4200"><a href="#L-4200"><span class="linenos">4200</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-4201"><a href="#L-4201"><span class="linenos">4201</span></a>
+</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</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-4203"><a href="#L-4203"><span class="linenos">4203</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-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="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</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-4207"><a href="#L-4207"><span class="linenos">4207</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-4208"><a href="#L-4208"><span class="linenos">4208</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-4209"><a href="#L-4209"><span class="linenos">4209</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="kc">False</span>
+</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</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-4212"><a href="#L-4212"><span class="linenos">4212</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-4213"><a href="#L-4213"><span class="linenos">4213</span></a> <span class="p">)</span>
+</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</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-4215"><a href="#L-4215"><span class="linenos">4215</span></a>
+</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</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-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">if</span> <span class="bp">self</span><span 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-4219"><a href="#L-4219"><span class="linenos">4219</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-4220"><a href="#L-4220"><span class="linenos">4220</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</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-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</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-4224"><a href="#L-4224"><span class="linenos">4224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</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-4226"><a href="#L-4226"><span class="linenos">4226</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-4227"><a href="#L-4227"><span class="linenos">4227</span></a> <span class="p">)</span>
+</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</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-4229"><a href="#L-4229"><span class="linenos">4229</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-4230"><a href="#L-4230"><span class="linenos">4230</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</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-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="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-4234"><a href="#L-4234"><span class="linenos">4234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</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-4236"><a href="#L-4236"><span class="linenos">4236</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-4237"><a href="#L-4237"><span class="linenos">4237</span></a> <span class="p">)</span>
+</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</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-4239"><a href="#L-4239"><span class="linenos">4239</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-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</span></a>
-</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</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-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="k">if</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 class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</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">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</span></a> <span class="k">return</span> <span class="kc">None</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="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-4250"><a href="#L-4250"><span class="linenos">4250</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-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
-</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span>
-</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">,</span>
-</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="p">)</span>
-</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a>
-</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><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</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">this</span><span class="p">,</span>
-</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a> <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">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-4263"><a href="#L-4263"><span class="linenos">4263</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-4264"><a href="#L-4264"><span class="linenos">4264</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-4265"><a href="#L-4265"><span class="linenos">4265</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-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="p">)</span>
-</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <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-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</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-4271"><a href="#L-4271"><span class="linenos">4271</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-4272"><a href="#L-4272"><span class="linenos">4272</span></a> <span class="p">)</span>
-</span><span id="L-4273"><a href="#L-4273"><span class="linenos">4273</span></a>
-</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</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-4275"><a href="#L-4275"><span class="linenos">4275</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 class="c1"># type: ignore</span>
-</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</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-4243"><a href="#L-4243"><span class="linenos">4243</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="L-4250"><a href="#L-4250"><span class="linenos">4250</span></a> <span class="p">)</span>
+</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="p">)</span>
+</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a>
+</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <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-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</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">target</span><span class="p">,</span>
+</span><span id="L-4256"><a href="#L-4256"><span class="linenos">4256</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</span>
+</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a> <span class="p">)</span>
+</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a>
+</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</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-4262"><a href="#L-4262"><span class="linenos">4262</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 class="c1"># type: ignore</span>
+</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</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-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Show</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-4267"><a href="#L-4267"><span class="linenos">4267</span></a>
+</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</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-4270"><a href="#L-4270"><span class="linenos">4270</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-4271"><a href="#L-4271"><span class="linenos">4271</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-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">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-4274"><a href="#L-4274"><span class="linenos">4274</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-4275"><a href="#L-4275"><span class="linenos">4275</span></a>
+</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</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-4277"><a href="#L-4277"><span class="linenos">4277</span></a>
-</span><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</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="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-4279"><a href="#L-4279"><span class="linenos">4279</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-4280"><a href="#L-4280"><span class="linenos">4280</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 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><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</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_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-4279"><a href="#L-4279"><span class="linenos">4279</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-4280"><a href="#L-4280"><span class="linenos">4280</span></a> <span class="k">return</span> <span class="kc">None</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="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-4283"><a href="#L-4283"><span class="linenos">4283</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-4284"><a href="#L-4284"><span class="linenos">4284</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-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">return</span> <span class="n">set_</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_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">Expression</span><span class="p">]:</span>
-</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</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-4290"><a href="#L-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_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-4291"><a href="#L-4291"><span class="linenos">4291</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">this</span><span class="o">=</span><span class="n">option</span><span class="p">)</span>
-</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="k">return</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">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-4295"><a href="#L-4295"><span class="linenos">4295</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-4296"><a href="#L-4296"><span class="linenos">4296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</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-4298"><a href="#L-4298"><span class="linenos">4298</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-4299"><a href="#L-4299"><span class="linenos">4299</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-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">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</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-4303"><a href="#L-4303"><span class="linenos">4303</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-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">_curr</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="kc">None</span>
+</span><span id="L-4282"><a href="#L-4282"><span class="linenos">4282</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-4283"><a href="#L-4283"><span class="linenos">4283</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-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
+</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span>
+</span><span id="L-4286"><a href="#L-4286"><span class="linenos">4286</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">,</span>
+</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a> <span class="p">)</span>
+</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</span></a>
+</span><span id="L-4289"><a href="#L-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><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-4293"><a href="#L-4293"><span class="linenos">4293</span></a> <span class="p">)</span>
+</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</span></a>
+</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</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-4296"><a href="#L-4296"><span class="linenos">4296</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-4297"><a href="#L-4297"><span class="linenos">4297</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-4298"><a href="#L-4298"><span class="linenos">4298</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-4299"><a href="#L-4299"><span class="linenos">4299</span></a> <span class="p">)</span>
+</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</span></a> <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-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</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-4304"><a href="#L-4304"><span class="linenos">4304</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-4305"><a href="#L-4305"><span class="linenos">4305</span></a> <span class="p">)</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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</span></a> <span class="n">this</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 class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</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-4312"><a href="#L-4312"><span class="linenos">4312</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-4313"><a href="#L-4313"><span class="linenos">4313</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-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</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-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</span></a> <span class="k">break</span>
-</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</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-4320"><a href="#L-4320"><span class="linenos">4320</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</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-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</span></a>
-</span><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</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><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="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a>
-</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</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-4329"><a href="#L-4329"><span class="linenos">4329</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a>
-</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</span></a>
-</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</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-4336"><a href="#L-4336"><span class="linenos">4336</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-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="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-4340"><a href="#L-4340"><span class="linenos">4340</span></a> <span class="k">if</span> <span class="n">advance</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">_advance</span><span class="p">()</span>
-</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-4343"><a href="#L-4343"><span class="linenos">4343</span></a>
-</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a> <span class="k">return</span> <span class="kc">None</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">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-4347"><a href="#L-4347"><span class="linenos">4347</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-4348"><a href="#L-4348"><span class="linenos">4348</span></a> <span class="k">return</span> <span class="kc">None</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">_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-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</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-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a>
+</span><span id="L-4307"><a href="#L-4307"><span class="linenos">4307</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-4308"><a href="#L-4308"><span class="linenos">4308</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 class="c1"># type: ignore</span>
+</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</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-4310"><a href="#L-4310"><span class="linenos">4310</span></a>
+</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</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="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-4312"><a href="#L-4312"><span class="linenos">4312</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-4313"><a href="#L-4313"><span class="linenos">4313</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 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><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a>
+</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</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-4316"><a href="#L-4316"><span class="linenos">4316</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-4317"><a href="#L-4317"><span class="linenos">4317</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-4318"><a href="#L-4318"><span class="linenos">4318</span></a>
+</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a>
+</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</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">Expression</span><span class="p">]:</span>
+</span><span id="L-4322"><a href="#L-4322"><span class="linenos">4322</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-4323"><a href="#L-4323"><span class="linenos">4323</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-4324"><a href="#L-4324"><span class="linenos">4324</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">this</span><span class="o">=</span><span class="n">option</span><span class="p">)</span>
+</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a>
+</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</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-4328"><a href="#L-4328"><span class="linenos">4328</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-4329"><a href="#L-4329"><span class="linenos">4329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</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-4331"><a href="#L-4331"><span class="linenos">4331</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-4332"><a href="#L-4332"><span class="linenos">4332</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-4333"><a href="#L-4333"><span class="linenos">4333</span></a>
+</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</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-4336"><a href="#L-4336"><span class="linenos">4336</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-4337"><a href="#L-4337"><span class="linenos">4337</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-4338"><a href="#L-4338"><span class="linenos">4338</span></a> <span class="k">return</span> <span class="kc">None</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="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-4341"><a href="#L-4341"><span class="linenos">4341</span></a> <span class="n">this</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="c1"># The current token might be multiple words</span>
+</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</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-4345"><a href="#L-4345"><span class="linenos">4345</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-4346"><a href="#L-4346"><span class="linenos">4346</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-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</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-4349"><a href="#L-4349"><span class="linenos">4349</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a> <span class="k">break</span>
+</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</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-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="k">return</span> <span class="n">subparser</span>
+</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</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-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a>
-</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</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="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</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-4359"><a href="#L-4359"><span class="linenos">4359</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-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</span></a> <span class="n">expression</span><span class="o">.</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><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="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="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</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-4365"><a href="#L-4365"><span class="linenos">4365</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-4366"><a href="#L-4366"><span class="linenos">4366</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="n">expression</span><span class="o">.</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><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</span></a>
-</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</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-4370"><a href="#L-4370"><span class="linenos">4370</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-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</span></a> <span class="k">return</span> <span class="kc">False</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="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-4377"><a href="#L-4377"><span class="linenos">4377</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-4378"><a href="#L-4378"><span class="linenos">4378</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-4379"><a href="#L-4379"><span class="linenos">4379</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-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</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-4383"><a href="#L-4383"><span class="linenos">4383</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a>
-</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</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-4386"><a href="#L-4386"><span class="linenos">4386</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-4357"><a href="#L-4357"><span class="linenos">4357</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><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</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-4359"><a href="#L-4359"><span class="linenos">4359</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a>
+</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</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-4362"><a href="#L-4362"><span class="linenos">4362</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a>
+</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a>
+</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</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-4369"><a href="#L-4369"><span class="linenos">4369</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-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a>
+</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</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-4373"><a href="#L-4373"><span class="linenos">4373</span></a> <span class="k">if</span> <span class="n">advance</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">_advance</span><span class="p">()</span>
+</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a> <span class="k">return</span> <span class="kc">True</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="kc">None</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">_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-4380"><a href="#L-4380"><span class="linenos">4380</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-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="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-4384"><a href="#L-4384"><span class="linenos">4384</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</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-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="k">return</span> <span class="kc">True</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">return</span> <span class="kc">True</span>
+</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="k">return</span> <span class="kc">None</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">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-4391"><a href="#L-4391"><span class="linenos">4391</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-4392"><a href="#L-4392"><span class="linenos">4392</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-4393"><a href="#L-4393"><span class="linenos">4393</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-4394"><a href="#L-4394"><span class="linenos">4394</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-4395"><a href="#L-4395"><span class="linenos">4395</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-4396"><a href="#L-4396"><span class="linenos">4396</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</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><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a> <span class="k">if</span> <span class="n">table</span>
-</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="k">else</span> <span class="bp">self</span><span 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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a> <span class="p">)</span>
-</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</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">Identifier</span><span class="p">):</span>
-</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</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">Var</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">name</span><span class="p">)</span>
-</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a>
-</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">lambda_variables</span><span class="p">):</span>
-</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</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-4407"><a href="#L-4407"><span class="linenos">4407</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-4408"><a href="#L-4408"><span class="linenos">4408</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-4409"><a href="#L-4409"><span class="linenos">4409</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-4410"><a href="#L-4410"><span class="linenos">4410</span></a>
-</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</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-4412"><a href="#L-4412"><span class="linenos">4412</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-4413"><a href="#L-4413"><span class="linenos">4413</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-4414"><a href="#L-4414"><span class="linenos">4414</span></a> <span class="k">break</span>
-</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</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-4416"><a href="#L-4416"><span class="linenos">4416</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</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-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</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-4421"><a href="#L-4421"><span class="linenos">4421</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-4390"><a href="#L-4390"><span class="linenos">4390</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="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</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-4392"><a href="#L-4392"><span class="linenos">4392</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-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a> <span class="n">expression</span><span class="o">.</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><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="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="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</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-4398"><a href="#L-4398"><span class="linenos">4398</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-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a> <span class="n">expression</span><span class="o">.</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><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a>
+</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</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-4403"><a href="#L-4403"><span class="linenos">4403</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-4404"><a href="#L-4404"><span class="linenos">4404</span></a> <span class="k">if</span> <span class="n">advance</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="k">return</span> <span class="kc">True</span>
+</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a>
+</span><span id="L-4409"><a href="#L-4409"><span class="linenos">4409</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-4410"><a href="#L-4410"><span class="linenos">4410</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-4411"><a href="#L-4411"><span class="linenos">4411</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-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">_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-4413"><a href="#L-4413"><span class="linenos">4413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a> <span class="k">else</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">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4416"><a href="#L-4416"><span class="linenos">4416</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a>
+</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</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-4419"><a href="#L-4419"><span class="linenos">4419</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-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="k">return</span> <span class="kc">True</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">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-4424"><a href="#L-4424"><span class="linenos">4424</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-4425"><a href="#L-4425"><span class="linenos">4425</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-4426"><a href="#L-4426"><span class="linenos">4426</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-4427"><a href="#L-4427"><span class="linenos">4427</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-4428"><a href="#L-4428"><span class="linenos">4428</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-4429"><a href="#L-4429"><span class="linenos">4429</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</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><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</span></a> <span class="k">if</span> <span class="n">table</span>
+</span><span id="L-4432"><a href="#L-4432"><span class="linenos">4432</span></a> <span class="k">else</span> <span class="bp">self</span><span 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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a> <span class="p">)</span>
+</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</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">Identifier</span><span class="p">):</span>
+</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</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">Var</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">name</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="n">this</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="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">lambda_variables</span><span class="p">):</span>
+</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</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-4440"><a href="#L-4440"><span class="linenos">4440</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-4441"><a href="#L-4441"><span class="linenos">4441</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-4442"><a href="#L-4442"><span class="linenos">4442</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-4443"><a href="#L-4443"><span class="linenos">4443</span></a>
+</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</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-4445"><a href="#L-4445"><span class="linenos">4445</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-4446"><a href="#L-4446"><span class="linenos">4446</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-4447"><a href="#L-4447"><span class="linenos">4447</span></a> <span class="k">break</span>
+</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</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-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</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-4451"><a href="#L-4451"><span class="linenos">4451</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</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-4454"><a href="#L-4454"><span class="linenos">4454</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -4775,4193 +4808,4226 @@
</span><span id="Parser-233"><a href="#Parser-233"><span class="linenos"> 233</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
</span><span id="Parser-234"><a href="#Parser-234"><span class="linenos"> 234</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
</span><span id="Parser-235"><a href="#Parser-235"><span class="linenos"> 235</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
-</span><span id="Parser-236"><a href="#Parser-236"><span class="linenos"> 236</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
-</span><span id="Parser-237"><a href="#Parser-237"><span class="linenos"> 237</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
-</span><span id="Parser-238"><a href="#Parser-238"><span class="linenos"> 238</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="Parser-239"><a href="#Parser-239"><span class="linenos"> 239</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
-</span><span id="Parser-240"><a href="#Parser-240"><span class="linenos"> 240</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
-</span><span id="Parser-241"><a href="#Parser-241"><span class="linenos"> 241</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
-</span><span id="Parser-242"><a href="#Parser-242"><span class="linenos"> 242</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="Parser-243"><a href="#Parser-243"><span class="linenos"> 243</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
-</span><span id="Parser-244"><a href="#Parser-244"><span class="linenos"> 244</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
-</span><span id="Parser-245"><a href="#Parser-245"><span class="linenos"> 245</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
-</span><span id="Parser-246"><a href="#Parser-246"><span class="linenos"> 246</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
-</span><span id="Parser-247"><a href="#Parser-247"><span class="linenos"> 247</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
-</span><span id="Parser-248"><a href="#Parser-248"><span class="linenos"> 248</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
-</span><span id="Parser-249"><a href="#Parser-249"><span class="linenos"> 249</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
-</span><span id="Parser-250"><a href="#Parser-250"><span class="linenos"> 250</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
-</span><span id="Parser-251"><a href="#Parser-251"><span class="linenos"> 251</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
-</span><span id="Parser-252"><a href="#Parser-252"><span class="linenos"> 252</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
-</span><span id="Parser-253"><a href="#Parser-253"><span class="linenos"> 253</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
-</span><span id="Parser-254"><a href="#Parser-254"><span class="linenos"> 254</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
-</span><span id="Parser-255"><a href="#Parser-255"><span class="linenos"> 255</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
-</span><span id="Parser-256"><a href="#Parser-256"><span class="linenos"> 256</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="Parser-257"><a href="#Parser-257"><span class="linenos"> 257</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
-</span><span id="Parser-258"><a href="#Parser-258"><span class="linenos"> 258</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
-</span><span id="Parser-259"><a href="#Parser-259"><span class="linenos"> 259</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
-</span><span id="Parser-260"><a href="#Parser-260"><span class="linenos"> 260</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="Parser-261"><a href="#Parser-261"><span class="linenos"> 261</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
-</span><span id="Parser-262"><a href="#Parser-262"><span class="linenos"> 262</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="Parser-263"><a href="#Parser-263"><span class="linenos"> 263</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
-</span><span id="Parser-264"><a href="#Parser-264"><span class="linenos"> 264</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
-</span><span id="Parser-265"><a href="#Parser-265"><span class="linenos"> 265</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
-</span><span id="Parser-266"><a href="#Parser-266"><span class="linenos"> 266</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
-</span><span id="Parser-267"><a href="#Parser-267"><span class="linenos"> 267</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
-</span><span id="Parser-268"><a href="#Parser-268"><span class="linenos"> 268</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
-</span><span id="Parser-269"><a href="#Parser-269"><span class="linenos"> 269</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
-</span><span id="Parser-270"><a href="#Parser-270"><span class="linenos"> 270</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
-</span><span id="Parser-271"><a href="#Parser-271"><span class="linenos"> 271</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
-</span><span id="Parser-272"><a href="#Parser-272"><span class="linenos"> 272</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
-</span><span id="Parser-273"><a href="#Parser-273"><span class="linenos"> 273</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="Parser-274"><a href="#Parser-274"><span class="linenos"> 274</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
-</span><span id="Parser-275"><a href="#Parser-275"><span class="linenos"> 275</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
-</span><span id="Parser-276"><a href="#Parser-276"><span class="linenos"> 276</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="Parser-277"><a href="#Parser-277"><span class="linenos"> 277</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
-</span><span id="Parser-278"><a href="#Parser-278"><span class="linenos"> 278</span></a> <span class="p">}</span>
-</span><span id="Parser-279"><a href="#Parser-279"><span class="linenos"> 279</span></a>
-</span><span id="Parser-280"><a href="#Parser-280"><span class="linenos"> 280</span></a> <span class="n">INTERVAL_VARS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-281"><a href="#Parser-281"><span class="linenos"> 281</span></a>
-</span><span id="Parser-282"><a href="#Parser-282"><span class="linenos"> 282</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
-</span><span id="Parser-283"><a href="#Parser-283"><span class="linenos"> 283</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
-</span><span id="Parser-284"><a href="#Parser-284"><span class="linenos"> 284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
-</span><span id="Parser-285"><a href="#Parser-285"><span class="linenos"> 285</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="Parser-286"><a href="#Parser-286"><span class="linenos"> 286</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
-</span><span id="Parser-287"><a href="#Parser-287"><span class="linenos"> 287</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
-</span><span id="Parser-288"><a href="#Parser-288"><span class="linenos"> 288</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="Parser-289"><a href="#Parser-289"><span class="linenos"> 289</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="Parser-290"><a href="#Parser-290"><span class="linenos"> 290</span></a> <span class="p">}</span>
-</span><span id="Parser-291"><a href="#Parser-291"><span class="linenos"> 291</span></a>
-</span><span id="Parser-292"><a href="#Parser-292"><span class="linenos"> 292</span></a> <span class="n">COMMENT_TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-293"><a href="#Parser-293"><span class="linenos"> 293</span></a>
-</span><span id="Parser-294"><a href="#Parser-294"><span class="linenos"> 294</span></a> <span class="n">UPDATE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-295"><a href="#Parser-295"><span class="linenos"> 295</span></a>
-</span><span id="Parser-296"><a href="#Parser-296"><span class="linenos"> 296</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</span><span class="p">}</span>
-</span><span id="Parser-297"><a href="#Parser-297"><span class="linenos"> 297</span></a>
-</span><span id="Parser-298"><a href="#Parser-298"><span class="linenos"> 298</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-299"><a href="#Parser-299"><span class="linenos"> 299</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Parser-300"><a href="#Parser-300"><span class="linenos"> 300</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
-</span><span id="Parser-301"><a href="#Parser-301"><span class="linenos"> 301</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
-</span><span id="Parser-302"><a href="#Parser-302"><span class="linenos"> 302</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
-</span><span id="Parser-303"><a href="#Parser-303"><span class="linenos"> 303</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
-</span><span id="Parser-304"><a href="#Parser-304"><span class="linenos"> 304</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
-</span><span id="Parser-305"><a href="#Parser-305"><span class="linenos"> 305</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
-</span><span id="Parser-306"><a href="#Parser-306"><span class="linenos"> 306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
-</span><span id="Parser-307"><a href="#Parser-307"><span class="linenos"> 307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
-</span><span id="Parser-308"><a href="#Parser-308"><span class="linenos"> 308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
-</span><span id="Parser-309"><a href="#Parser-309"><span class="linenos"> 309</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
-</span><span id="Parser-310"><a href="#Parser-310"><span class="linenos"> 310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
-</span><span id="Parser-311"><a href="#Parser-311"><span class="linenos"> 311</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
-</span><span id="Parser-312"><a href="#Parser-312"><span class="linenos"> 312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
-</span><span id="Parser-313"><a href="#Parser-313"><span class="linenos"> 313</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
-</span><span id="Parser-314"><a href="#Parser-314"><span class="linenos"> 314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
-</span><span id="Parser-315"><a href="#Parser-315"><span class="linenos"> 315</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
-</span><span id="Parser-316"><a href="#Parser-316"><span class="linenos"> 316</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
-</span><span id="Parser-317"><a href="#Parser-317"><span class="linenos"> 317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
-</span><span id="Parser-318"><a href="#Parser-318"><span class="linenos"> 318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
-</span><span id="Parser-319"><a href="#Parser-319"><span class="linenos"> 319</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
-</span><span id="Parser-320"><a href="#Parser-320"><span class="linenos"> 320</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
-</span><span id="Parser-321"><a href="#Parser-321"><span class="linenos"> 321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="Parser-322"><a href="#Parser-322"><span class="linenos"> 322</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="Parser-323"><a href="#Parser-323"><span class="linenos"> 323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
-</span><span id="Parser-324"><a href="#Parser-324"><span class="linenos"> 324</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
-</span><span id="Parser-325"><a href="#Parser-325"><span class="linenos"> 325</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
-</span><span id="Parser-326"><a href="#Parser-326"><span class="linenos"> 326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="Parser-327"><a href="#Parser-327"><span class="linenos"> 327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Parser-328"><a href="#Parser-328"><span class="linenos"> 328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
-</span><span id="Parser-329"><a href="#Parser-329"><span class="linenos"> 329</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
-</span><span id="Parser-330"><a href="#Parser-330"><span class="linenos"> 330</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
-</span><span id="Parser-331"><a href="#Parser-331"><span class="linenos"> 331</span></a> <span class="p">}</span>
-</span><span id="Parser-332"><a href="#Parser-332"><span class="linenos"> 332</span></a>
-</span><span id="Parser-333"><a href="#Parser-333"><span class="linenos"> 333</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-334"><a href="#Parser-334"><span class="linenos"> 334</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
-</span><span id="Parser-335"><a href="#Parser-335"><span class="linenos"> 335</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
-</span><span id="Parser-336"><a href="#Parser-336"><span class="linenos"> 336</span></a> <span class="p">}</span>
-</span><span id="Parser-337"><a href="#Parser-337"><span class="linenos"> 337</span></a>
-</span><span id="Parser-338"><a href="#Parser-338"><span class="linenos"> 338</span></a> <span class="n">EQUALITY</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-339"><a href="#Parser-339"><span class="linenos"> 339</span></a> <span class="n">TokenType</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">EQ</span><span class="p">,</span>
-</span><span id="Parser-340"><a href="#Parser-340"><span class="linenos"> 340</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
-</span><span id="Parser-341"><a href="#Parser-341"><span class="linenos"> 341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">,</span>
-</span><span id="Parser-342"><a href="#Parser-342"><span class="linenos"> 342</span></a> <span class="p">}</span>
-</span><span id="Parser-343"><a href="#Parser-343"><span class="linenos"> 343</span></a>
-</span><span id="Parser-344"><a href="#Parser-344"><span class="linenos"> 344</span></a> <span class="n">COMPARISON</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-345"><a href="#Parser-345"><span class="linenos"> 345</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
-</span><span id="Parser-346"><a href="#Parser-346"><span class="linenos"> 346</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
-</span><span id="Parser-347"><a href="#Parser-347"><span class="linenos"> 347</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
-</span><span id="Parser-348"><a href="#Parser-348"><span class="linenos"> 348</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
-</span><span id="Parser-349"><a href="#Parser-349"><span class="linenos"> 349</span></a> <span class="p">}</span>
-</span><span id="Parser-350"><a href="#Parser-350"><span class="linenos"> 350</span></a>
-</span><span id="Parser-351"><a href="#Parser-351"><span class="linenos"> 351</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-352"><a href="#Parser-352"><span class="linenos"> 352</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">,</span>
-</span><span id="Parser-353"><a href="#Parser-353"><span class="linenos"> 353</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">BitwiseXor</span><span class="p">,</span>
-</span><span id="Parser-354"><a href="#Parser-354"><span class="linenos"> 354</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">,</span>
-</span><span id="Parser-355"><a href="#Parser-355"><span class="linenos"> 355</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
-</span><span id="Parser-356"><a href="#Parser-356"><span class="linenos"> 356</span></a> <span class="p">}</span>
-</span><span id="Parser-357"><a href="#Parser-357"><span class="linenos"> 357</span></a>
-</span><span id="Parser-358"><a href="#Parser-358"><span class="linenos"> 358</span></a> <span class="n">TERM</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-359"><a href="#Parser-359"><span class="linenos"> 359</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">,</span>
-</span><span id="Parser-360"><a href="#Parser-360"><span class="linenos"> 360</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span>
-</span><span id="Parser-361"><a href="#Parser-361"><span class="linenos"> 361</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</span><span class="p">,</span>
-</span><span id="Parser-362"><a href="#Parser-362"><span class="linenos"> 362</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Collate</span><span class="p">,</span>
-</span><span id="Parser-363"><a href="#Parser-363"><span class="linenos"> 363</span></a> <span class="p">}</span>
-</span><span id="Parser-364"><a href="#Parser-364"><span class="linenos"> 364</span></a>
-</span><span id="Parser-365"><a href="#Parser-365"><span class="linenos"> 365</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-366"><a href="#Parser-366"><span class="linenos"> 366</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">,</span>
-</span><span id="Parser-367"><a href="#Parser-367"><span class="linenos"> 367</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distance</span><span class="p">,</span>
-</span><span id="Parser-368"><a href="#Parser-368"><span class="linenos"> 368</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</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-369"><a href="#Parser-369"><span class="linenos"> 369</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">,</span>
-</span><span id="Parser-370"><a href="#Parser-370"><span class="linenos"> 370</span></a> <span class="p">}</span>
-</span><span id="Parser-371"><a href="#Parser-371"><span class="linenos"> 371</span></a>
-</span><span id="Parser-372"><a href="#Parser-372"><span class="linenos"> 372</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-373"><a href="#Parser-373"><span class="linenos"> 373</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
-</span><span id="Parser-374"><a href="#Parser-374"><span class="linenos"> 374</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
-</span><span id="Parser-375"><a href="#Parser-375"><span class="linenos"> 375</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
-</span><span id="Parser-376"><a href="#Parser-376"><span class="linenos"> 376</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
-</span><span id="Parser-377"><a href="#Parser-377"><span class="linenos"> 377</span></a> <span class="p">}</span>
-</span><span id="Parser-378"><a href="#Parser-378"><span class="linenos"> 378</span></a>
-</span><span id="Parser-379"><a href="#Parser-379"><span class="linenos"> 379</span></a> <span class="n">SET_OPERATIONS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-380"><a href="#Parser-380"><span class="linenos"> 380</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
-</span><span id="Parser-381"><a href="#Parser-381"><span class="linenos"> 381</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
-</span><span id="Parser-382"><a href="#Parser-382"><span class="linenos"> 382</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
-</span><span id="Parser-383"><a href="#Parser-383"><span class="linenos"> 383</span></a> <span class="p">}</span>
-</span><span id="Parser-384"><a href="#Parser-384"><span class="linenos"> 384</span></a>
-</span><span id="Parser-385"><a href="#Parser-385"><span class="linenos"> 385</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-386"><a href="#Parser-386"><span class="linenos"> 386</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
-</span><span id="Parser-387"><a href="#Parser-387"><span class="linenos"> 387</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
-</span><span id="Parser-388"><a href="#Parser-388"><span class="linenos"> 388</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
-</span><span id="Parser-389"><a href="#Parser-389"><span class="linenos"> 389</span></a> <span class="p">}</span>
-</span><span id="Parser-390"><a href="#Parser-390"><span class="linenos"> 390</span></a>
-</span><span id="Parser-391"><a href="#Parser-391"><span class="linenos"> 391</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-392"><a href="#Parser-392"><span class="linenos"> 392</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
-</span><span id="Parser-393"><a href="#Parser-393"><span class="linenos"> 393</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
-</span><span id="Parser-394"><a href="#Parser-394"><span class="linenos"> 394</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
-</span><span id="Parser-395"><a href="#Parser-395"><span class="linenos"> 395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
-</span><span id="Parser-396"><a href="#Parser-396"><span class="linenos"> 396</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
-</span><span id="Parser-397"><a href="#Parser-397"><span class="linenos"> 397</span></a> <span class="p">}</span>
-</span><span id="Parser-398"><a href="#Parser-398"><span class="linenos"> 398</span></a>
-</span><span id="Parser-399"><a href="#Parser-399"><span class="linenos"> 399</span></a> <span class="n">LAMBDAS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-400"><a href="#Parser-400"><span class="linenos"> 400</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-401"><a href="#Parser-401"><span class="linenos"> 401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">,</span>
-</span><span id="Parser-402"><a href="#Parser-402"><span class="linenos"> 402</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</span><span class="p">(</span>
-</span><span id="Parser-403"><a href="#Parser-403"><span class="linenos"> 403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="Parser-404"><a href="#Parser-404"><span class="linenos"> 404</span></a> <span class="p">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">},</span>
-</span><span id="Parser-405"><a href="#Parser-405"><span class="linenos"> 405</span></a> <span class="p">),</span>
-</span><span id="Parser-406"><a href="#Parser-406"><span class="linenos"> 406</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-407"><a href="#Parser-407"><span class="linenos"> 407</span></a> <span class="p">),</span>
-</span><span id="Parser-408"><a href="#Parser-408"><span class="linenos"> 408</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-409"><a href="#Parser-409"><span class="linenos"> 409</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
-</span><span id="Parser-410"><a href="#Parser-410"><span class="linenos"> 410</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expressions</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="p">),</span>
-</span><span id="Parser-411"><a href="#Parser-411"><span class="linenos"> 411</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-412"><a href="#Parser-412"><span class="linenos"> 412</span></a> <span class="p">),</span>
-</span><span id="Parser-413"><a href="#Parser-413"><span class="linenos"> 413</span></a> <span class="p">}</span>
-</span><span id="Parser-414"><a href="#Parser-414"><span class="linenos"> 414</span></a>
-</span><span id="Parser-415"><a href="#Parser-415"><span class="linenos"> 415</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-416"><a href="#Parser-416"><span class="linenos"> 416</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-417"><a href="#Parser-417"><span class="linenos"> 417</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</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-418"><a href="#Parser-418"><span class="linenos"> 418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
-</span><span id="Parser-419"><a href="#Parser-419"><span class="linenos"> 419</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-420"><a href="#Parser-420"><span class="linenos"> 420</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
-</span><span id="Parser-421"><a href="#Parser-421"><span class="linenos"> 421</span></a> <span class="p">),</span>
-</span><span id="Parser-422"><a href="#Parser-422"><span class="linenos"> 422</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-423"><a href="#Parser-423"><span class="linenos"> 423</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
-</span><span id="Parser-424"><a href="#Parser-424"><span class="linenos"> 424</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-425"><a href="#Parser-425"><span class="linenos"> 425</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-426"><a href="#Parser-426"><span class="linenos"> 426</span></a> <span class="p">),</span>
-</span><span id="Parser-427"><a href="#Parser-427"><span class="linenos"> 427</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-428"><a href="#Parser-428"><span class="linenos"> 428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
-</span><span id="Parser-429"><a href="#Parser-429"><span class="linenos"> 429</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-430"><a href="#Parser-430"><span class="linenos"> 430</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-431"><a href="#Parser-431"><span class="linenos"> 431</span></a> <span class="p">),</span>
-</span><span id="Parser-432"><a href="#Parser-432"><span class="linenos"> 432</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-433"><a href="#Parser-433"><span class="linenos"> 433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
-</span><span id="Parser-434"><a href="#Parser-434"><span class="linenos"> 434</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-435"><a href="#Parser-435"><span class="linenos"> 435</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-436"><a href="#Parser-436"><span class="linenos"> 436</span></a> <span class="p">),</span>
-</span><span id="Parser-437"><a href="#Parser-437"><span class="linenos"> 437</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-438"><a href="#Parser-438"><span class="linenos"> 438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
-</span><span id="Parser-439"><a href="#Parser-439"><span class="linenos"> 439</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-440"><a href="#Parser-440"><span class="linenos"> 440</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-441"><a href="#Parser-441"><span class="linenos"> 441</span></a> <span class="p">),</span>
-</span><span id="Parser-442"><a href="#Parser-442"><span class="linenos"> 442</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">key</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-443"><a href="#Parser-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><span id="Parser-444"><a href="#Parser-444"><span class="linenos"> 444</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-445"><a href="#Parser-445"><span class="linenos"> 445</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
-</span><span id="Parser-446"><a href="#Parser-446"><span class="linenos"> 446</span></a> <span class="p">),</span>
-</span><span id="Parser-447"><a href="#Parser-447"><span class="linenos"> 447</span></a> <span class="p">}</span>
-</span><span id="Parser-448"><a href="#Parser-448"><span class="linenos"> 448</span></a>
-</span><span id="Parser-449"><a href="#Parser-449"><span class="linenos"> 449</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-450"><a href="#Parser-450"><span class="linenos"> 450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</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_column</span><span class="p">(),</span>
-</span><span id="Parser-451"><a href="#Parser-451"><span class="linenos"> 451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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_types</span><span class="p">(),</span>
-</span><span id="Parser-452"><a href="#Parser-452"><span class="linenos"> 452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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_from</span><span class="p">(),</span>
-</span><span id="Parser-453"><a href="#Parser-453"><span class="linenos"> 453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</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_group</span><span class="p">(),</span>
-</span><span id="Parser-454"><a href="#Parser-454"><span class="linenos"> 454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</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_id_var</span><span class="p">(),</span>
-</span><span id="Parser-455"><a href="#Parser-455"><span class="linenos"> 455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</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_lateral</span><span class="p">(),</span>
-</span><span id="Parser-456"><a href="#Parser-456"><span class="linenos"> 456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</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_join</span><span class="p">(),</span>
-</span><span id="Parser-457"><a href="#Parser-457"><span class="linenos"> 457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</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_order</span><span class="p">(),</span>
-</span><span id="Parser-458"><a href="#Parser-458"><span class="linenos"> 458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">),</span>
-</span><span id="Parser-459"><a href="#Parser-459"><span class="linenos"> 459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sort</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">),</span>
-</span><span id="Parser-460"><a href="#Parser-460"><span class="linenos"> 460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</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_lambda</span><span class="p">(),</span>
-</span><span id="Parser-461"><a href="#Parser-461"><span class="linenos"> 461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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_limit</span><span class="p">(),</span>
-</span><span id="Parser-462"><a href="#Parser-462"><span class="linenos"> 462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</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_offset</span><span class="p">(),</span>
-</span><span id="Parser-463"><a href="#Parser-463"><span class="linenos"> 463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</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_table_alias</span><span class="p">(),</span>
-</span><span id="Parser-464"><a href="#Parser-464"><span class="linenos"> 464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
-</span><span id="Parser-465"><a href="#Parser-465"><span class="linenos"> 465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</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_conjunction</span><span class="p">(),</span>
-</span><span id="Parser-466"><a href="#Parser-466"><span class="linenos"> 466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</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_statement</span><span class="p">(),</span>
-</span><span id="Parser-467"><a href="#Parser-467"><span class="linenos"> 467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</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_properties</span><span class="p">(),</span>
-</span><span id="Parser-468"><a href="#Parser-468"><span class="linenos"> 468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</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_where</span><span class="p">(),</span>
-</span><span id="Parser-469"><a href="#Parser-469"><span class="linenos"> 469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</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_ordered</span><span class="p">(),</span>
-</span><span id="Parser-470"><a href="#Parser-470"><span class="linenos"> 470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Having</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_having</span><span class="p">(),</span>
-</span><span id="Parser-471"><a href="#Parser-471"><span class="linenos"> 471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</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_with</span><span class="p">(),</span>
-</span><span id="Parser-472"><a href="#Parser-472"><span class="linenos"> 472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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_named_window</span><span class="p">(),</span>
-</span><span id="Parser-473"><a href="#Parser-473"><span class="linenos"> 473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Qualify</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_qualify</span><span class="p">(),</span>
-</span><span id="Parser-474"><a href="#Parser-474"><span class="linenos"> 474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</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_returning</span><span class="p">(),</span>
-</span><span id="Parser-475"><a href="#Parser-475"><span class="linenos"> 475</span></a> <span class="s2">&quot;JOIN_TYPE&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_join_side_and_kind</span><span class="p">(),</span>
-</span><span id="Parser-476"><a href="#Parser-476"><span class="linenos"> 476</span></a> <span class="p">}</span>
-</span><span id="Parser-477"><a href="#Parser-477"><span class="linenos"> 477</span></a>
-</span><span id="Parser-478"><a href="#Parser-478"><span class="linenos"> 478</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-479"><a href="#Parser-479"><span class="linenos"> 479</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</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_alter</span><span class="p">(),</span>
-</span><span id="Parser-480"><a href="#Parser-480"><span class="linenos"> 480</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</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_transaction</span><span class="p">(),</span>
-</span><span id="Parser-481"><a href="#Parser-481"><span class="linenos"> 481</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</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_cache</span><span class="p">(),</span>
-</span><span id="Parser-482"><a href="#Parser-482"><span class="linenos"> 482</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</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="Parser-483"><a href="#Parser-483"><span class="linenos"> 483</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</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_comment</span><span class="p">(),</span>
-</span><span id="Parser-484"><a href="#Parser-484"><span class="linenos"> 484</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</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_create</span><span class="p">(),</span>
-</span><span id="Parser-485"><a href="#Parser-485"><span class="linenos"> 485</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</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_delete</span><span class="p">(),</span>
-</span><span id="Parser-486"><a href="#Parser-486"><span class="linenos"> 486</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</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_describe</span><span class="p">(),</span>
-</span><span id="Parser-487"><a href="#Parser-487"><span class="linenos"> 487</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</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_describe</span><span class="p">(),</span>
-</span><span id="Parser-488"><a href="#Parser-488"><span class="linenos"> 488</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</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_drop</span><span class="p">(),</span>
-</span><span id="Parser-489"><a href="#Parser-489"><span class="linenos"> 489</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="Parser-490"><a href="#Parser-490"><span class="linenos"> 490</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</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_insert</span><span class="p">(),</span>
-</span><span id="Parser-491"><a href="#Parser-491"><span class="linenos"> 491</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</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_load_data</span><span class="p">(),</span>
-</span><span id="Parser-492"><a href="#Parser-492"><span class="linenos"> 492</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</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_merge</span><span class="p">(),</span>
-</span><span id="Parser-493"><a href="#Parser-493"><span class="linenos"> 493</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</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">Pragma</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="Parser-494"><a href="#Parser-494"><span class="linenos"> 494</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</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="Parser-495"><a href="#Parser-495"><span class="linenos"> 495</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</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_set</span><span class="p">(),</span>
-</span><span id="Parser-496"><a href="#Parser-496"><span class="linenos"> 496</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</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_uncache</span><span class="p">(),</span>
-</span><span id="Parser-497"><a href="#Parser-497"><span class="linenos"> 497</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</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_update</span><span class="p">(),</span>
-</span><span id="Parser-498"><a href="#Parser-498"><span class="linenos"> 498</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</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><span id="Parser-499"><a href="#Parser-499"><span class="linenos"> 499</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
-</span><span id="Parser-500"><a href="#Parser-500"><span class="linenos"> 500</span></a> <span class="n">kind</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;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;WAREHOUSE&quot;</span><span class="p">,</span> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">))</span>
-</span><span id="Parser-501"><a href="#Parser-501"><span class="linenos"> 501</span></a> <span class="ow">and</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-502"><a href="#Parser-502"><span class="linenos"> 502</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">False</span><span class="p">),</span>
-</span><span id="Parser-503"><a href="#Parser-503"><span class="linenos"> 503</span></a> <span class="p">),</span>
-</span><span id="Parser-504"><a href="#Parser-504"><span class="linenos"> 504</span></a> <span class="p">}</span>
-</span><span id="Parser-505"><a href="#Parser-505"><span class="linenos"> 505</span></a>
-</span><span id="Parser-506"><a href="#Parser-506"><span class="linenos"> 506</span></a> <span class="n">UNARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-507"><a href="#Parser-507"><span class="linenos"> 507</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</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_unary</span><span class="p">(),</span> <span class="c1"># Unary + is handled as a no-op</span>
-</span><span id="Parser-508"><a href="#Parser-508"><span class="linenos"> 508</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</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">Not</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_equality</span><span class="p">()),</span>
-</span><span id="Parser-509"><a href="#Parser-509"><span class="linenos"> 509</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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">BitwiseNot</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_unary</span><span class="p">()),</span>
-</span><span id="Parser-510"><a href="#Parser-510"><span class="linenos"> 510</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</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">Neg</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_unary</span><span class="p">()),</span>
-</span><span id="Parser-511"><a href="#Parser-511"><span class="linenos"> 511</span></a> <span class="p">}</span>
-</span><span id="Parser-512"><a href="#Parser-512"><span class="linenos"> 512</span></a>
-</span><span id="Parser-513"><a href="#Parser-513"><span class="linenos"> 513</span></a> <span class="n">PRIMARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-514"><a href="#Parser-514"><span class="linenos"> 514</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-515"><a href="#Parser-515"><span class="linenos"> 515</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="Parser-516"><a href="#Parser-516"><span class="linenos"> 516</span></a> <span class="p">),</span>
-</span><span id="Parser-517"><a href="#Parser-517"><span class="linenos"> 517</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-518"><a href="#Parser-518"><span class="linenos"> 518</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</span><span class="o">=</span><span class="kc">False</span>
-</span><span id="Parser-519"><a href="#Parser-519"><span class="linenos"> 519</span></a> <span class="p">),</span>
-</span><span id="Parser-520"><a href="#Parser-520"><span class="linenos"> 520</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-521"><a href="#Parser-521"><span class="linenos"> 521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span>
-</span><span id="Parser-522"><a href="#Parser-522"><span class="linenos"> 522</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_except</span><span class="p">(),</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_replace</span><span class="p">()},</span>
-</span><span id="Parser-523"><a href="#Parser-523"><span class="linenos"> 523</span></a> <span class="p">),</span>
-</span><span id="Parser-524"><a href="#Parser-524"><span class="linenos"> 524</span></a> <span class="n">TokenType</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">_</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">Null</span><span class="p">),</span>
-</span><span id="Parser-525"><a href="#Parser-525"><span class="linenos"> 525</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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-526"><a href="#Parser-526"><span class="linenos"> 526</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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="Parser-527"><a href="#Parser-527"><span class="linenos"> 527</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">BitString</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-528"><a href="#Parser-528"><span class="linenos"> 528</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">HexString</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-529"><a href="#Parser-529"><span class="linenos"> 529</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">ByteString</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-530"><a href="#Parser-530"><span class="linenos"> 530</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_introducer</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
-</span><span id="Parser-531"><a href="#Parser-531"><span class="linenos"> 531</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_national</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
-</span><span id="Parser-532"><a href="#Parser-532"><span class="linenos"> 532</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_session_parameter</span><span class="p">(),</span>
-</span><span id="Parser-533"><a href="#Parser-533"><span class="linenos"> 533</span></a> <span class="p">}</span>
-</span><span id="Parser-534"><a href="#Parser-534"><span class="linenos"> 534</span></a>
-</span><span id="Parser-535"><a href="#Parser-535"><span class="linenos"> 535</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-536"><a href="#Parser-536"><span class="linenos"> 536</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</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">Placeholder</span><span class="p">),</span>
-</span><span id="Parser-537"><a href="#Parser-537"><span class="linenos"> 537</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</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_parameter</span><span class="p">(),</span>
-</span><span id="Parser-538"><a href="#Parser-538"><span class="linenos"> 538</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</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">Placeholder</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-539"><a href="#Parser-539"><span class="linenos"> 539</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">NUMBER</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-540"><a href="#Parser-540"><span class="linenos"> 540</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-541"><a href="#Parser-541"><span class="linenos"> 541</span></a> <span class="p">}</span>
-</span><span id="Parser-542"><a href="#Parser-542"><span class="linenos"> 542</span></a>
-</span><span id="Parser-543"><a href="#Parser-543"><span class="linenos"> 543</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-544"><a href="#Parser-544"><span class="linenos"> 544</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</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_between</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Parser-545"><a href="#Parser-545"><span class="linenos"> 545</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</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">Glob</span><span class="p">),</span>
-</span><span id="Parser-546"><a href="#Parser-546"><span class="linenos"> 546</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</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">Overlaps</span><span class="p">),</span>
-</span><span id="Parser-547"><a href="#Parser-547"><span class="linenos"> 547</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</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_in</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Parser-548"><a href="#Parser-548"><span class="linenos"> 548</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</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_is</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
-</span><span id="Parser-549"><a href="#Parser-549"><span class="linenos"> 549</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</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">Like</span><span class="p">),</span>
-</span><span id="Parser-550"><a href="#Parser-550"><span class="linenos"> 550</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</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">ILike</span><span class="p">),</span>
-</span><span id="Parser-551"><a href="#Parser-551"><span class="linenos"> 551</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</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">RegexpILike</span><span class="p">),</span>
-</span><span id="Parser-552"><a href="#Parser-552"><span class="linenos"> 552</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</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">RegexpLike</span><span class="p">),</span>
-</span><span id="Parser-553"><a href="#Parser-553"><span class="linenos"> 553</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</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">SimilarTo</span><span class="p">),</span>
-</span><span id="Parser-554"><a href="#Parser-554"><span class="linenos"> 554</span></a> <span class="p">}</span>
-</span><span id="Parser-555"><a href="#Parser-555"><span class="linenos"> 555</span></a>
-</span><span id="Parser-556"><a href="#Parser-556"><span class="linenos"> 556</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-557"><a href="#Parser-557"><span class="linenos"> 557</span></a> <span class="s2">&quot;AFTER&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_afterjournal</span><span class="p">(</span>
-</span><span id="Parser-558"><a href="#Parser-558"><span class="linenos"> 558</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
-</span><span id="Parser-559"><a href="#Parser-559"><span class="linenos"> 559</span></a> <span class="p">),</span>
-</span><span id="Parser-560"><a href="#Parser-560"><span class="linenos"> 560</span></a> <span class="s2">&quot;ALGORITHM&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">),</span>
-</span><span id="Parser-561"><a href="#Parser-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">),</span>
-</span><span id="Parser-562"><a href="#Parser-562"><span class="linenos"> 562</span></a> <span class="s2">&quot;BEFORE&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_journal</span><span class="p">(</span>
-</span><span id="Parser-563"><a href="#Parser-563"><span class="linenos"> 563</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
-</span><span id="Parser-564"><a href="#Parser-564"><span class="linenos"> 564</span></a> <span class="p">),</span>
-</span><span id="Parser-565"><a href="#Parser-565"><span class="linenos"> 565</span></a> <span class="s2">&quot;BLOCKCOMPRESSION&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_blockcompression</span><span class="p">(),</span>
-</span><span id="Parser-566"><a href="#Parser-566"><span class="linenos"> 566</span></a> <span class="s2">&quot;CHARACTER 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">_parse_character_set</span><span class="p">(),</span>
-</span><span id="Parser-567"><a href="#Parser-567"><span class="linenos"> 567</span></a> <span class="s2">&quot;CHECKSUM&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_checksum</span><span class="p">(),</span>
-</span><span id="Parser-568"><a href="#Parser-568"><span class="linenos"> 568</span></a> <span class="s2">&quot;CLUSTER BY&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><span id="Parser-569"><a href="#Parser-569"><span class="linenos"> 569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</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-570"><a href="#Parser-570"><span class="linenos"> 570</span></a> <span class="p">),</span>
-</span><span id="Parser-571"><a href="#Parser-571"><span class="linenos"> 571</span></a> <span class="s2">&quot;COLLATE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">),</span>
-</span><span id="Parser-572"><a href="#Parser-572"><span class="linenos"> 572</span></a> <span class="s2">&quot;COMMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">),</span>
-</span><span id="Parser-573"><a href="#Parser-573"><span class="linenos"> 573</span></a> <span class="s2">&quot;DATABLOCKSIZE&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_datablocksize</span><span class="p">(</span>
-</span><span id="Parser-574"><a href="#Parser-574"><span class="linenos"> 574</span></a> <span class="n">default</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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Parser-575"><a href="#Parser-575"><span class="linenos"> 575</span></a> <span class="p">),</span>
-</span><span id="Parser-576"><a href="#Parser-576"><span class="linenos"> 576</span></a> <span class="s2">&quot;DEFINER&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_definer</span><span class="p">(),</span>
-</span><span id="Parser-577"><a href="#Parser-577"><span class="linenos"> 577</span></a> <span class="s2">&quot;DETERMINISTIC&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><span id="Parser-578"><a href="#Parser-578"><span class="linenos"> 578</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-579"><a href="#Parser-579"><span class="linenos"> 579</span></a> <span class="p">),</span>
-</span><span id="Parser-580"><a href="#Parser-580"><span class="linenos"> 580</span></a> <span class="s2">&quot;DISTKEY&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_distkey</span><span class="p">(),</span>
-</span><span id="Parser-581"><a href="#Parser-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;DISTSTYLE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">),</span>
-</span><span id="Parser-582"><a href="#Parser-582"><span class="linenos"> 582</span></a> <span class="s2">&quot;EXECUTE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">),</span>
-</span><span id="Parser-583"><a href="#Parser-583"><span class="linenos"> 583</span></a> <span class="s2">&quot;EXTERNAL&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">ExternalProperty</span><span class="p">),</span>
-</span><span id="Parser-584"><a href="#Parser-584"><span class="linenos"> 584</span></a> <span class="s2">&quot;FALLBACK&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_fallback</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
-</span><span id="Parser-585"><a href="#Parser-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
-</span><span id="Parser-586"><a href="#Parser-586"><span class="linenos"> 586</span></a> <span class="s2">&quot;FREESPACE&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_freespace</span><span class="p">(),</span>
-</span><span id="Parser-587"><a href="#Parser-587"><span class="linenos"> 587</span></a> <span class="s2">&quot;GLOBAL&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-588"><a href="#Parser-588"><span class="linenos"> 588</span></a> <span class="s2">&quot;IMMUTABLE&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><span id="Parser-589"><a href="#Parser-589"><span class="linenos"> 589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-590"><a href="#Parser-590"><span class="linenos"> 590</span></a> <span class="p">),</span>
-</span><span id="Parser-591"><a href="#Parser-591"><span class="linenos"> 591</span></a> <span class="s2">&quot;JOURNAL&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_journal</span><span class="p">(</span>
-</span><span id="Parser-592"><a href="#Parser-592"><span class="linenos"> 592</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
-</span><span id="Parser-593"><a href="#Parser-593"><span class="linenos"> 593</span></a> <span class="p">),</span>
-</span><span id="Parser-594"><a href="#Parser-594"><span class="linenos"> 594</span></a> <span class="s2">&quot;LANGUAGE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">),</span>
-</span><span id="Parser-595"><a href="#Parser-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
-</span><span id="Parser-596"><a href="#Parser-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;LOCAL&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-597"><a href="#Parser-597"><span class="linenos"> 597</span></a> <span class="s2">&quot;LOCATION&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">),</span>
-</span><span id="Parser-598"><a href="#Parser-598"><span class="linenos"> 598</span></a> <span class="s2">&quot;LOCK&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_locking</span><span class="p">(),</span>
-</span><span id="Parser-599"><a href="#Parser-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;LOCKING&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_locking</span><span class="p">(),</span>
-</span><span id="Parser-600"><a href="#Parser-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;LOG&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_log</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
-</span><span id="Parser-601"><a href="#Parser-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;MATERIALIZED&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">MaterializedProperty</span><span class="p">),</span>
-</span><span id="Parser-602"><a href="#Parser-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;MAX&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_datablocksize</span><span class="p">(),</span>
-</span><span id="Parser-603"><a href="#Parser-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;MAXIMUM&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_datablocksize</span><span class="p">(),</span>
-</span><span id="Parser-604"><a href="#Parser-604"><span class="linenos"> 604</span></a> <span class="s2">&quot;MERGEBLOCKRATIO&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_mergeblockratio</span><span class="p">(</span>
-</span><span id="Parser-605"><a href="#Parser-605"><span class="linenos"> 605</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</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">_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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</span>
-</span><span id="Parser-606"><a href="#Parser-606"><span class="linenos"> 606</span></a> <span class="p">),</span>
-</span><span id="Parser-607"><a href="#Parser-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;MIN&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_datablocksize</span><span class="p">(),</span>
-</span><span id="Parser-608"><a href="#Parser-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;MINIMUM&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_datablocksize</span><span class="p">(),</span>
-</span><span id="Parser-609"><a href="#Parser-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;MULTISET&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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-610"><a href="#Parser-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;NO&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_noprimaryindex</span><span class="p">(),</span>
-</span><span id="Parser-611"><a href="#Parser-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;NOT&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-612"><a href="#Parser-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;ON&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_oncommit</span><span class="p">(),</span>
-</span><span id="Parser-613"><a href="#Parser-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;PARTITION BY&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_partitioned_by</span><span class="p">(),</span>
-</span><span id="Parser-614"><a href="#Parser-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;PARTITIONED BY&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_partitioned_by</span><span class="p">(),</span>
-</span><span id="Parser-615"><a href="#Parser-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;PARTITIONED_BY&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_partitioned_by</span><span class="p">(),</span>
-</span><span id="Parser-616"><a href="#Parser-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;RETURNS&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_returns</span><span class="p">(),</span>
-</span><span id="Parser-617"><a href="#Parser-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;ROW&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_row</span><span class="p">(),</span>
-</span><span id="Parser-618"><a href="#Parser-618"><span class="linenos"> 618</span></a> <span class="s2">&quot;ROW_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">),</span>
-</span><span id="Parser-619"><a href="#Parser-619"><span class="linenos"> 619</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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-620"><a href="#Parser-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;SORTKEY&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_sortkey</span><span class="p">(),</span>
-</span><span id="Parser-621"><a href="#Parser-621"><span class="linenos"> 621</span></a> <span class="s2">&quot;STABLE&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><span id="Parser-622"><a href="#Parser-622"><span class="linenos"> 622</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;STABLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-623"><a href="#Parser-623"><span class="linenos"> 623</span></a> <span class="p">),</span>
-</span><span id="Parser-624"><a href="#Parser-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;STORED&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_stored</span><span class="p">(),</span>
-</span><span id="Parser-625"><a href="#Parser-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;TABLE_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
-</span><span id="Parser-626"><a href="#Parser-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;TBLPROPERTIES&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_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">),</span>
-</span><span id="Parser-627"><a href="#Parser-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;TEMP&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-628"><a href="#Parser-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;TEMPORARY&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-629"><a href="#Parser-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;TRANSIENT&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">TransientProperty</span><span class="p">),</span>
-</span><span id="Parser-630"><a href="#Parser-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;USING&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
-</span><span id="Parser-631"><a href="#Parser-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;VOLATILE&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_volatile_property</span><span class="p">(),</span>
-</span><span id="Parser-632"><a href="#Parser-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;WITH&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_with_property</span><span class="p">(),</span>
-</span><span id="Parser-633"><a href="#Parser-633"><span class="linenos"> 633</span></a> <span class="p">}</span>
-</span><span id="Parser-634"><a href="#Parser-634"><span class="linenos"> 634</span></a>
-</span><span id="Parser-635"><a href="#Parser-635"><span class="linenos"> 635</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-636"><a href="#Parser-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;AUTOINCREMENT&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_auto_increment</span><span class="p">(),</span>
-</span><span id="Parser-637"><a href="#Parser-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_auto_increment</span><span class="p">(),</span>
-</span><span id="Parser-638"><a href="#Parser-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;CASESPECIFIC&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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-639"><a href="#Parser-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;CHARACTER 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><span id="Parser-640"><a href="#Parser-640"><span class="linenos"> 640</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetColumnConstraint</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-641"><a href="#Parser-641"><span class="linenos"> 641</span></a> <span class="p">),</span>
-</span><span id="Parser-642"><a href="#Parser-642"><span class="linenos"> 642</span></a> <span class="s2">&quot;CHECK&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><span id="Parser-643"><a href="#Parser-643"><span class="linenos"> 643</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</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</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-644"><a href="#Parser-644"><span class="linenos"> 644</span></a> <span class="p">),</span>
-</span><span id="Parser-645"><a href="#Parser-645"><span class="linenos"> 645</span></a> <span class="s2">&quot;COLLATE&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><span id="Parser-646"><a href="#Parser-646"><span class="linenos"> 646</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</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-647"><a href="#Parser-647"><span class="linenos"> 647</span></a> <span class="p">),</span>
-</span><span id="Parser-648"><a href="#Parser-648"><span class="linenos"> 648</span></a> <span class="s2">&quot;COMMENT&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><span id="Parser-649"><a href="#Parser-649"><span class="linenos"> 649</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</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><span id="Parser-650"><a href="#Parser-650"><span class="linenos"> 650</span></a> <span class="p">),</span>
-</span><span id="Parser-651"><a href="#Parser-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;COMPRESS&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_compress</span><span class="p">(),</span>
-</span><span id="Parser-652"><a href="#Parser-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;DEFAULT&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><span id="Parser-653"><a href="#Parser-653"><span class="linenos"> 653</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</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-654"><a href="#Parser-654"><span class="linenos"> 654</span></a> <span class="p">),</span>
-</span><span id="Parser-655"><a href="#Parser-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;ENCODE&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">EncodeColumnConstraint</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-656"><a href="#Parser-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;FOREIGN KEY&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_foreign_key</span><span class="p">(),</span>
-</span><span id="Parser-657"><a href="#Parser-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;FORMAT&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><span id="Parser-658"><a href="#Parser-658"><span class="linenos"> 658</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</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-659"><a href="#Parser-659"><span class="linenos"> 659</span></a> <span class="p">),</span>
-</span><span id="Parser-660"><a href="#Parser-660"><span class="linenos"> 660</span></a> <span class="s2">&quot;GENERATED&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_generated_as_identity</span><span class="p">(),</span>
-</span><span id="Parser-661"><a href="#Parser-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;IDENTITY&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_auto_increment</span><span class="p">(),</span>
-</span><span id="Parser-662"><a href="#Parser-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;INLINE&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_inline</span><span class="p">(),</span>
-</span><span id="Parser-663"><a href="#Parser-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
-</span><span id="Parser-664"><a href="#Parser-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;NOT&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_not_constraint</span><span class="p">(),</span>
-</span><span id="Parser-665"><a href="#Parser-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;NULL&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">NotNullColumnConstraint</span><span class="p">,</span> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-666"><a href="#Parser-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;ON&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">_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-667"><a href="#Parser-667"><span class="linenos"> 667</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</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_function</span><span class="p">()),</span>
-</span><span id="Parser-668"><a href="#Parser-668"><span class="linenos"> 668</span></a> <span class="s2">&quot;PATH&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">PathColumnConstraint</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><span id="Parser-669"><a href="#Parser-669"><span class="linenos"> 669</span></a> <span class="s2">&quot;PRIMARY KEY&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_primary_key</span><span class="p">(),</span>
-</span><span id="Parser-670"><a href="#Parser-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;REFERENCES&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_references</span><span class="p">(</span><span class="n">match</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-671"><a href="#Parser-671"><span class="linenos"> 671</span></a> <span class="s2">&quot;TITLE&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><span id="Parser-672"><a href="#Parser-672"><span class="linenos"> 672</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</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-673"><a href="#Parser-673"><span class="linenos"> 673</span></a> <span class="p">),</span>
-</span><span id="Parser-674"><a href="#Parser-674"><span class="linenos"> 674</span></a> <span class="s2">&quot;UNIQUE&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_unique</span><span class="p">(),</span>
-</span><span id="Parser-675"><a href="#Parser-675"><span class="linenos"> 675</span></a> <span class="s2">&quot;UPPERCASE&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">UppercaseColumnConstraint</span><span class="p">),</span>
-</span><span id="Parser-676"><a href="#Parser-676"><span class="linenos"> 676</span></a> <span class="p">}</span>
-</span><span id="Parser-677"><a href="#Parser-677"><span class="linenos"> 677</span></a>
-</span><span id="Parser-678"><a href="#Parser-678"><span class="linenos"> 678</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-679"><a href="#Parser-679"><span class="linenos"> 679</span></a> <span class="s2">&quot;ADD&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_alter_table_add</span><span class="p">(),</span>
-</span><span id="Parser-680"><a href="#Parser-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;ALTER&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_alter_table_alter</span><span class="p">(),</span>
-</span><span id="Parser-681"><a href="#Parser-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;DELETE&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">Delete</span><span class="p">,</span> <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-682"><a href="#Parser-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;DROP&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_alter_table_drop</span><span class="p">(),</span>
-</span><span id="Parser-683"><a href="#Parser-683"><span class="linenos"> 683</span></a> <span class="s2">&quot;RENAME&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_alter_table_rename</span><span class="p">(),</span>
-</span><span id="Parser-684"><a href="#Parser-684"><span class="linenos"> 684</span></a> <span class="p">}</span>
-</span><span id="Parser-685"><a href="#Parser-685"><span class="linenos"> 685</span></a>
-</span><span id="Parser-686"><a href="#Parser-686"><span class="linenos"> 686</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;CHECK&quot;</span><span class="p">,</span> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">,</span> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">}</span>
-</span><span id="Parser-687"><a href="#Parser-687"><span class="linenos"> 687</span></a>
-</span><span id="Parser-688"><a href="#Parser-688"><span class="linenos"> 688</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-689"><a href="#Parser-689"><span class="linenos"> 689</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</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_case</span><span class="p">(),</span>
-</span><span id="Parser-690"><a href="#Parser-690"><span class="linenos"> 690</span></a> <span class="n">TokenType</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="bp">self</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">(),</span>
-</span><span id="Parser-691"><a href="#Parser-691"><span class="linenos"> 691</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</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">Any</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-692"><a href="#Parser-692"><span class="linenos"> 692</span></a> <span class="p">}</span>
-</span><span id="Parser-693"><a href="#Parser-693"><span class="linenos"> 693</span></a>
-</span><span id="Parser-694"><a href="#Parser-694"><span class="linenos"> 694</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-695"><a href="#Parser-695"><span class="linenos"> 695</span></a> <span class="s2">&quot;CAST&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_cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
-</span><span id="Parser-696"><a href="#Parser-696"><span class="linenos"> 696</span></a> <span class="s2">&quot;CONVERT&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_convert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
-</span><span id="Parser-697"><a href="#Parser-697"><span class="linenos"> 697</span></a> <span class="s2">&quot;DECODE&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_decode</span><span class="p">(),</span>
-</span><span id="Parser-698"><a href="#Parser-698"><span class="linenos"> 698</span></a> <span class="s2">&quot;EXTRACT&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_extract</span><span class="p">(),</span>
-</span><span id="Parser-699"><a href="#Parser-699"><span class="linenos"> 699</span></a> <span class="s2">&quot;JSON_OBJECT&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_json_object</span><span class="p">(),</span>
-</span><span id="Parser-700"><a href="#Parser-700"><span class="linenos"> 700</span></a> <span class="s2">&quot;LOG&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_logarithm</span><span class="p">(),</span>
-</span><span id="Parser-701"><a href="#Parser-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;MATCH&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_match_against</span><span class="p">(),</span>
-</span><span id="Parser-702"><a href="#Parser-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;POSITION&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_position</span><span class="p">(),</span>
-</span><span id="Parser-703"><a href="#Parser-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;STRING_AGG&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_string_agg</span><span class="p">(),</span>
-</span><span id="Parser-704"><a href="#Parser-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;SUBSTRING&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_substring</span><span class="p">(),</span>
-</span><span id="Parser-705"><a href="#Parser-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;TRIM&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_trim</span><span class="p">(),</span>
-</span><span id="Parser-706"><a href="#Parser-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;TRY_CAST&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_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-707"><a href="#Parser-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;TRY_CONVERT&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_convert</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-708"><a href="#Parser-708"><span class="linenos"> 708</span></a> <span class="p">}</span>
-</span><span id="Parser-709"><a href="#Parser-709"><span class="linenos"> 709</span></a>
-</span><span id="Parser-710"><a href="#Parser-710"><span class="linenos"> 710</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-711"><a href="#Parser-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;match&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_match_recognize</span><span class="p">(),</span>
-</span><span id="Parser-712"><a href="#Parser-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;where&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_where</span><span class="p">(),</span>
-</span><span id="Parser-713"><a href="#Parser-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;group&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_group</span><span class="p">(),</span>
-</span><span id="Parser-714"><a href="#Parser-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;having&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_having</span><span class="p">(),</span>
-</span><span id="Parser-715"><a href="#Parser-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;qualify&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_qualify</span><span class="p">(),</span>
-</span><span id="Parser-716"><a href="#Parser-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;windows&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_window_clause</span><span class="p">(),</span>
-</span><span id="Parser-717"><a href="#Parser-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;distribute&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Distribute</span><span class="p">),</span>
-</span><span id="Parser-718"><a href="#Parser-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;sort&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">),</span>
-</span><span id="Parser-719"><a href="#Parser-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;cluster&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">),</span>
-</span><span id="Parser-720"><a href="#Parser-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;order&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_order</span><span class="p">(),</span>
-</span><span id="Parser-721"><a href="#Parser-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;limit&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_limit</span><span class="p">(),</span>
-</span><span id="Parser-722"><a href="#Parser-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;offset&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_offset</span><span class="p">(),</span>
-</span><span id="Parser-723"><a href="#Parser-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;lock&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_lock</span><span class="p">(),</span>
-</span><span id="Parser-724"><a href="#Parser-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;sample&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_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-725"><a href="#Parser-725"><span class="linenos"> 725</span></a> <span class="p">}</span>
-</span><span id="Parser-726"><a href="#Parser-726"><span class="linenos"> 726</span></a>
-</span><span id="Parser-727"><a href="#Parser-727"><span class="linenos"> 727</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-728"><a href="#Parser-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;GLOBAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">),</span>
-</span><span id="Parser-729"><a href="#Parser-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;LOCAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">),</span>
-</span><span id="Parser-730"><a href="#Parser-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;SESSION&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;SESSION&quot;</span><span class="p">),</span>
-</span><span id="Parser-731"><a href="#Parser-731"><span class="linenos"> 731</span></a> <span class="s2">&quot;TRANSACTION&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_set_transaction</span><span class="p">(),</span>
-</span><span id="Parser-732"><a href="#Parser-732"><span class="linenos"> 732</span></a> <span class="p">}</span>
-</span><span id="Parser-733"><a href="#Parser-733"><span class="linenos"> 733</span></a>
-</span><span id="Parser-734"><a href="#Parser-734"><span class="linenos"> 734</span></a> <span class="n">SHOW_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-735"><a href="#Parser-735"><span class="linenos"> 735</span></a>
-</span><span id="Parser-736"><a href="#Parser-736"><span class="linenos"> 736</span></a> <span class="n">TYPE_LITERAL_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="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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-737"><a href="#Parser-737"><span class="linenos"> 737</span></a>
-</span><span id="Parser-738"><a href="#Parser-738"><span class="linenos"> 738</span></a> <span class="n">MODIFIABLES</span> <span class="o">=</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">Subqueryable</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="Parser-236"><a href="#Parser-236"><span class="linenos"> 236</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
+</span><span id="Parser-237"><a href="#Parser-237"><span class="linenos"> 237</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
+</span><span id="Parser-238"><a href="#Parser-238"><span class="linenos"> 238</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
+</span><span id="Parser-239"><a href="#Parser-239"><span class="linenos"> 239</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="Parser-240"><a href="#Parser-240"><span class="linenos"> 240</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
+</span><span id="Parser-241"><a href="#Parser-241"><span class="linenos"> 241</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
+</span><span id="Parser-242"><a href="#Parser-242"><span class="linenos"> 242</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
+</span><span id="Parser-243"><a href="#Parser-243"><span class="linenos"> 243</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
+</span><span id="Parser-244"><a href="#Parser-244"><span class="linenos"> 244</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
+</span><span id="Parser-245"><a href="#Parser-245"><span class="linenos"> 245</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="Parser-246"><a href="#Parser-246"><span class="linenos"> 246</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
+</span><span id="Parser-247"><a href="#Parser-247"><span class="linenos"> 247</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
+</span><span id="Parser-248"><a href="#Parser-248"><span class="linenos"> 248</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
+</span><span id="Parser-249"><a href="#Parser-249"><span class="linenos"> 249</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
+</span><span id="Parser-250"><a href="#Parser-250"><span class="linenos"> 250</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
+</span><span id="Parser-251"><a href="#Parser-251"><span class="linenos"> 251</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
+</span><span id="Parser-252"><a href="#Parser-252"><span class="linenos"> 252</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
+</span><span id="Parser-253"><a href="#Parser-253"><span class="linenos"> 253</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
+</span><span id="Parser-254"><a href="#Parser-254"><span class="linenos"> 254</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
+</span><span id="Parser-255"><a href="#Parser-255"><span class="linenos"> 255</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
+</span><span id="Parser-256"><a href="#Parser-256"><span class="linenos"> 256</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
+</span><span id="Parser-257"><a href="#Parser-257"><span class="linenos"> 257</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="Parser-258"><a href="#Parser-258"><span class="linenos"> 258</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
+</span><span id="Parser-259"><a href="#Parser-259"><span class="linenos"> 259</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
+</span><span id="Parser-260"><a href="#Parser-260"><span class="linenos"> 260</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
+</span><span id="Parser-261"><a href="#Parser-261"><span class="linenos"> 261</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="Parser-262"><a href="#Parser-262"><span class="linenos"> 262</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
+</span><span id="Parser-263"><a href="#Parser-263"><span class="linenos"> 263</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="Parser-264"><a href="#Parser-264"><span class="linenos"> 264</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
+</span><span id="Parser-265"><a href="#Parser-265"><span class="linenos"> 265</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
+</span><span id="Parser-266"><a href="#Parser-266"><span class="linenos"> 266</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
+</span><span id="Parser-267"><a href="#Parser-267"><span class="linenos"> 267</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
+</span><span id="Parser-268"><a href="#Parser-268"><span class="linenos"> 268</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
+</span><span id="Parser-269"><a href="#Parser-269"><span class="linenos"> 269</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
+</span><span id="Parser-270"><a href="#Parser-270"><span class="linenos"> 270</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="Parser-271"><a href="#Parser-271"><span class="linenos"> 271</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
+</span><span id="Parser-272"><a href="#Parser-272"><span class="linenos"> 272</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
+</span><span id="Parser-273"><a href="#Parser-273"><span class="linenos"> 273</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
+</span><span id="Parser-274"><a href="#Parser-274"><span class="linenos"> 274</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="Parser-275"><a href="#Parser-275"><span class="linenos"> 275</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
+</span><span id="Parser-276"><a href="#Parser-276"><span class="linenos"> 276</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
+</span><span id="Parser-277"><a href="#Parser-277"><span class="linenos"> 277</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="Parser-278"><a href="#Parser-278"><span class="linenos"> 278</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
+</span><span id="Parser-279"><a href="#Parser-279"><span class="linenos"> 279</span></a> <span class="p">}</span>
+</span><span id="Parser-280"><a href="#Parser-280"><span class="linenos"> 280</span></a>
+</span><span id="Parser-281"><a href="#Parser-281"><span class="linenos"> 281</span></a> <span class="n">INTERVAL_VARS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-282"><a href="#Parser-282"><span class="linenos"> 282</span></a>
+</span><span id="Parser-283"><a href="#Parser-283"><span class="linenos"> 283</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
+</span><span id="Parser-284"><a href="#Parser-284"><span class="linenos"> 284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
+</span><span id="Parser-285"><a href="#Parser-285"><span class="linenos"> 285</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="Parser-286"><a href="#Parser-286"><span class="linenos"> 286</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="Parser-287"><a href="#Parser-287"><span class="linenos"> 287</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
+</span><span id="Parser-288"><a href="#Parser-288"><span class="linenos"> 288</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="Parser-289"><a href="#Parser-289"><span class="linenos"> 289</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="Parser-290"><a href="#Parser-290"><span class="linenos"> 290</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="Parser-291"><a href="#Parser-291"><span class="linenos"> 291</span></a> <span class="p">}</span>
+</span><span id="Parser-292"><a href="#Parser-292"><span class="linenos"> 292</span></a>
+</span><span id="Parser-293"><a href="#Parser-293"><span class="linenos"> 293</span></a> <span class="n">COMMENT_TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-294"><a href="#Parser-294"><span class="linenos"> 294</span></a>
+</span><span id="Parser-295"><a href="#Parser-295"><span class="linenos"> 295</span></a> <span class="n">UPDATE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</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-296"><a href="#Parser-296"><span class="linenos"> 296</span></a>
+</span><span id="Parser-297"><a href="#Parser-297"><span class="linenos"> 297</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</span><span class="p">}</span>
+</span><span id="Parser-298"><a href="#Parser-298"><span class="linenos"> 298</span></a>
+</span><span id="Parser-299"><a href="#Parser-299"><span class="linenos"> 299</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-300"><a href="#Parser-300"><span class="linenos"> 300</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Parser-301"><a href="#Parser-301"><span class="linenos"> 301</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
+</span><span id="Parser-302"><a href="#Parser-302"><span class="linenos"> 302</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
+</span><span id="Parser-303"><a href="#Parser-303"><span class="linenos"> 303</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
+</span><span id="Parser-304"><a href="#Parser-304"><span class="linenos"> 304</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
+</span><span id="Parser-305"><a href="#Parser-305"><span class="linenos"> 305</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
+</span><span id="Parser-306"><a href="#Parser-306"><span class="linenos"> 306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
+</span><span id="Parser-307"><a href="#Parser-307"><span class="linenos"> 307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
+</span><span id="Parser-308"><a href="#Parser-308"><span class="linenos"> 308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
+</span><span id="Parser-309"><a href="#Parser-309"><span class="linenos"> 309</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
+</span><span id="Parser-310"><a href="#Parser-310"><span class="linenos"> 310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
+</span><span id="Parser-311"><a href="#Parser-311"><span class="linenos"> 311</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
+</span><span id="Parser-312"><a href="#Parser-312"><span class="linenos"> 312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
+</span><span id="Parser-313"><a href="#Parser-313"><span class="linenos"> 313</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
+</span><span id="Parser-314"><a href="#Parser-314"><span class="linenos"> 314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
+</span><span id="Parser-315"><a href="#Parser-315"><span class="linenos"> 315</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
+</span><span id="Parser-316"><a href="#Parser-316"><span class="linenos"> 316</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
+</span><span id="Parser-317"><a href="#Parser-317"><span class="linenos"> 317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
+</span><span id="Parser-318"><a href="#Parser-318"><span class="linenos"> 318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
+</span><span id="Parser-319"><a href="#Parser-319"><span class="linenos"> 319</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
+</span><span id="Parser-320"><a href="#Parser-320"><span class="linenos"> 320</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
+</span><span id="Parser-321"><a href="#Parser-321"><span class="linenos"> 321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
+</span><span id="Parser-322"><a href="#Parser-322"><span class="linenos"> 322</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="Parser-323"><a href="#Parser-323"><span class="linenos"> 323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="Parser-324"><a href="#Parser-324"><span class="linenos"> 324</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
+</span><span id="Parser-325"><a href="#Parser-325"><span class="linenos"> 325</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
+</span><span id="Parser-326"><a href="#Parser-326"><span class="linenos"> 326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
+</span><span id="Parser-327"><a href="#Parser-327"><span class="linenos"> 327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="Parser-328"><a href="#Parser-328"><span class="linenos"> 328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Parser-329"><a href="#Parser-329"><span class="linenos"> 329</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
+</span><span id="Parser-330"><a href="#Parser-330"><span class="linenos"> 330</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
+</span><span id="Parser-331"><a href="#Parser-331"><span class="linenos"> 331</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
+</span><span id="Parser-332"><a href="#Parser-332"><span class="linenos"> 332</span></a> <span class="p">}</span>
+</span><span id="Parser-333"><a href="#Parser-333"><span class="linenos"> 333</span></a>
+</span><span id="Parser-334"><a href="#Parser-334"><span class="linenos"> 334</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-335"><a href="#Parser-335"><span class="linenos"> 335</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
+</span><span id="Parser-336"><a href="#Parser-336"><span class="linenos"> 336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
+</span><span id="Parser-337"><a href="#Parser-337"><span class="linenos"> 337</span></a> <span class="p">}</span>
+</span><span id="Parser-338"><a href="#Parser-338"><span class="linenos"> 338</span></a>
+</span><span id="Parser-339"><a href="#Parser-339"><span class="linenos"> 339</span></a> <span class="n">EQUALITY</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-340"><a href="#Parser-340"><span class="linenos"> 340</span></a> <span class="n">TokenType</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">EQ</span><span class="p">,</span>
+</span><span id="Parser-341"><a href="#Parser-341"><span class="linenos"> 341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
+</span><span id="Parser-342"><a href="#Parser-342"><span class="linenos"> 342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">,</span>
+</span><span id="Parser-343"><a href="#Parser-343"><span class="linenos"> 343</span></a> <span class="p">}</span>
+</span><span id="Parser-344"><a href="#Parser-344"><span class="linenos"> 344</span></a>
+</span><span id="Parser-345"><a href="#Parser-345"><span class="linenos"> 345</span></a> <span class="n">COMPARISON</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-346"><a href="#Parser-346"><span class="linenos"> 346</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
+</span><span id="Parser-347"><a href="#Parser-347"><span class="linenos"> 347</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
+</span><span id="Parser-348"><a href="#Parser-348"><span class="linenos"> 348</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
+</span><span id="Parser-349"><a href="#Parser-349"><span class="linenos"> 349</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
+</span><span id="Parser-350"><a href="#Parser-350"><span class="linenos"> 350</span></a> <span class="p">}</span>
+</span><span id="Parser-351"><a href="#Parser-351"><span class="linenos"> 351</span></a>
+</span><span id="Parser-352"><a href="#Parser-352"><span class="linenos"> 352</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-353"><a href="#Parser-353"><span class="linenos"> 353</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">,</span>
+</span><span id="Parser-354"><a href="#Parser-354"><span class="linenos"> 354</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">BitwiseXor</span><span class="p">,</span>
+</span><span id="Parser-355"><a href="#Parser-355"><span class="linenos"> 355</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">,</span>
+</span><span id="Parser-356"><a href="#Parser-356"><span class="linenos"> 356</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
+</span><span id="Parser-357"><a href="#Parser-357"><span class="linenos"> 357</span></a> <span class="p">}</span>
+</span><span id="Parser-358"><a href="#Parser-358"><span class="linenos"> 358</span></a>
+</span><span id="Parser-359"><a href="#Parser-359"><span class="linenos"> 359</span></a> <span class="n">TERM</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-360"><a href="#Parser-360"><span class="linenos"> 360</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">,</span>
+</span><span id="Parser-361"><a href="#Parser-361"><span class="linenos"> 361</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span>
+</span><span id="Parser-362"><a href="#Parser-362"><span class="linenos"> 362</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</span><span class="p">,</span>
+</span><span id="Parser-363"><a href="#Parser-363"><span class="linenos"> 363</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Collate</span><span class="p">,</span>
+</span><span id="Parser-364"><a href="#Parser-364"><span class="linenos"> 364</span></a> <span class="p">}</span>
+</span><span id="Parser-365"><a href="#Parser-365"><span class="linenos"> 365</span></a>
+</span><span id="Parser-366"><a href="#Parser-366"><span class="linenos"> 366</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-367"><a href="#Parser-367"><span class="linenos"> 367</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">,</span>
+</span><span id="Parser-368"><a href="#Parser-368"><span class="linenos"> 368</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distance</span><span class="p">,</span>
+</span><span id="Parser-369"><a href="#Parser-369"><span class="linenos"> 369</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</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-370"><a href="#Parser-370"><span class="linenos"> 370</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">,</span>
+</span><span id="Parser-371"><a href="#Parser-371"><span class="linenos"> 371</span></a> <span class="p">}</span>
+</span><span id="Parser-372"><a href="#Parser-372"><span class="linenos"> 372</span></a>
+</span><span id="Parser-373"><a href="#Parser-373"><span class="linenos"> 373</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-374"><a href="#Parser-374"><span class="linenos"> 374</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
+</span><span id="Parser-375"><a href="#Parser-375"><span class="linenos"> 375</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
+</span><span id="Parser-376"><a href="#Parser-376"><span class="linenos"> 376</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
+</span><span id="Parser-377"><a href="#Parser-377"><span class="linenos"> 377</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
+</span><span id="Parser-378"><a href="#Parser-378"><span class="linenos"> 378</span></a> <span class="p">}</span>
+</span><span id="Parser-379"><a href="#Parser-379"><span class="linenos"> 379</span></a>
+</span><span id="Parser-380"><a href="#Parser-380"><span class="linenos"> 380</span></a> <span class="n">SET_OPERATIONS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-381"><a href="#Parser-381"><span class="linenos"> 381</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
+</span><span id="Parser-382"><a href="#Parser-382"><span class="linenos"> 382</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
+</span><span id="Parser-383"><a href="#Parser-383"><span class="linenos"> 383</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
+</span><span id="Parser-384"><a href="#Parser-384"><span class="linenos"> 384</span></a> <span class="p">}</span>
+</span><span id="Parser-385"><a href="#Parser-385"><span class="linenos"> 385</span></a>
+</span><span id="Parser-386"><a href="#Parser-386"><span class="linenos"> 386</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-387"><a href="#Parser-387"><span class="linenos"> 387</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
+</span><span id="Parser-388"><a href="#Parser-388"><span class="linenos"> 388</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
+</span><span id="Parser-389"><a href="#Parser-389"><span class="linenos"> 389</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
+</span><span id="Parser-390"><a href="#Parser-390"><span class="linenos"> 390</span></a> <span class="p">}</span>
+</span><span id="Parser-391"><a href="#Parser-391"><span class="linenos"> 391</span></a>
+</span><span id="Parser-392"><a href="#Parser-392"><span class="linenos"> 392</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-393"><a href="#Parser-393"><span class="linenos"> 393</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
+</span><span id="Parser-394"><a href="#Parser-394"><span class="linenos"> 394</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
+</span><span id="Parser-395"><a href="#Parser-395"><span class="linenos"> 395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
+</span><span id="Parser-396"><a href="#Parser-396"><span class="linenos"> 396</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
+</span><span id="Parser-397"><a href="#Parser-397"><span class="linenos"> 397</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
+</span><span id="Parser-398"><a href="#Parser-398"><span class="linenos"> 398</span></a> <span class="p">}</span>
+</span><span id="Parser-399"><a href="#Parser-399"><span class="linenos"> 399</span></a>
+</span><span id="Parser-400"><a href="#Parser-400"><span class="linenos"> 400</span></a> <span class="n">LAMBDAS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-401"><a href="#Parser-401"><span class="linenos"> 401</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-402"><a href="#Parser-402"><span class="linenos"> 402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">,</span>
+</span><span id="Parser-403"><a href="#Parser-403"><span class="linenos"> 403</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</span><span class="p">(</span>
+</span><span id="Parser-404"><a href="#Parser-404"><span class="linenos"> 404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="Parser-405"><a href="#Parser-405"><span class="linenos"> 405</span></a> <span class="p">{</span><span class="n">node</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">},</span>
+</span><span id="Parser-406"><a href="#Parser-406"><span class="linenos"> 406</span></a> <span class="p">),</span>
+</span><span id="Parser-407"><a href="#Parser-407"><span class="linenos"> 407</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-408"><a href="#Parser-408"><span class="linenos"> 408</span></a> <span class="p">),</span>
+</span><span id="Parser-409"><a href="#Parser-409"><span class="linenos"> 409</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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-410"><a href="#Parser-410"><span class="linenos"> 410</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
+</span><span id="Parser-411"><a href="#Parser-411"><span class="linenos"> 411</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expressions</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="p">),</span>
+</span><span id="Parser-412"><a href="#Parser-412"><span class="linenos"> 412</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-413"><a href="#Parser-413"><span class="linenos"> 413</span></a> <span class="p">),</span>
+</span><span id="Parser-414"><a href="#Parser-414"><span class="linenos"> 414</span></a> <span class="p">}</span>
+</span><span id="Parser-415"><a href="#Parser-415"><span class="linenos"> 415</span></a>
+</span><span id="Parser-416"><a href="#Parser-416"><span class="linenos"> 416</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-417"><a href="#Parser-417"><span class="linenos"> 417</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-418"><a href="#Parser-418"><span class="linenos"> 418</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</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-419"><a href="#Parser-419"><span class="linenos"> 419</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
+</span><span id="Parser-420"><a href="#Parser-420"><span class="linenos"> 420</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-421"><a href="#Parser-421"><span class="linenos"> 421</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
+</span><span id="Parser-422"><a href="#Parser-422"><span class="linenos"> 422</span></a> <span class="p">),</span>
+</span><span id="Parser-423"><a href="#Parser-423"><span class="linenos"> 423</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-424"><a href="#Parser-424"><span class="linenos"> 424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
+</span><span id="Parser-425"><a href="#Parser-425"><span class="linenos"> 425</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-426"><a href="#Parser-426"><span class="linenos"> 426</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-427"><a href="#Parser-427"><span class="linenos"> 427</span></a> <span class="p">),</span>
+</span><span id="Parser-428"><a href="#Parser-428"><span class="linenos"> 428</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-429"><a href="#Parser-429"><span class="linenos"> 429</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
+</span><span id="Parser-430"><a href="#Parser-430"><span class="linenos"> 430</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-431"><a href="#Parser-431"><span class="linenos"> 431</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-432"><a href="#Parser-432"><span class="linenos"> 432</span></a> <span class="p">),</span>
+</span><span id="Parser-433"><a href="#Parser-433"><span class="linenos"> 433</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-434"><a href="#Parser-434"><span class="linenos"> 434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
+</span><span id="Parser-435"><a href="#Parser-435"><span class="linenos"> 435</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-436"><a href="#Parser-436"><span class="linenos"> 436</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-437"><a href="#Parser-437"><span class="linenos"> 437</span></a> <span class="p">),</span>
+</span><span id="Parser-438"><a href="#Parser-438"><span class="linenos"> 438</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</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-439"><a href="#Parser-439"><span class="linenos"> 439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
+</span><span id="Parser-440"><a href="#Parser-440"><span class="linenos"> 440</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-441"><a href="#Parser-441"><span class="linenos"> 441</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-442"><a href="#Parser-442"><span class="linenos"> 442</span></a> <span class="p">),</span>
+</span><span id="Parser-443"><a href="#Parser-443"><span class="linenos"> 443</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">key</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-444"><a href="#Parser-444"><span class="linenos"> 444</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">,</span>
+</span><span id="Parser-445"><a href="#Parser-445"><span class="linenos"> 445</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-446"><a href="#Parser-446"><span class="linenos"> 446</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="Parser-447"><a href="#Parser-447"><span class="linenos"> 447</span></a> <span class="p">),</span>
+</span><span id="Parser-448"><a href="#Parser-448"><span class="linenos"> 448</span></a> <span class="p">}</span>
+</span><span id="Parser-449"><a href="#Parser-449"><span class="linenos"> 449</span></a>
+</span><span id="Parser-450"><a href="#Parser-450"><span class="linenos"> 450</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-451"><a href="#Parser-451"><span class="linenos"> 451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</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_column</span><span class="p">(),</span>
+</span><span id="Parser-452"><a href="#Parser-452"><span class="linenos"> 452</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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_types</span><span class="p">(),</span>
+</span><span id="Parser-453"><a href="#Parser-453"><span class="linenos"> 453</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</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_from</span><span class="p">(),</span>
+</span><span id="Parser-454"><a href="#Parser-454"><span class="linenos"> 454</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</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_group</span><span class="p">(),</span>
+</span><span id="Parser-455"><a href="#Parser-455"><span class="linenos"> 455</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</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_id_var</span><span class="p">(),</span>
+</span><span id="Parser-456"><a href="#Parser-456"><span class="linenos"> 456</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</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_lateral</span><span class="p">(),</span>
+</span><span id="Parser-457"><a href="#Parser-457"><span class="linenos"> 457</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</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_join</span><span class="p">(),</span>
+</span><span id="Parser-458"><a href="#Parser-458"><span class="linenos"> 458</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</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_order</span><span class="p">(),</span>
+</span><span id="Parser-459"><a href="#Parser-459"><span class="linenos"> 459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">),</span>
+</span><span id="Parser-460"><a href="#Parser-460"><span class="linenos"> 460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sort</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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">),</span>
+</span><span id="Parser-461"><a href="#Parser-461"><span class="linenos"> 461</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</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_lambda</span><span class="p">(),</span>
+</span><span id="Parser-462"><a href="#Parser-462"><span class="linenos"> 462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</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_limit</span><span class="p">(),</span>
+</span><span id="Parser-463"><a href="#Parser-463"><span class="linenos"> 463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</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_offset</span><span class="p">(),</span>
+</span><span id="Parser-464"><a href="#Parser-464"><span class="linenos"> 464</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</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_table_alias</span><span class="p">(),</span>
+</span><span id="Parser-465"><a href="#Parser-465"><span class="linenos"> 465</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
+</span><span id="Parser-466"><a href="#Parser-466"><span class="linenos"> 466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</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_conjunction</span><span class="p">(),</span>
+</span><span id="Parser-467"><a href="#Parser-467"><span class="linenos"> 467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</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_statement</span><span class="p">(),</span>
+</span><span id="Parser-468"><a href="#Parser-468"><span class="linenos"> 468</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</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_properties</span><span class="p">(),</span>
+</span><span id="Parser-469"><a href="#Parser-469"><span class="linenos"> 469</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</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_where</span><span class="p">(),</span>
+</span><span id="Parser-470"><a href="#Parser-470"><span class="linenos"> 470</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</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_ordered</span><span class="p">(),</span>
+</span><span id="Parser-471"><a href="#Parser-471"><span class="linenos"> 471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Having</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_having</span><span class="p">(),</span>
+</span><span id="Parser-472"><a href="#Parser-472"><span class="linenos"> 472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</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_with</span><span class="p">(),</span>
+</span><span id="Parser-473"><a href="#Parser-473"><span class="linenos"> 473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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_named_window</span><span class="p">(),</span>
+</span><span id="Parser-474"><a href="#Parser-474"><span class="linenos"> 474</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Qualify</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_qualify</span><span class="p">(),</span>
+</span><span id="Parser-475"><a href="#Parser-475"><span class="linenos"> 475</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</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_returning</span><span class="p">(),</span>
+</span><span id="Parser-476"><a href="#Parser-476"><span class="linenos"> 476</span></a> <span class="s2">&quot;JOIN_TYPE&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_join_side_and_kind</span><span class="p">(),</span>
+</span><span id="Parser-477"><a href="#Parser-477"><span class="linenos"> 477</span></a> <span class="p">}</span>
+</span><span id="Parser-478"><a href="#Parser-478"><span class="linenos"> 478</span></a>
+</span><span id="Parser-479"><a href="#Parser-479"><span class="linenos"> 479</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-480"><a href="#Parser-480"><span class="linenos"> 480</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</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_alter</span><span class="p">(),</span>
+</span><span id="Parser-481"><a href="#Parser-481"><span class="linenos"> 481</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</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_transaction</span><span class="p">(),</span>
+</span><span id="Parser-482"><a href="#Parser-482"><span class="linenos"> 482</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</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_cache</span><span class="p">(),</span>
+</span><span id="Parser-483"><a href="#Parser-483"><span class="linenos"> 483</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</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="Parser-484"><a href="#Parser-484"><span class="linenos"> 484</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</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_comment</span><span class="p">(),</span>
+</span><span id="Parser-485"><a href="#Parser-485"><span class="linenos"> 485</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</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_create</span><span class="p">(),</span>
+</span><span id="Parser-486"><a href="#Parser-486"><span class="linenos"> 486</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</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_delete</span><span class="p">(),</span>
+</span><span id="Parser-487"><a href="#Parser-487"><span class="linenos"> 487</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</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_describe</span><span class="p">(),</span>
+</span><span id="Parser-488"><a href="#Parser-488"><span class="linenos"> 488</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</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_describe</span><span class="p">(),</span>
+</span><span id="Parser-489"><a href="#Parser-489"><span class="linenos"> 489</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</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_drop</span><span class="p">(),</span>
+</span><span id="Parser-490"><a href="#Parser-490"><span class="linenos"> 490</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="Parser-491"><a href="#Parser-491"><span class="linenos"> 491</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</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_insert</span><span class="p">(),</span>
+</span><span id="Parser-492"><a href="#Parser-492"><span class="linenos"> 492</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</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_load_data</span><span class="p">(),</span>
+</span><span id="Parser-493"><a href="#Parser-493"><span class="linenos"> 493</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</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_merge</span><span class="p">(),</span>
+</span><span id="Parser-494"><a href="#Parser-494"><span class="linenos"> 494</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</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">Pragma</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="Parser-495"><a href="#Parser-495"><span class="linenos"> 495</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</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="Parser-496"><a href="#Parser-496"><span class="linenos"> 496</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</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_set</span><span class="p">(),</span>
+</span><span id="Parser-497"><a href="#Parser-497"><span class="linenos"> 497</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</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_uncache</span><span class="p">(),</span>
+</span><span id="Parser-498"><a href="#Parser-498"><span class="linenos"> 498</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</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_update</span><span class="p">(),</span>
+</span><span id="Parser-499"><a href="#Parser-499"><span class="linenos"> 499</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</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><span id="Parser-500"><a href="#Parser-500"><span class="linenos"> 500</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
+</span><span id="Parser-501"><a href="#Parser-501"><span class="linenos"> 501</span></a> <span class="n">kind</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;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;WAREHOUSE&quot;</span><span class="p">,</span> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">))</span>
+</span><span id="Parser-502"><a href="#Parser-502"><span class="linenos"> 502</span></a> <span class="ow">and</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-503"><a href="#Parser-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_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-504"><a href="#Parser-504"><span class="linenos"> 504</span></a> <span class="p">),</span>
+</span><span id="Parser-505"><a href="#Parser-505"><span class="linenos"> 505</span></a> <span class="p">}</span>
+</span><span id="Parser-506"><a href="#Parser-506"><span class="linenos"> 506</span></a>
+</span><span id="Parser-507"><a href="#Parser-507"><span class="linenos"> 507</span></a> <span class="n">UNARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-508"><a href="#Parser-508"><span class="linenos"> 508</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</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_unary</span><span class="p">(),</span> <span class="c1"># Unary + is handled as a no-op</span>
+</span><span id="Parser-509"><a href="#Parser-509"><span class="linenos"> 509</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</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">Not</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_equality</span><span class="p">()),</span>
+</span><span id="Parser-510"><a href="#Parser-510"><span class="linenos"> 510</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</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">BitwiseNot</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_unary</span><span class="p">()),</span>
+</span><span id="Parser-511"><a href="#Parser-511"><span class="linenos"> 511</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</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">Neg</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_unary</span><span class="p">()),</span>
+</span><span id="Parser-512"><a href="#Parser-512"><span class="linenos"> 512</span></a> <span class="p">}</span>
+</span><span id="Parser-513"><a href="#Parser-513"><span class="linenos"> 513</span></a>
+</span><span id="Parser-514"><a href="#Parser-514"><span class="linenos"> 514</span></a> <span class="n">PRIMARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-515"><a href="#Parser-515"><span class="linenos"> 515</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-516"><a href="#Parser-516"><span class="linenos"> 516</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="Parser-517"><a href="#Parser-517"><span class="linenos"> 517</span></a> <span class="p">),</span>
+</span><span id="Parser-518"><a href="#Parser-518"><span class="linenos"> 518</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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-519"><a href="#Parser-519"><span class="linenos"> 519</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</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">is_string</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="Parser-520"><a href="#Parser-520"><span class="linenos"> 520</span></a> <span class="p">),</span>
+</span><span id="Parser-521"><a href="#Parser-521"><span class="linenos"> 521</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-522"><a href="#Parser-522"><span class="linenos"> 522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span>
+</span><span id="Parser-523"><a href="#Parser-523"><span class="linenos"> 523</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_except</span><span class="p">(),</span> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_replace</span><span class="p">()},</span>
+</span><span id="Parser-524"><a href="#Parser-524"><span class="linenos"> 524</span></a> <span class="p">),</span>
+</span><span id="Parser-525"><a href="#Parser-525"><span class="linenos"> 525</span></a> <span class="n">TokenType</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">_</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">Null</span><span class="p">),</span>
+</span><span id="Parser-526"><a href="#Parser-526"><span class="linenos"> 526</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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-527"><a href="#Parser-527"><span class="linenos"> 527</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</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="Parser-528"><a href="#Parser-528"><span class="linenos"> 528</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">BitString</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-529"><a href="#Parser-529"><span class="linenos"> 529</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">HexString</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-530"><a href="#Parser-530"><span class="linenos"> 530</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</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">ByteString</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-531"><a href="#Parser-531"><span class="linenos"> 531</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_introducer</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
+</span><span id="Parser-532"><a href="#Parser-532"><span class="linenos"> 532</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_national</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
+</span><span id="Parser-533"><a href="#Parser-533"><span class="linenos"> 533</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_session_parameter</span><span class="p">(),</span>
+</span><span id="Parser-534"><a href="#Parser-534"><span class="linenos"> 534</span></a> <span class="p">}</span>
+</span><span id="Parser-535"><a href="#Parser-535"><span class="linenos"> 535</span></a>
+</span><span id="Parser-536"><a href="#Parser-536"><span class="linenos"> 536</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-537"><a href="#Parser-537"><span class="linenos"> 537</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</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">Placeholder</span><span class="p">),</span>
+</span><span id="Parser-538"><a href="#Parser-538"><span class="linenos"> 538</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</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_parameter</span><span class="p">(),</span>
+</span><span id="Parser-539"><a href="#Parser-539"><span class="linenos"> 539</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</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">Placeholder</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-540"><a href="#Parser-540"><span class="linenos"> 540</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">NUMBER</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-541"><a href="#Parser-541"><span class="linenos"> 541</span></a> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-542"><a href="#Parser-542"><span class="linenos"> 542</span></a> <span class="p">}</span>
+</span><span id="Parser-543"><a href="#Parser-543"><span class="linenos"> 543</span></a>
+</span><span id="Parser-544"><a href="#Parser-544"><span class="linenos"> 544</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-545"><a href="#Parser-545"><span class="linenos"> 545</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</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_between</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Parser-546"><a href="#Parser-546"><span class="linenos"> 546</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</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">Glob</span><span class="p">),</span>
+</span><span id="Parser-547"><a href="#Parser-547"><span class="linenos"> 547</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</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">Overlaps</span><span class="p">),</span>
+</span><span id="Parser-548"><a href="#Parser-548"><span class="linenos"> 548</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</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_in</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Parser-549"><a href="#Parser-549"><span class="linenos"> 549</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</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_is</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
+</span><span id="Parser-550"><a href="#Parser-550"><span class="linenos"> 550</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</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">Like</span><span class="p">),</span>
+</span><span id="Parser-551"><a href="#Parser-551"><span class="linenos"> 551</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</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">ILike</span><span class="p">),</span>
+</span><span id="Parser-552"><a href="#Parser-552"><span class="linenos"> 552</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</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">RegexpILike</span><span class="p">),</span>
+</span><span id="Parser-553"><a href="#Parser-553"><span class="linenos"> 553</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</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">RegexpLike</span><span class="p">),</span>
+</span><span id="Parser-554"><a href="#Parser-554"><span class="linenos"> 554</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</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">SimilarTo</span><span class="p">),</span>
+</span><span id="Parser-555"><a href="#Parser-555"><span class="linenos"> 555</span></a> <span class="p">}</span>
+</span><span id="Parser-556"><a href="#Parser-556"><span class="linenos"> 556</span></a>
+</span><span id="Parser-557"><a href="#Parser-557"><span class="linenos"> 557</span></a> <span class="n">PROPERTY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-558"><a href="#Parser-558"><span class="linenos"> 558</span></a> <span class="s2">&quot;AFTER&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_afterjournal</span><span class="p">(</span>
+</span><span id="Parser-559"><a href="#Parser-559"><span class="linenos"> 559</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
+</span><span id="Parser-560"><a href="#Parser-560"><span class="linenos"> 560</span></a> <span class="p">),</span>
+</span><span id="Parser-561"><a href="#Parser-561"><span class="linenos"> 561</span></a> <span class="s2">&quot;ALGORITHM&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">),</span>
+</span><span id="Parser-562"><a href="#Parser-562"><span class="linenos"> 562</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">),</span>
+</span><span id="Parser-563"><a href="#Parser-563"><span class="linenos"> 563</span></a> <span class="s2">&quot;BEFORE&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_journal</span><span class="p">(</span>
+</span><span id="Parser-564"><a href="#Parser-564"><span class="linenos"> 564</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
+</span><span id="Parser-565"><a href="#Parser-565"><span class="linenos"> 565</span></a> <span class="p">),</span>
+</span><span id="Parser-566"><a href="#Parser-566"><span class="linenos"> 566</span></a> <span class="s2">&quot;BLOCKCOMPRESSION&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_blockcompression</span><span class="p">(),</span>
+</span><span id="Parser-567"><a href="#Parser-567"><span class="linenos"> 567</span></a> <span class="s2">&quot;CHARACTER 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">_parse_character_set</span><span class="p">(),</span>
+</span><span id="Parser-568"><a href="#Parser-568"><span class="linenos"> 568</span></a> <span class="s2">&quot;CHECKSUM&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_checksum</span><span class="p">(),</span>
+</span><span id="Parser-569"><a href="#Parser-569"><span class="linenos"> 569</span></a> <span class="s2">&quot;CLUSTER BY&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><span id="Parser-570"><a href="#Parser-570"><span class="linenos"> 570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</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-571"><a href="#Parser-571"><span class="linenos"> 571</span></a> <span class="p">),</span>
+</span><span id="Parser-572"><a href="#Parser-572"><span class="linenos"> 572</span></a> <span class="s2">&quot;COLLATE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">),</span>
+</span><span id="Parser-573"><a href="#Parser-573"><span class="linenos"> 573</span></a> <span class="s2">&quot;COMMENT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">),</span>
+</span><span id="Parser-574"><a href="#Parser-574"><span class="linenos"> 574</span></a> <span class="s2">&quot;DATABLOCKSIZE&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_datablocksize</span><span class="p">(</span>
+</span><span id="Parser-575"><a href="#Parser-575"><span class="linenos"> 575</span></a> <span class="n">default</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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Parser-576"><a href="#Parser-576"><span class="linenos"> 576</span></a> <span class="p">),</span>
+</span><span id="Parser-577"><a href="#Parser-577"><span class="linenos"> 577</span></a> <span class="s2">&quot;DEFINER&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_definer</span><span class="p">(),</span>
+</span><span id="Parser-578"><a href="#Parser-578"><span class="linenos"> 578</span></a> <span class="s2">&quot;DETERMINISTIC&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><span id="Parser-579"><a href="#Parser-579"><span class="linenos"> 579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-580"><a href="#Parser-580"><span class="linenos"> 580</span></a> <span class="p">),</span>
+</span><span id="Parser-581"><a href="#Parser-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;DISTKEY&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_distkey</span><span class="p">(),</span>
+</span><span id="Parser-582"><a href="#Parser-582"><span class="linenos"> 582</span></a> <span class="s2">&quot;DISTSTYLE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">),</span>
+</span><span id="Parser-583"><a href="#Parser-583"><span class="linenos"> 583</span></a> <span class="s2">&quot;EXECUTE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">),</span>
+</span><span id="Parser-584"><a href="#Parser-584"><span class="linenos"> 584</span></a> <span class="s2">&quot;EXTERNAL&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">ExternalProperty</span><span class="p">),</span>
+</span><span id="Parser-585"><a href="#Parser-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;FALLBACK&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_fallback</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
+</span><span id="Parser-586"><a href="#Parser-586"><span class="linenos"> 586</span></a> <span class="s2">&quot;FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
+</span><span id="Parser-587"><a href="#Parser-587"><span class="linenos"> 587</span></a> <span class="s2">&quot;FREESPACE&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_freespace</span><span class="p">(),</span>
+</span><span id="Parser-588"><a href="#Parser-588"><span class="linenos"> 588</span></a> <span class="s2">&quot;GLOBAL&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-589"><a href="#Parser-589"><span class="linenos"> 589</span></a> <span class="s2">&quot;IMMUTABLE&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><span id="Parser-590"><a href="#Parser-590"><span class="linenos"> 590</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-591"><a href="#Parser-591"><span class="linenos"> 591</span></a> <span class="p">),</span>
+</span><span id="Parser-592"><a href="#Parser-592"><span class="linenos"> 592</span></a> <span class="s2">&quot;JOURNAL&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_journal</span><span class="p">(</span>
+</span><span id="Parser-593"><a href="#Parser-593"><span class="linenos"> 593</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="n">dual</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="o">==</span> <span class="s2">&quot;DUAL&quot;</span>
+</span><span id="Parser-594"><a href="#Parser-594"><span class="linenos"> 594</span></a> <span class="p">),</span>
+</span><span id="Parser-595"><a href="#Parser-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;LANGUAGE&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">),</span>
+</span><span id="Parser-596"><a href="#Parser-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
+</span><span id="Parser-597"><a href="#Parser-597"><span class="linenos"> 597</span></a> <span class="s2">&quot;LOCAL&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-598"><a href="#Parser-598"><span class="linenos"> 598</span></a> <span class="s2">&quot;LOCATION&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">),</span>
+</span><span id="Parser-599"><a href="#Parser-599"><span class="linenos"> 599</span></a> <span class="s2">&quot;LOCK&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_locking</span><span class="p">(),</span>
+</span><span id="Parser-600"><a href="#Parser-600"><span class="linenos"> 600</span></a> <span class="s2">&quot;LOCKING&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_locking</span><span class="p">(),</span>
+</span><span id="Parser-601"><a href="#Parser-601"><span class="linenos"> 601</span></a> <span class="s2">&quot;LOG&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_log</span><span class="p">(</span><span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</span><span class="p">),</span>
+</span><span id="Parser-602"><a href="#Parser-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;MATERIALIZED&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">MaterializedProperty</span><span class="p">),</span>
+</span><span id="Parser-603"><a href="#Parser-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;MAX&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_datablocksize</span><span class="p">(),</span>
+</span><span id="Parser-604"><a href="#Parser-604"><span class="linenos"> 604</span></a> <span class="s2">&quot;MAXIMUM&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_datablocksize</span><span class="p">(),</span>
+</span><span id="Parser-605"><a href="#Parser-605"><span class="linenos"> 605</span></a> <span class="s2">&quot;MERGEBLOCKRATIO&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_mergeblockratio</span><span class="p">(</span>
+</span><span id="Parser-606"><a href="#Parser-606"><span class="linenos"> 606</span></a> <span class="n">no</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="o">==</span> <span class="s2">&quot;NO&quot;</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">_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="o">==</span> <span class="s2">&quot;DEFAULT&quot;</span>
+</span><span id="Parser-607"><a href="#Parser-607"><span class="linenos"> 607</span></a> <span class="p">),</span>
+</span><span id="Parser-608"><a href="#Parser-608"><span class="linenos"> 608</span></a> <span class="s2">&quot;MIN&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_datablocksize</span><span class="p">(),</span>
+</span><span id="Parser-609"><a href="#Parser-609"><span class="linenos"> 609</span></a> <span class="s2">&quot;MINIMUM&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_datablocksize</span><span class="p">(),</span>
+</span><span id="Parser-610"><a href="#Parser-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;MULTISET&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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-611"><a href="#Parser-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;NO&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_noprimaryindex</span><span class="p">(),</span>
+</span><span id="Parser-612"><a href="#Parser-612"><span class="linenos"> 612</span></a> <span class="s2">&quot;NOT&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_afterjournal</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-613"><a href="#Parser-613"><span class="linenos"> 613</span></a> <span class="s2">&quot;ON&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_oncommit</span><span class="p">(),</span>
+</span><span id="Parser-614"><a href="#Parser-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;PARTITION BY&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_partitioned_by</span><span class="p">(),</span>
+</span><span id="Parser-615"><a href="#Parser-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;PARTITIONED BY&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_partitioned_by</span><span class="p">(),</span>
+</span><span id="Parser-616"><a href="#Parser-616"><span class="linenos"> 616</span></a> <span class="s2">&quot;PARTITIONED_BY&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_partitioned_by</span><span class="p">(),</span>
+</span><span id="Parser-617"><a href="#Parser-617"><span class="linenos"> 617</span></a> <span class="s2">&quot;RETURNS&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_returns</span><span class="p">(),</span>
+</span><span id="Parser-618"><a href="#Parser-618"><span class="linenos"> 618</span></a> <span class="s2">&quot;ROW&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_row</span><span class="p">(),</span>
+</span><span id="Parser-619"><a href="#Parser-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;ROW_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">),</span>
+</span><span id="Parser-620"><a href="#Parser-620"><span class="linenos"> 620</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">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-621"><a href="#Parser-621"><span class="linenos"> 621</span></a> <span class="s2">&quot;SORTKEY&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_sortkey</span><span class="p">(),</span>
+</span><span id="Parser-622"><a href="#Parser-622"><span class="linenos"> 622</span></a> <span class="s2">&quot;STABLE&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><span id="Parser-623"><a href="#Parser-623"><span class="linenos"> 623</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;STABLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-624"><a href="#Parser-624"><span class="linenos"> 624</span></a> <span class="p">),</span>
+</span><span id="Parser-625"><a href="#Parser-625"><span class="linenos"> 625</span></a> <span class="s2">&quot;STORED&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_stored</span><span class="p">(),</span>
+</span><span id="Parser-626"><a href="#Parser-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;TABLE_FORMAT&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
+</span><span id="Parser-627"><a href="#Parser-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;TBLPROPERTIES&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_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">),</span>
+</span><span id="Parser-628"><a href="#Parser-628"><span class="linenos"> 628</span></a> <span class="s2">&quot;TEMP&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-629"><a href="#Parser-629"><span class="linenos"> 629</span></a> <span class="s2">&quot;TEMPORARY&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_temporary</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-630"><a href="#Parser-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;TRANSIENT&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">TransientProperty</span><span class="p">),</span>
+</span><span id="Parser-631"><a href="#Parser-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;USING&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_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableFormatProperty</span><span class="p">),</span>
+</span><span id="Parser-632"><a href="#Parser-632"><span class="linenos"> 632</span></a> <span class="s2">&quot;VOLATILE&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_volatile_property</span><span class="p">(),</span>
+</span><span id="Parser-633"><a href="#Parser-633"><span class="linenos"> 633</span></a> <span class="s2">&quot;WITH&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_with_property</span><span class="p">(),</span>
+</span><span id="Parser-634"><a href="#Parser-634"><span class="linenos"> 634</span></a> <span class="p">}</span>
+</span><span id="Parser-635"><a href="#Parser-635"><span class="linenos"> 635</span></a>
+</span><span id="Parser-636"><a href="#Parser-636"><span class="linenos"> 636</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-637"><a href="#Parser-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;AUTOINCREMENT&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_auto_increment</span><span class="p">(),</span>
+</span><span id="Parser-638"><a href="#Parser-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;AUTO_INCREMENT&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_auto_increment</span><span class="p">(),</span>
+</span><span id="Parser-639"><a href="#Parser-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;CASESPECIFIC&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">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-640"><a href="#Parser-640"><span class="linenos"> 640</span></a> <span class="s2">&quot;CHARACTER 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><span id="Parser-641"><a href="#Parser-641"><span class="linenos"> 641</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetColumnConstraint</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-642"><a href="#Parser-642"><span class="linenos"> 642</span></a> <span class="p">),</span>
+</span><span id="Parser-643"><a href="#Parser-643"><span class="linenos"> 643</span></a> <span class="s2">&quot;CHECK&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><span id="Parser-644"><a href="#Parser-644"><span class="linenos"> 644</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</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</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-645"><a href="#Parser-645"><span class="linenos"> 645</span></a> <span class="p">),</span>
+</span><span id="Parser-646"><a href="#Parser-646"><span class="linenos"> 646</span></a> <span class="s2">&quot;COLLATE&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><span id="Parser-647"><a href="#Parser-647"><span class="linenos"> 647</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</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-648"><a href="#Parser-648"><span class="linenos"> 648</span></a> <span class="p">),</span>
+</span><span id="Parser-649"><a href="#Parser-649"><span class="linenos"> 649</span></a> <span class="s2">&quot;COMMENT&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><span id="Parser-650"><a href="#Parser-650"><span class="linenos"> 650</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</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><span id="Parser-651"><a href="#Parser-651"><span class="linenos"> 651</span></a> <span class="p">),</span>
+</span><span id="Parser-652"><a href="#Parser-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;COMPRESS&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_compress</span><span class="p">(),</span>
+</span><span id="Parser-653"><a href="#Parser-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;DEFAULT&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><span id="Parser-654"><a href="#Parser-654"><span class="linenos"> 654</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</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-655"><a href="#Parser-655"><span class="linenos"> 655</span></a> <span class="p">),</span>
+</span><span id="Parser-656"><a href="#Parser-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;ENCODE&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">EncodeColumnConstraint</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-657"><a href="#Parser-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;FOREIGN KEY&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_foreign_key</span><span class="p">(),</span>
+</span><span id="Parser-658"><a href="#Parser-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;FORMAT&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><span id="Parser-659"><a href="#Parser-659"><span class="linenos"> 659</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</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-660"><a href="#Parser-660"><span class="linenos"> 660</span></a> <span class="p">),</span>
+</span><span id="Parser-661"><a href="#Parser-661"><span class="linenos"> 661</span></a> <span class="s2">&quot;GENERATED&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_generated_as_identity</span><span class="p">(),</span>
+</span><span id="Parser-662"><a href="#Parser-662"><span class="linenos"> 662</span></a> <span class="s2">&quot;IDENTITY&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_auto_increment</span><span class="p">(),</span>
+</span><span id="Parser-663"><a href="#Parser-663"><span class="linenos"> 663</span></a> <span class="s2">&quot;INLINE&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_inline</span><span class="p">(),</span>
+</span><span id="Parser-664"><a href="#Parser-664"><span class="linenos"> 664</span></a> <span class="s2">&quot;LIKE&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_create_like</span><span class="p">(),</span>
+</span><span id="Parser-665"><a href="#Parser-665"><span class="linenos"> 665</span></a> <span class="s2">&quot;NOT&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_not_constraint</span><span class="p">(),</span>
+</span><span id="Parser-666"><a href="#Parser-666"><span class="linenos"> 666</span></a> <span class="s2">&quot;NULL&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">NotNullColumnConstraint</span><span class="p">,</span> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-667"><a href="#Parser-667"><span class="linenos"> 667</span></a> <span class="s2">&quot;ON&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">_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-668"><a href="#Parser-668"><span class="linenos"> 668</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</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_function</span><span class="p">()),</span>
+</span><span id="Parser-669"><a href="#Parser-669"><span class="linenos"> 669</span></a> <span class="s2">&quot;PATH&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">PathColumnConstraint</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><span id="Parser-670"><a href="#Parser-670"><span class="linenos"> 670</span></a> <span class="s2">&quot;PRIMARY KEY&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_primary_key</span><span class="p">(),</span>
+</span><span id="Parser-671"><a href="#Parser-671"><span class="linenos"> 671</span></a> <span class="s2">&quot;REFERENCES&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_references</span><span class="p">(</span><span class="n">match</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-672"><a href="#Parser-672"><span class="linenos"> 672</span></a> <span class="s2">&quot;TITLE&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><span id="Parser-673"><a href="#Parser-673"><span class="linenos"> 673</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</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-674"><a href="#Parser-674"><span class="linenos"> 674</span></a> <span class="p">),</span>
+</span><span id="Parser-675"><a href="#Parser-675"><span class="linenos"> 675</span></a> <span class="s2">&quot;UNIQUE&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_unique</span><span class="p">(),</span>
+</span><span id="Parser-676"><a href="#Parser-676"><span class="linenos"> 676</span></a> <span class="s2">&quot;UPPERCASE&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">UppercaseColumnConstraint</span><span class="p">),</span>
+</span><span id="Parser-677"><a href="#Parser-677"><span class="linenos"> 677</span></a> <span class="p">}</span>
+</span><span id="Parser-678"><a href="#Parser-678"><span class="linenos"> 678</span></a>
+</span><span id="Parser-679"><a href="#Parser-679"><span class="linenos"> 679</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-680"><a href="#Parser-680"><span class="linenos"> 680</span></a> <span class="s2">&quot;ADD&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_alter_table_add</span><span class="p">(),</span>
+</span><span id="Parser-681"><a href="#Parser-681"><span class="linenos"> 681</span></a> <span class="s2">&quot;ALTER&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_alter_table_alter</span><span class="p">(),</span>
+</span><span id="Parser-682"><a href="#Parser-682"><span class="linenos"> 682</span></a> <span class="s2">&quot;DELETE&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">Delete</span><span class="p">,</span> <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-683"><a href="#Parser-683"><span class="linenos"> 683</span></a> <span class="s2">&quot;DROP&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_alter_table_drop</span><span class="p">(),</span>
+</span><span id="Parser-684"><a href="#Parser-684"><span class="linenos"> 684</span></a> <span class="s2">&quot;RENAME&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_alter_table_rename</span><span class="p">(),</span>
+</span><span id="Parser-685"><a href="#Parser-685"><span class="linenos"> 685</span></a> <span class="p">}</span>
+</span><span id="Parser-686"><a href="#Parser-686"><span class="linenos"> 686</span></a>
+</span><span id="Parser-687"><a href="#Parser-687"><span class="linenos"> 687</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;CHECK&quot;</span><span class="p">,</span> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;LIKE&quot;</span><span class="p">,</span> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">}</span>
+</span><span id="Parser-688"><a href="#Parser-688"><span class="linenos"> 688</span></a>
+</span><span id="Parser-689"><a href="#Parser-689"><span class="linenos"> 689</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-690"><a href="#Parser-690"><span class="linenos"> 690</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</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">Any</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-691"><a href="#Parser-691"><span class="linenos"> 691</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</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_case</span><span class="p">(),</span>
+</span><span id="Parser-692"><a href="#Parser-692"><span class="linenos"> 692</span></a> <span class="n">TokenType</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="bp">self</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">(),</span>
+</span><span id="Parser-693"><a href="#Parser-693"><span class="linenos"> 693</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT_VALUE_FOR</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><span id="Parser-694"><a href="#Parser-694"><span class="linenos"> 694</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
+</span><span id="Parser-695"><a href="#Parser-695"><span class="linenos"> 695</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-696"><a href="#Parser-696"><span class="linenos"> 696</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-697"><a href="#Parser-697"><span class="linenos"> 697</span></a> <span class="p">),</span>
+</span><span id="Parser-698"><a href="#Parser-698"><span class="linenos"> 698</span></a> <span class="p">}</span>
+</span><span id="Parser-699"><a href="#Parser-699"><span class="linenos"> 699</span></a>
+</span><span id="Parser-700"><a href="#Parser-700"><span class="linenos"> 700</span></a> <span class="n">FUNCTION_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-701"><a href="#Parser-701"><span class="linenos"> 701</span></a> <span class="s2">&quot;CAST&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_cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
+</span><span id="Parser-702"><a href="#Parser-702"><span class="linenos"> 702</span></a> <span class="s2">&quot;CONVERT&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_convert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
+</span><span id="Parser-703"><a href="#Parser-703"><span class="linenos"> 703</span></a> <span class="s2">&quot;DECODE&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_decode</span><span class="p">(),</span>
+</span><span id="Parser-704"><a href="#Parser-704"><span class="linenos"> 704</span></a> <span class="s2">&quot;EXTRACT&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_extract</span><span class="p">(),</span>
+</span><span id="Parser-705"><a href="#Parser-705"><span class="linenos"> 705</span></a> <span class="s2">&quot;JSON_OBJECT&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_json_object</span><span class="p">(),</span>
+</span><span id="Parser-706"><a href="#Parser-706"><span class="linenos"> 706</span></a> <span class="s2">&quot;LOG&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_logarithm</span><span class="p">(),</span>
+</span><span id="Parser-707"><a href="#Parser-707"><span class="linenos"> 707</span></a> <span class="s2">&quot;MATCH&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_match_against</span><span class="p">(),</span>
+</span><span id="Parser-708"><a href="#Parser-708"><span class="linenos"> 708</span></a> <span class="s2">&quot;POSITION&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_position</span><span class="p">(),</span>
+</span><span id="Parser-709"><a href="#Parser-709"><span class="linenos"> 709</span></a> <span class="s2">&quot;STRING_AGG&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_string_agg</span><span class="p">(),</span>
+</span><span id="Parser-710"><a href="#Parser-710"><span class="linenos"> 710</span></a> <span class="s2">&quot;SUBSTRING&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_substring</span><span class="p">(),</span>
+</span><span id="Parser-711"><a href="#Parser-711"><span class="linenos"> 711</span></a> <span class="s2">&quot;TRIM&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_trim</span><span class="p">(),</span>
+</span><span id="Parser-712"><a href="#Parser-712"><span class="linenos"> 712</span></a> <span class="s2">&quot;TRY_CAST&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_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-713"><a href="#Parser-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;TRY_CONVERT&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_convert</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-714"><a href="#Parser-714"><span class="linenos"> 714</span></a> <span class="p">}</span>
+</span><span id="Parser-715"><a href="#Parser-715"><span class="linenos"> 715</span></a>
+</span><span id="Parser-716"><a href="#Parser-716"><span class="linenos"> 716</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-717"><a href="#Parser-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;match&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_match_recognize</span><span class="p">(),</span>
+</span><span id="Parser-718"><a href="#Parser-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;where&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_where</span><span class="p">(),</span>
+</span><span id="Parser-719"><a href="#Parser-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;group&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_group</span><span class="p">(),</span>
+</span><span id="Parser-720"><a href="#Parser-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;having&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_having</span><span class="p">(),</span>
+</span><span id="Parser-721"><a href="#Parser-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;qualify&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_qualify</span><span class="p">(),</span>
+</span><span id="Parser-722"><a href="#Parser-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;windows&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_window_clause</span><span class="p">(),</span>
+</span><span id="Parser-723"><a href="#Parser-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;distribute&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Distribute</span><span class="p">),</span>
+</span><span id="Parser-724"><a href="#Parser-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;sort&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">),</span>
+</span><span id="Parser-725"><a href="#Parser-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;cluster&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_sort</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 class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">),</span>
+</span><span id="Parser-726"><a href="#Parser-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;order&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_order</span><span class="p">(),</span>
+</span><span id="Parser-727"><a href="#Parser-727"><span class="linenos"> 727</span></a> <span class="s2">&quot;limit&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_limit</span><span class="p">(),</span>
+</span><span id="Parser-728"><a href="#Parser-728"><span class="linenos"> 728</span></a> <span class="s2">&quot;offset&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_offset</span><span class="p">(),</span>
+</span><span id="Parser-729"><a href="#Parser-729"><span class="linenos"> 729</span></a> <span class="s2">&quot;lock&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_lock</span><span class="p">(),</span>
+</span><span id="Parser-730"><a href="#Parser-730"><span class="linenos"> 730</span></a> <span class="s2">&quot;sample&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_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-731"><a href="#Parser-731"><span class="linenos"> 731</span></a> <span class="p">}</span>
+</span><span id="Parser-732"><a href="#Parser-732"><span class="linenos"> 732</span></a>
+</span><span id="Parser-733"><a href="#Parser-733"><span class="linenos"> 733</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-734"><a href="#Parser-734"><span class="linenos"> 734</span></a> <span class="s2">&quot;GLOBAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">),</span>
+</span><span id="Parser-735"><a href="#Parser-735"><span class="linenos"> 735</span></a> <span class="s2">&quot;LOCAL&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">),</span>
+</span><span id="Parser-736"><a href="#Parser-736"><span class="linenos"> 736</span></a> <span class="s2">&quot;SESSION&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_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;SESSION&quot;</span><span class="p">),</span>
+</span><span id="Parser-737"><a href="#Parser-737"><span class="linenos"> 737</span></a> <span class="s2">&quot;TRANSACTION&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_set_transaction</span><span class="p">(),</span>
+</span><span id="Parser-738"><a href="#Parser-738"><span class="linenos"> 738</span></a> <span class="p">}</span>
</span><span id="Parser-739"><a href="#Parser-739"><span class="linenos"> 739</span></a>
-</span><span id="Parser-740"><a href="#Parser-740"><span class="linenos"> 740</span></a> <span class="n">TRANSACTION_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">}</span>
+</span><span id="Parser-740"><a href="#Parser-740"><span class="linenos"> 740</span></a> <span class="n">SHOW_PARSERS</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Parser-741"><a href="#Parser-741"><span class="linenos"> 741</span></a>
-</span><span id="Parser-742"><a href="#Parser-742"><span class="linenos"> 742</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Parser-743"><a href="#Parser-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&quot;</span><span class="p">,</span>
-</span><span id="Parser-744"><a href="#Parser-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;ISOLATION LEVEL READ COMMITTED&quot;</span><span class="p">,</span>
-</span><span id="Parser-745"><a href="#Parser-745"><span class="linenos"> 745</span></a> <span class="s2">&quot;ISOLATION LEVEL READ UNCOMMITTED&quot;</span><span class="p">,</span>
-</span><span id="Parser-746"><a href="#Parser-746"><span class="linenos"> 746</span></a> <span class="s2">&quot;ISOLATION LEVEL SERIALIZABLE&quot;</span><span class="p">,</span>
-</span><span id="Parser-747"><a href="#Parser-747"><span class="linenos"> 747</span></a> <span class="s2">&quot;READ WRITE&quot;</span><span class="p">,</span>
-</span><span id="Parser-748"><a href="#Parser-748"><span class="linenos"> 748</span></a> <span class="s2">&quot;READ ONLY&quot;</span><span class="p">,</span>
-</span><span id="Parser-749"><a href="#Parser-749"><span class="linenos"> 749</span></a> <span class="p">}</span>
-</span><span id="Parser-750"><a href="#Parser-750"><span class="linenos"> 750</span></a>
-</span><span id="Parser-751"><a href="#Parser-751"><span class="linenos"> 751</span></a> <span class="n">INSERT_ALTERNATIVES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">}</span>
-</span><span id="Parser-752"><a href="#Parser-752"><span class="linenos"> 752</span></a>
-</span><span id="Parser-753"><a href="#Parser-753"><span class="linenos"> 753</span></a> <span class="n">WINDOW_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-754"><a href="#Parser-754"><span class="linenos"> 754</span></a>
-</span><span id="Parser-755"><a href="#Parser-755"><span class="linenos"> 755</span></a> <span class="n">ADD_CONSTRAINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</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 class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">}</span>
+</span><span id="Parser-742"><a href="#Parser-742"><span class="linenos"> 742</span></a> <span class="n">TYPE_LITERAL_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="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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-743"><a href="#Parser-743"><span class="linenos"> 743</span></a>
+</span><span id="Parser-744"><a href="#Parser-744"><span class="linenos"> 744</span></a> <span class="n">MODIFIABLES</span> <span class="o">=</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">Subqueryable</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="Parser-745"><a href="#Parser-745"><span class="linenos"> 745</span></a>
+</span><span id="Parser-746"><a href="#Parser-746"><span class="linenos"> 746</span></a> <span class="n">TRANSACTION_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">}</span>
+</span><span id="Parser-747"><a href="#Parser-747"><span class="linenos"> 747</span></a>
+</span><span id="Parser-748"><a href="#Parser-748"><span class="linenos"> 748</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Parser-749"><a href="#Parser-749"><span class="linenos"> 749</span></a> <span class="s2">&quot;ISOLATION LEVEL REPEATABLE READ&quot;</span><span class="p">,</span>
+</span><span id="Parser-750"><a href="#Parser-750"><span class="linenos"> 750</span></a> <span class="s2">&quot;ISOLATION LEVEL READ COMMITTED&quot;</span><span class="p">,</span>
+</span><span id="Parser-751"><a href="#Parser-751"><span class="linenos"> 751</span></a> <span class="s2">&quot;ISOLATION LEVEL READ UNCOMMITTED&quot;</span><span class="p">,</span>
+</span><span id="Parser-752"><a href="#Parser-752"><span class="linenos"> 752</span></a> <span class="s2">&quot;ISOLATION LEVEL SERIALIZABLE&quot;</span><span class="p">,</span>
+</span><span id="Parser-753"><a href="#Parser-753"><span class="linenos"> 753</span></a> <span class="s2">&quot;READ WRITE&quot;</span><span class="p">,</span>
+</span><span id="Parser-754"><a href="#Parser-754"><span class="linenos"> 754</span></a> <span class="s2">&quot;READ ONLY&quot;</span><span class="p">,</span>
+</span><span id="Parser-755"><a href="#Parser-755"><span class="linenos"> 755</span></a> <span class="p">}</span>
</span><span id="Parser-756"><a href="#Parser-756"><span class="linenos"> 756</span></a>
-</span><span id="Parser-757"><a href="#Parser-757"><span class="linenos"> 757</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-757"><a href="#Parser-757"><span class="linenos"> 757</span></a> <span class="n">INSERT_ALTERNATIVES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">}</span>
</span><span id="Parser-758"><a href="#Parser-758"><span class="linenos"> 758</span></a>
-</span><span id="Parser-759"><a href="#Parser-759"><span class="linenos"> 759</span></a> <span class="n">CONVERT_TYPE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-760"><a href="#Parser-760"><span class="linenos"> 760</span></a>
-</span><span id="Parser-761"><a href="#Parser-761"><span class="linenos"> 761</span></a> <span class="n">QUOTED_PIVOT_COLUMNS</span><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-762"><a href="#Parser-762"><span class="linenos"> 762</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-759"><a href="#Parser-759"><span class="linenos"> 759</span></a> <span class="n">WINDOW_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</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-760"><a href="#Parser-760"><span class="linenos"> 760</span></a> <span class="n">WINDOW_BEFORE_PAREN_TOKENS</span> <span class="o">=</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="Parser-761"><a href="#Parser-761"><span class="linenos"> 761</span></a>
+</span><span id="Parser-762"><a href="#Parser-762"><span class="linenos"> 762</span></a> <span class="n">ADD_CONSTRAINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</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 class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">}</span>
</span><span id="Parser-763"><a href="#Parser-763"><span class="linenos"> 763</span></a>
-</span><span id="Parser-764"><a href="#Parser-764"><span class="linenos"> 764</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-765"><a href="#Parser-765"><span class="linenos"> 765</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-766"><a href="#Parser-766"><span class="linenos"> 766</span></a>
-</span><span id="Parser-767"><a href="#Parser-767"><span class="linenos"> 767</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-768"><a href="#Parser-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
-</span><span id="Parser-769"><a href="#Parser-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
-</span><span id="Parser-770"><a href="#Parser-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="Parser-771"><a href="#Parser-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
-</span><span id="Parser-772"><a href="#Parser-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">,</span>
-</span><span id="Parser-773"><a href="#Parser-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">,</span>
-</span><span id="Parser-774"><a href="#Parser-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">,</span>
-</span><span id="Parser-775"><a href="#Parser-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
-</span><span id="Parser-776"><a href="#Parser-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">,</span>
-</span><span id="Parser-777"><a href="#Parser-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
-</span><span id="Parser-778"><a href="#Parser-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
-</span><span id="Parser-779"><a href="#Parser-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
-</span><span id="Parser-780"><a href="#Parser-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
-</span><span id="Parser-781"><a href="#Parser-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
-</span><span id="Parser-782"><a href="#Parser-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
-</span><span id="Parser-783"><a href="#Parser-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;_show_trie&quot;</span><span class="p">,</span>
-</span><span id="Parser-784"><a href="#Parser-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;_set_trie&quot;</span><span class="p">,</span>
-</span><span id="Parser-785"><a href="#Parser-785"><span class="linenos"> 785</span></a> <span class="p">)</span>
-</span><span id="Parser-786"><a href="#Parser-786"><span class="linenos"> 786</span></a>
-</span><span id="Parser-787"><a href="#Parser-787"><span class="linenos"> 787</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Parser-788"><a href="#Parser-788"><span class="linenos"> 788</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-789"><a href="#Parser-789"><span class="linenos"> 789</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-790"><a href="#Parser-790"><span class="linenos"> 790</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
-</span><span id="Parser-791"><a href="#Parser-791"><span class="linenos"> 791</span></a> <span class="n">index_offset</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="Parser-792"><a href="#Parser-792"><span class="linenos"> 792</span></a> <span class="n">unnest_column_only</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-793"><a href="#Parser-793"><span class="linenos"> 793</span></a> <span class="n">alias_post_tablesample</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-794"><a href="#Parser-794"><span class="linenos"> 794</span></a> <span class="n">max_errors</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="Parser-795"><a href="#Parser-795"><span class="linenos"> 795</span></a> <span class="n">null_ordering</span><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="Parser-796"><a href="#Parser-796"><span class="linenos"> 796</span></a> <span class="p">):</span>
-</span><span id="Parser-797"><a href="#Parser-797"><span class="linenos"> 797</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
-</span><span id="Parser-798"><a href="#Parser-798"><span class="linenos"> 798</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
-</span><span id="Parser-799"><a href="#Parser-799"><span class="linenos"> 799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span> <span class="o">=</span> <span class="n">index_offset</span>
-</span><span id="Parser-800"><a href="#Parser-800"><span class="linenos"> 800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span> <span class="o">=</span> <span class="n">unnest_column_only</span>
-</span><span id="Parser-801"><a href="#Parser-801"><span class="linenos"> 801</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="n">alias_post_tablesample</span>
-</span><span id="Parser-802"><a href="#Parser-802"><span class="linenos"> 802</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
-</span><span id="Parser-803"><a href="#Parser-803"><span class="linenos"> 803</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span> <span class="o">=</span> <span class="n">null_ordering</span>
-</span><span id="Parser-804"><a href="#Parser-804"><span class="linenos"> 804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="Parser-805"><a href="#Parser-805"><span class="linenos"> 805</span></a>
-</span><span id="Parser-806"><a href="#Parser-806"><span class="linenos"> 806</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><span id="Parser-807"><a href="#Parser-807"><span class="linenos"> 807</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="Parser-808"><a href="#Parser-808"><span class="linenos"> 808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-809"><a href="#Parser-809"><span class="linenos"> 809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-810"><a href="#Parser-810"><span class="linenos"> 810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Parser-811"><a href="#Parser-811"><span class="linenos"> 811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-812"><a href="#Parser-812"><span class="linenos"> 812</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-813"><a href="#Parser-813"><span class="linenos"> 813</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-814"><a href="#Parser-814"><span class="linenos"> 814</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-815"><a href="#Parser-815"><span class="linenos"> 815</span></a>
-</span><span id="Parser-816"><a href="#Parser-816"><span class="linenos"> 816</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
-</span><span id="Parser-817"><a href="#Parser-817"><span class="linenos"> 817</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_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="n">sql</span><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-818"><a href="#Parser-818"><span class="linenos"> 818</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="Parser-819"><a href="#Parser-819"><span class="linenos"> 819</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-820"><a href="#Parser-820"><span class="linenos"> 820</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
-</span><span id="Parser-821"><a href="#Parser-821"><span class="linenos"> 821</span></a><span class="sd"> per parsed SQL statement.</span>
+</span><span id="Parser-764"><a href="#Parser-764"><span class="linenos"> 764</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-765"><a href="#Parser-765"><span class="linenos"> 765</span></a>
+</span><span id="Parser-766"><a href="#Parser-766"><span class="linenos"> 766</span></a> <span class="n">CONVERT_TYPE_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-767"><a href="#Parser-767"><span class="linenos"> 767</span></a>
+</span><span id="Parser-768"><a href="#Parser-768"><span class="linenos"> 768</span></a> <span class="n">QUOTED_PIVOT_COLUMNS</span><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-769"><a href="#Parser-769"><span class="linenos"> 769</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-770"><a href="#Parser-770"><span class="linenos"> 770</span></a>
+</span><span id="Parser-771"><a href="#Parser-771"><span class="linenos"> 771</span></a> <span class="n">LOG_BASE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-772"><a href="#Parser-772"><span class="linenos"> 772</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-773"><a href="#Parser-773"><span class="linenos"> 773</span></a>
+</span><span id="Parser-774"><a href="#Parser-774"><span class="linenos"> 774</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-775"><a href="#Parser-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
+</span><span id="Parser-776"><a href="#Parser-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
+</span><span id="Parser-777"><a href="#Parser-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="Parser-778"><a href="#Parser-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
+</span><span id="Parser-779"><a href="#Parser-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;index_offset&quot;</span><span class="p">,</span>
+</span><span id="Parser-780"><a href="#Parser-780"><span class="linenos"> 780</span></a> <span class="s2">&quot;unnest_column_only&quot;</span><span class="p">,</span>
+</span><span id="Parser-781"><a href="#Parser-781"><span class="linenos"> 781</span></a> <span class="s2">&quot;alias_post_tablesample&quot;</span><span class="p">,</span>
+</span><span id="Parser-782"><a href="#Parser-782"><span class="linenos"> 782</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
+</span><span id="Parser-783"><a href="#Parser-783"><span class="linenos"> 783</span></a> <span class="s2">&quot;null_ordering&quot;</span><span class="p">,</span>
+</span><span id="Parser-784"><a href="#Parser-784"><span class="linenos"> 784</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
+</span><span id="Parser-785"><a href="#Parser-785"><span class="linenos"> 785</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
+</span><span id="Parser-786"><a href="#Parser-786"><span class="linenos"> 786</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
+</span><span id="Parser-787"><a href="#Parser-787"><span class="linenos"> 787</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
+</span><span id="Parser-788"><a href="#Parser-788"><span class="linenos"> 788</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
+</span><span id="Parser-789"><a href="#Parser-789"><span class="linenos"> 789</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
+</span><span id="Parser-790"><a href="#Parser-790"><span class="linenos"> 790</span></a> <span class="s2">&quot;_show_trie&quot;</span><span class="p">,</span>
+</span><span id="Parser-791"><a href="#Parser-791"><span class="linenos"> 791</span></a> <span class="s2">&quot;_set_trie&quot;</span><span class="p">,</span>
+</span><span id="Parser-792"><a href="#Parser-792"><span class="linenos"> 792</span></a> <span class="p">)</span>
+</span><span id="Parser-793"><a href="#Parser-793"><span class="linenos"> 793</span></a>
+</span><span id="Parser-794"><a href="#Parser-794"><span class="linenos"> 794</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Parser-795"><a href="#Parser-795"><span class="linenos"> 795</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-796"><a href="#Parser-796"><span class="linenos"> 796</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-797"><a href="#Parser-797"><span class="linenos"> 797</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
+</span><span id="Parser-798"><a href="#Parser-798"><span class="linenos"> 798</span></a> <span class="n">index_offset</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="Parser-799"><a href="#Parser-799"><span class="linenos"> 799</span></a> <span class="n">unnest_column_only</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-800"><a href="#Parser-800"><span class="linenos"> 800</span></a> <span class="n">alias_post_tablesample</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-801"><a href="#Parser-801"><span class="linenos"> 801</span></a> <span class="n">max_errors</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="Parser-802"><a href="#Parser-802"><span class="linenos"> 802</span></a> <span class="n">null_ordering</span><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="Parser-803"><a href="#Parser-803"><span class="linenos"> 803</span></a> <span class="p">):</span>
+</span><span id="Parser-804"><a href="#Parser-804"><span class="linenos"> 804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
+</span><span id="Parser-805"><a href="#Parser-805"><span class="linenos"> 805</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
+</span><span id="Parser-806"><a href="#Parser-806"><span class="linenos"> 806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span> <span class="o">=</span> <span class="n">index_offset</span>
+</span><span id="Parser-807"><a href="#Parser-807"><span class="linenos"> 807</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span> <span class="o">=</span> <span class="n">unnest_column_only</span>
+</span><span id="Parser-808"><a href="#Parser-808"><span class="linenos"> 808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="n">alias_post_tablesample</span>
+</span><span id="Parser-809"><a href="#Parser-809"><span class="linenos"> 809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
+</span><span id="Parser-810"><a href="#Parser-810"><span class="linenos"> 810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span> <span class="o">=</span> <span class="n">null_ordering</span>
+</span><span id="Parser-811"><a href="#Parser-811"><span class="linenos"> 811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Parser-812"><a href="#Parser-812"><span class="linenos"> 812</span></a>
+</span><span id="Parser-813"><a href="#Parser-813"><span class="linenos"> 813</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><span id="Parser-814"><a href="#Parser-814"><span class="linenos"> 814</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="Parser-815"><a href="#Parser-815"><span class="linenos"> 815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-816"><a href="#Parser-816"><span class="linenos"> 816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-817"><a href="#Parser-817"><span class="linenos"> 817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Parser-818"><a href="#Parser-818"><span class="linenos"> 818</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-819"><a href="#Parser-819"><span class="linenos"> 819</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-820"><a href="#Parser-820"><span class="linenos"> 820</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-821"><a href="#Parser-821"><span class="linenos"> 821</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-822"><a href="#Parser-822"><span class="linenos"> 822</span></a>
-</span><span id="Parser-823"><a href="#Parser-823"><span class="linenos"> 823</span></a><span class="sd"> Args:</span>
-</span><span id="Parser-824"><a href="#Parser-824"><span class="linenos"> 824</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
-</span><span id="Parser-825"><a href="#Parser-825"><span class="linenos"> 825</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
-</span><span id="Parser-826"><a href="#Parser-826"><span class="linenos"> 826</span></a>
-</span><span id="Parser-827"><a href="#Parser-827"><span class="linenos"> 827</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser-828"><a href="#Parser-828"><span class="linenos"> 828</span></a><span class="sd"> The list of syntax trees.</span>
-</span><span id="Parser-829"><a href="#Parser-829"><span class="linenos"> 829</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-830"><a href="#Parser-830"><span class="linenos"> 830</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
-</span><span id="Parser-831"><a href="#Parser-831"><span class="linenos"> 831</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
-</span><span id="Parser-832"><a href="#Parser-832"><span class="linenos"> 832</span></a> <span class="p">)</span>
+</span><span id="Parser-823"><a href="#Parser-823"><span class="linenos"> 823</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
+</span><span id="Parser-824"><a href="#Parser-824"><span class="linenos"> 824</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_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="n">sql</span><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-825"><a href="#Parser-825"><span class="linenos"> 825</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="Parser-826"><a href="#Parser-826"><span class="linenos"> 826</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-827"><a href="#Parser-827"><span class="linenos"> 827</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
+</span><span id="Parser-828"><a href="#Parser-828"><span class="linenos"> 828</span></a><span class="sd"> per parsed SQL statement.</span>
+</span><span id="Parser-829"><a href="#Parser-829"><span class="linenos"> 829</span></a>
+</span><span id="Parser-830"><a href="#Parser-830"><span class="linenos"> 830</span></a><span class="sd"> Args:</span>
+</span><span id="Parser-831"><a href="#Parser-831"><span class="linenos"> 831</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
+</span><span id="Parser-832"><a href="#Parser-832"><span class="linenos"> 832</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
</span><span id="Parser-833"><a href="#Parser-833"><span class="linenos"> 833</span></a>
-</span><span id="Parser-834"><a href="#Parser-834"><span class="linenos"> 834</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Parser-835"><a href="#Parser-835"><span class="linenos"> 835</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-836"><a href="#Parser-836"><span class="linenos"> 836</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
-</span><span id="Parser-837"><a href="#Parser-837"><span class="linenos"> 837</span></a> <span class="n">raw_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><span id="Parser-838"><a href="#Parser-838"><span class="linenos"> 838</span></a> <span class="n">sql</span><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="Parser-839"><a href="#Parser-839"><span class="linenos"> 839</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="Parser-840"><a href="#Parser-840"><span class="linenos"> 840</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-841"><a href="#Parser-841"><span class="linenos"> 841</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
-</span><span id="Parser-842"><a href="#Parser-842"><span class="linenos"> 842</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
-</span><span id="Parser-843"><a href="#Parser-843"><span class="linenos"> 843</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
-</span><span id="Parser-844"><a href="#Parser-844"><span class="linenos"> 844</span></a>
-</span><span id="Parser-845"><a href="#Parser-845"><span class="linenos"> 845</span></a><span class="sd"> Args:</span>
-</span><span id="Parser-846"><a href="#Parser-846"><span class="linenos"> 846</span></a><span class="sd"> expression_types: the expression type(s) to try and parse the token list into.</span>
-</span><span id="Parser-847"><a href="#Parser-847"><span class="linenos"> 847</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
-</span><span id="Parser-848"><a href="#Parser-848"><span class="linenos"> 848</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
-</span><span id="Parser-849"><a href="#Parser-849"><span class="linenos"> 849</span></a>
-</span><span id="Parser-850"><a href="#Parser-850"><span class="linenos"> 850</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser-851"><a href="#Parser-851"><span class="linenos"> 851</span></a><span class="sd"> The target Expression.</span>
-</span><span id="Parser-852"><a href="#Parser-852"><span class="linenos"> 852</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-853"><a href="#Parser-853"><span class="linenos"> 853</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-854"><a href="#Parser-854"><span class="linenos"> 854</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
-</span><span id="Parser-855"><a href="#Parser-855"><span class="linenos"> 855</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
-</span><span id="Parser-856"><a href="#Parser-856"><span class="linenos"> 856</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-857"><a href="#Parser-857"><span class="linenos"> 857</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-858"><a href="#Parser-858"><span class="linenos"> 858</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Parser-859"><a href="#Parser-859"><span class="linenos"> 859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Parser-860"><a href="#Parser-860"><span class="linenos"> 860</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="Parser-861"><a href="#Parser-861"><span class="linenos"> 861</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
-</span><span id="Parser-862"><a href="#Parser-862"><span class="linenos"> 862</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="Parser-863"><a href="#Parser-863"><span class="linenos"> 863</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser-864"><a href="#Parser-864"><span class="linenos"> 864</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Parser-865"><a href="#Parser-865"><span class="linenos"> 865</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</span><span class="p">),</span>
-</span><span id="Parser-866"><a href="#Parser-866"><span class="linenos"> 866</span></a> <span class="p">)</span> <span class="kn">from</span> <span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="Parser-867"><a href="#Parser-867"><span class="linenos"> 867</span></a>
-</span><span id="Parser-868"><a href="#Parser-868"><span class="linenos"> 868</span></a> <span class="k">def</span> <span class="nf">_parse</span><span class="p">(</span>
-</span><span id="Parser-869"><a href="#Parser-869"><span class="linenos"> 869</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-870"><a href="#Parser-870"><span class="linenos"> 870</span></a> <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">Parser</span><span 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-871"><a href="#Parser-871"><span class="linenos"> 871</span></a> <span class="n">raw_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><span id="Parser-872"><a href="#Parser-872"><span class="linenos"> 872</span></a> <span class="n">sql</span><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="Parser-873"><a href="#Parser-873"><span class="linenos"> 873</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="Parser-874"><a href="#Parser-874"><span class="linenos"> 874</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="Parser-875"><a href="#Parser-875"><span class="linenos"> 875</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 class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Parser-876"><a href="#Parser-876"><span class="linenos"> 876</span></a> <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">)</span>
-</span><span id="Parser-877"><a href="#Parser-877"><span class="linenos"> 877</span></a> <span class="n">chunks</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">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="Parser-878"><a href="#Parser-878"><span class="linenos"> 878</span></a>
-</span><span id="Parser-879"><a href="#Parser-879"><span class="linenos"> 879</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">token</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">):</span>
-</span><span id="Parser-880"><a href="#Parser-880"><span class="linenos"> 880</span></a> <span class="k">if</span> <span class="n">token</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">SEMICOLON</span><span class="p">:</span>
-</span><span id="Parser-881"><a href="#Parser-881"><span class="linenos"> 881</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">total</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-882"><a href="#Parser-882"><span class="linenos"> 882</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
-</span><span id="Parser-883"><a href="#Parser-883"><span class="linenos"> 883</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-884"><a href="#Parser-884"><span class="linenos"> 884</span></a> <span class="n">chunks</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">append</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
+</span><span id="Parser-834"><a href="#Parser-834"><span class="linenos"> 834</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser-835"><a href="#Parser-835"><span class="linenos"> 835</span></a><span class="sd"> The list of syntax trees.</span>
+</span><span id="Parser-836"><a href="#Parser-836"><span class="linenos"> 836</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-837"><a href="#Parser-837"><span class="linenos"> 837</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
+</span><span id="Parser-838"><a href="#Parser-838"><span class="linenos"> 838</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
+</span><span id="Parser-839"><a href="#Parser-839"><span class="linenos"> 839</span></a> <span class="p">)</span>
+</span><span id="Parser-840"><a href="#Parser-840"><span class="linenos"> 840</span></a>
+</span><span id="Parser-841"><a href="#Parser-841"><span class="linenos"> 841</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Parser-842"><a href="#Parser-842"><span class="linenos"> 842</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-843"><a href="#Parser-843"><span class="linenos"> 843</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
+</span><span id="Parser-844"><a href="#Parser-844"><span class="linenos"> 844</span></a> <span class="n">raw_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><span id="Parser-845"><a href="#Parser-845"><span class="linenos"> 845</span></a> <span class="n">sql</span><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="Parser-846"><a href="#Parser-846"><span class="linenos"> 846</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="Parser-847"><a href="#Parser-847"><span class="linenos"> 847</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-848"><a href="#Parser-848"><span class="linenos"> 848</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
+</span><span id="Parser-849"><a href="#Parser-849"><span class="linenos"> 849</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
+</span><span id="Parser-850"><a href="#Parser-850"><span class="linenos"> 850</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
+</span><span id="Parser-851"><a href="#Parser-851"><span class="linenos"> 851</span></a>
+</span><span id="Parser-852"><a href="#Parser-852"><span class="linenos"> 852</span></a><span class="sd"> Args:</span>
+</span><span id="Parser-853"><a href="#Parser-853"><span class="linenos"> 853</span></a><span class="sd"> expression_types: the expression type(s) to try and parse the token list into.</span>
+</span><span id="Parser-854"><a href="#Parser-854"><span class="linenos"> 854</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
+</span><span id="Parser-855"><a href="#Parser-855"><span class="linenos"> 855</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
+</span><span id="Parser-856"><a href="#Parser-856"><span class="linenos"> 856</span></a>
+</span><span id="Parser-857"><a href="#Parser-857"><span class="linenos"> 857</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser-858"><a href="#Parser-858"><span class="linenos"> 858</span></a><span class="sd"> The target Expression.</span>
+</span><span id="Parser-859"><a href="#Parser-859"><span class="linenos"> 859</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-860"><a href="#Parser-860"><span class="linenos"> 860</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-861"><a href="#Parser-861"><span class="linenos"> 861</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
+</span><span id="Parser-862"><a href="#Parser-862"><span class="linenos"> 862</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
+</span><span id="Parser-863"><a href="#Parser-863"><span class="linenos"> 863</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-864"><a href="#Parser-864"><span class="linenos"> 864</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-865"><a href="#Parser-865"><span class="linenos"> 865</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser-866"><a href="#Parser-866"><span class="linenos"> 866</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Parser-867"><a href="#Parser-867"><span class="linenos"> 867</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="Parser-868"><a href="#Parser-868"><span class="linenos"> 868</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
+</span><span id="Parser-869"><a href="#Parser-869"><span class="linenos"> 869</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="Parser-870"><a href="#Parser-870"><span class="linenos"> 870</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser-871"><a href="#Parser-871"><span class="linenos"> 871</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Parser-872"><a href="#Parser-872"><span class="linenos"> 872</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</span><span class="p">),</span>
+</span><span id="Parser-873"><a href="#Parser-873"><span class="linenos"> 873</span></a> <span class="p">)</span> <span class="kn">from</span> <span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="Parser-874"><a href="#Parser-874"><span class="linenos"> 874</span></a>
+</span><span id="Parser-875"><a href="#Parser-875"><span class="linenos"> 875</span></a> <span class="k">def</span> <span class="nf">_parse</span><span class="p">(</span>
+</span><span id="Parser-876"><a href="#Parser-876"><span class="linenos"> 876</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-877"><a href="#Parser-877"><span class="linenos"> 877</span></a> <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">Parser</span><span 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-878"><a href="#Parser-878"><span class="linenos"> 878</span></a> <span class="n">raw_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><span id="Parser-879"><a href="#Parser-879"><span class="linenos"> 879</span></a> <span class="n">sql</span><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="Parser-880"><a href="#Parser-880"><span class="linenos"> 880</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="Parser-881"><a href="#Parser-881"><span class="linenos"> 881</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Parser-882"><a href="#Parser-882"><span class="linenos"> 882</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 class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Parser-883"><a href="#Parser-883"><span class="linenos"> 883</span></a> <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">)</span>
+</span><span id="Parser-884"><a href="#Parser-884"><span class="linenos"> 884</span></a> <span class="n">chunks</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">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="Parser-885"><a href="#Parser-885"><span class="linenos"> 885</span></a>
-</span><span id="Parser-886"><a href="#Parser-886"><span class="linenos"> 886</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-887"><a href="#Parser-887"><span class="linenos"> 887</span></a>
-</span><span id="Parser-888"><a href="#Parser-888"><span class="linenos"> 888</span></a> <span class="k">for</span> <span class="n">tokens</span> <span class="ow">in</span> <span class="n">chunks</span><span class="p">:</span>
-</span><span id="Parser-889"><a href="#Parser-889"><span class="linenos"> 889</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
-</span><span id="Parser-890"><a href="#Parser-890"><span class="linenos"> 890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="n">tokens</span>
-</span><span id="Parser-891"><a href="#Parser-891"><span class="linenos"> 891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-886"><a href="#Parser-886"><span class="linenos"> 886</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">token</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">):</span>
+</span><span id="Parser-887"><a href="#Parser-887"><span class="linenos"> 887</span></a> <span class="k">if</span> <span class="n">token</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">SEMICOLON</span><span class="p">:</span>
+</span><span id="Parser-888"><a href="#Parser-888"><span class="linenos"> 888</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">total</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-889"><a href="#Parser-889"><span class="linenos"> 889</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
+</span><span id="Parser-890"><a href="#Parser-890"><span class="linenos"> 890</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-891"><a href="#Parser-891"><span class="linenos"> 891</span></a> <span class="n">chunks</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">append</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span><span id="Parser-892"><a href="#Parser-892"><span class="linenos"> 892</span></a>
-</span><span id="Parser-893"><a href="#Parser-893"><span class="linenos"> 893</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_method</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="Parser-893"><a href="#Parser-893"><span class="linenos"> 893</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-894"><a href="#Parser-894"><span class="linenos"> 894</span></a>
-</span><span id="Parser-895"><a href="#Parser-895"><span class="linenos"> 895</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;</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="Parser-896"><a href="#Parser-896"><span class="linenos"> 896</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 expression / Unexpected token&quot;</span><span class="p">)</span>
-</span><span id="Parser-897"><a href="#Parser-897"><span class="linenos"> 897</span></a>
-</span><span id="Parser-898"><a href="#Parser-898"><span class="linenos"> 898</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
+</span><span id="Parser-895"><a href="#Parser-895"><span class="linenos"> 895</span></a> <span class="k">for</span> <span class="n">tokens</span> <span class="ow">in</span> <span class="n">chunks</span><span class="p">:</span>
+</span><span id="Parser-896"><a href="#Parser-896"><span class="linenos"> 896</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+</span><span id="Parser-897"><a href="#Parser-897"><span class="linenos"> 897</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="n">tokens</span>
+</span><span id="Parser-898"><a href="#Parser-898"><span class="linenos"> 898</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-899"><a href="#Parser-899"><span class="linenos"> 899</span></a>
-</span><span id="Parser-900"><a href="#Parser-900"><span class="linenos"> 900</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="Parser-900"><a href="#Parser-900"><span class="linenos"> 900</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_method</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="Parser-901"><a href="#Parser-901"><span class="linenos"> 901</span></a>
-</span><span id="Parser-902"><a href="#Parser-902"><span class="linenos"> 902</span></a> <span class="k">def</span> <span class="nf">check_errors</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="Parser-903"><a href="#Parser-903"><span class="linenos"> 903</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-904"><a href="#Parser-904"><span class="linenos"> 904</span></a><span class="sd"> Logs or raises any found errors, depending on the chosen error level setting.</span>
-</span><span id="Parser-905"><a href="#Parser-905"><span class="linenos"> 905</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-906"><a href="#Parser-906"><span class="linenos"> 906</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser-907"><a href="#Parser-907"><span class="linenos"> 907</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="Parser-908"><a href="#Parser-908"><span class="linenos"> 908</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
-</span><span id="Parser-909"><a href="#Parser-909"><span class="linenos"> 909</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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">errors</span><span class="p">:</span>
-</span><span id="Parser-910"><a href="#Parser-910"><span class="linenos"> 910</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser-911"><a href="#Parser-911"><span class="linenos"> 911</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
-</span><span id="Parser-912"><a href="#Parser-912"><span class="linenos"> 912</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
-</span><span id="Parser-913"><a href="#Parser-913"><span class="linenos"> 913</span></a> <span class="p">)</span>
-</span><span id="Parser-914"><a href="#Parser-914"><span class="linenos"> 914</span></a>
-</span><span id="Parser-915"><a href="#Parser-915"><span class="linenos"> 915</span></a> <span class="k">def</span> <span class="nf">raise_error</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="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="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-916"><a href="#Parser-916"><span class="linenos"> 916</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-917"><a href="#Parser-917"><span class="linenos"> 917</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
-</span><span id="Parser-918"><a href="#Parser-918"><span class="linenos"> 918</span></a><span class="sd"> error level setting.</span>
-</span><span id="Parser-919"><a href="#Parser-919"><span class="linenos"> 919</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-920"><a href="#Parser-920"><span class="linenos"> 920</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</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="Parser-921"><a href="#Parser-921"><span class="linenos"> 921</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
-</span><span id="Parser-922"><a href="#Parser-922"><span class="linenos"> 922</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span>
-</span><span id="Parser-923"><a href="#Parser-923"><span class="linenos"> 923</span></a> <span class="n">start_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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
-</span><span id="Parser-924"><a href="#Parser-924"><span class="linenos"> 924</span></a> <span class="n">highlight</span> <span 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="Parser-925"><a href="#Parser-925"><span class="linenos"> 925</span></a> <span class="n">end_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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
-</span><span id="Parser-926"><a href="#Parser-926"><span class="linenos"> 926</span></a>
-</span><span id="Parser-927"><a href="#Parser-927"><span class="linenos"> 927</span></a> <span class="n">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
-</span><span id="Parser-928"><a href="#Parser-928"><span class="linenos"> 928</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="Parser-929"><a href="#Parser-929"><span class="linenos"> 929</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Parser-930"><a href="#Parser-930"><span class="linenos"> 930</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
-</span><span id="Parser-931"><a href="#Parser-931"><span class="linenos"> 931</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
-</span><span id="Parser-932"><a href="#Parser-932"><span class="linenos"> 932</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
-</span><span id="Parser-933"><a href="#Parser-933"><span class="linenos"> 933</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
-</span><span id="Parser-934"><a href="#Parser-934"><span class="linenos"> 934</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
-</span><span id="Parser-935"><a href="#Parser-935"><span class="linenos"> 935</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
-</span><span id="Parser-936"><a href="#Parser-936"><span class="linenos"> 936</span></a> <span class="p">)</span>
-</span><span id="Parser-937"><a href="#Parser-937"><span class="linenos"> 937</span></a>
-</span><span id="Parser-938"><a href="#Parser-938"><span class="linenos"> 938</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser-939"><a href="#Parser-939"><span class="linenos"> 939</span></a> <span class="k">raise</span> <span class="n">error</span>
-</span><span id="Parser-940"><a href="#Parser-940"><span class="linenos"> 940</span></a>
-</span><span id="Parser-941"><a href="#Parser-941"><span class="linenos"> 941</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
-</span><span id="Parser-942"><a href="#Parser-942"><span class="linenos"> 942</span></a>
-</span><span id="Parser-943"><a href="#Parser-943"><span class="linenos"> 943</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
-</span><span id="Parser-944"><a href="#Parser-944"><span class="linenos"> 944</span></a> <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">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 class="o">**</span><span class="n">kwargs</span>
-</span><span id="Parser-945"><a href="#Parser-945"><span class="linenos"> 945</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Parser-946"><a href="#Parser-946"><span class="linenos"> 946</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-947"><a href="#Parser-947"><span class="linenos"> 947</span></a><span class="sd"> Creates a new, validated Expression.</span>
-</span><span id="Parser-948"><a href="#Parser-948"><span class="linenos"> 948</span></a>
-</span><span id="Parser-949"><a href="#Parser-949"><span class="linenos"> 949</span></a><span class="sd"> Args:</span>
-</span><span id="Parser-950"><a href="#Parser-950"><span class="linenos"> 950</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
-</span><span id="Parser-951"><a href="#Parser-951"><span class="linenos"> 951</span></a><span class="sd"> comments: an optional list of comments to attach to the expression.</span>
-</span><span id="Parser-952"><a href="#Parser-952"><span class="linenos"> 952</span></a><span class="sd"> kwargs: the arguments to set for the expression along with their respective values.</span>
-</span><span id="Parser-953"><a href="#Parser-953"><span class="linenos"> 953</span></a>
-</span><span id="Parser-954"><a href="#Parser-954"><span class="linenos"> 954</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser-955"><a href="#Parser-955"><span class="linenos"> 955</span></a><span class="sd"> The target expression.</span>
-</span><span id="Parser-956"><a href="#Parser-956"><span class="linenos"> 956</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-957"><a href="#Parser-957"><span class="linenos"> 957</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Parser-958"><a href="#Parser-958"><span class="linenos"> 958</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="Parser-959"><a href="#Parser-959"><span class="linenos"> 959</span></a> <span class="n">instance</span><span class="o">.</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><span id="Parser-960"><a href="#Parser-960"><span class="linenos"> 960</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-961"><a href="#Parser-961"><span class="linenos"> 961</span></a> <span class="k">if</span> <span class="n">comments</span><span class="p">:</span>
-</span><span id="Parser-962"><a href="#Parser-962"><span class="linenos"> 962</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Parser-963"><a href="#Parser-963"><span class="linenos"> 963</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
-</span><span id="Parser-964"><a href="#Parser-964"><span class="linenos"> 964</span></a> <span class="k">return</span> <span class="n">instance</span>
-</span><span id="Parser-965"><a href="#Parser-965"><span class="linenos"> 965</span></a>
-</span><span id="Parser-966"><a href="#Parser-966"><span class="linenos"> 966</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span>
-</span><span id="Parser-967"><a href="#Parser-967"><span class="linenos"> 967</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">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">t</span><span class="o">.</span><span class="n">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-968"><a href="#Parser-968"><span class="linenos"> 968</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-969"><a href="#Parser-969"><span class="linenos"> 969</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-970"><a href="#Parser-970"><span class="linenos"> 970</span></a><span class="sd"> Validates an already instantiated expression, making sure that all its mandatory arguments</span>
-</span><span id="Parser-971"><a href="#Parser-971"><span class="linenos"> 971</span></a><span class="sd"> are set.</span>
+</span><span id="Parser-902"><a href="#Parser-902"><span class="linenos"> 902</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;</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="Parser-903"><a href="#Parser-903"><span class="linenos"> 903</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 expression / Unexpected token&quot;</span><span class="p">)</span>
+</span><span id="Parser-904"><a href="#Parser-904"><span class="linenos"> 904</span></a>
+</span><span id="Parser-905"><a href="#Parser-905"><span class="linenos"> 905</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
+</span><span id="Parser-906"><a href="#Parser-906"><span class="linenos"> 906</span></a>
+</span><span id="Parser-907"><a href="#Parser-907"><span class="linenos"> 907</span></a> <span class="k">return</span> <span class="n">expressions</span>
+</span><span id="Parser-908"><a href="#Parser-908"><span class="linenos"> 908</span></a>
+</span><span id="Parser-909"><a href="#Parser-909"><span class="linenos"> 909</span></a> <span class="k">def</span> <span class="nf">check_errors</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="Parser-910"><a href="#Parser-910"><span class="linenos"> 910</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-911"><a href="#Parser-911"><span class="linenos"> 911</span></a><span class="sd"> Logs or raises any found errors, depending on the chosen error level setting.</span>
+</span><span id="Parser-912"><a href="#Parser-912"><span class="linenos"> 912</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-913"><a href="#Parser-913"><span class="linenos"> 913</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser-914"><a href="#Parser-914"><span class="linenos"> 914</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="Parser-915"><a href="#Parser-915"><span class="linenos"> 915</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
+</span><span id="Parser-916"><a href="#Parser-916"><span class="linenos"> 916</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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">errors</span><span class="p">:</span>
+</span><span id="Parser-917"><a href="#Parser-917"><span class="linenos"> 917</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser-918"><a href="#Parser-918"><span class="linenos"> 918</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
+</span><span id="Parser-919"><a href="#Parser-919"><span class="linenos"> 919</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
+</span><span id="Parser-920"><a href="#Parser-920"><span class="linenos"> 920</span></a> <span class="p">)</span>
+</span><span id="Parser-921"><a href="#Parser-921"><span class="linenos"> 921</span></a>
+</span><span id="Parser-922"><a href="#Parser-922"><span class="linenos"> 922</span></a> <span class="k">def</span> <span class="nf">raise_error</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="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="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-923"><a href="#Parser-923"><span class="linenos"> 923</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-924"><a href="#Parser-924"><span class="linenos"> 924</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
+</span><span id="Parser-925"><a href="#Parser-925"><span class="linenos"> 925</span></a><span class="sd"> error level setting.</span>
+</span><span id="Parser-926"><a href="#Parser-926"><span class="linenos"> 926</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-927"><a href="#Parser-927"><span class="linenos"> 927</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</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="Parser-928"><a href="#Parser-928"><span class="linenos"> 928</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
+</span><span id="Parser-929"><a href="#Parser-929"><span class="linenos"> 929</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span>
+</span><span id="Parser-930"><a href="#Parser-930"><span class="linenos"> 930</span></a> <span class="n">start_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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
+</span><span id="Parser-931"><a href="#Parser-931"><span class="linenos"> 931</span></a> <span class="n">highlight</span> <span 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="Parser-932"><a href="#Parser-932"><span class="linenos"> 932</span></a> <span class="n">end_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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
+</span><span id="Parser-933"><a href="#Parser-933"><span class="linenos"> 933</span></a>
+</span><span id="Parser-934"><a href="#Parser-934"><span class="linenos"> 934</span></a> <span class="n">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
+</span><span id="Parser-935"><a href="#Parser-935"><span class="linenos"> 935</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="Parser-936"><a href="#Parser-936"><span class="linenos"> 936</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Parser-937"><a href="#Parser-937"><span class="linenos"> 937</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+</span><span id="Parser-938"><a href="#Parser-938"><span class="linenos"> 938</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
+</span><span id="Parser-939"><a href="#Parser-939"><span class="linenos"> 939</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
+</span><span id="Parser-940"><a href="#Parser-940"><span class="linenos"> 940</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
+</span><span id="Parser-941"><a href="#Parser-941"><span class="linenos"> 941</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
+</span><span id="Parser-942"><a href="#Parser-942"><span class="linenos"> 942</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
+</span><span id="Parser-943"><a href="#Parser-943"><span class="linenos"> 943</span></a> <span class="p">)</span>
+</span><span id="Parser-944"><a href="#Parser-944"><span class="linenos"> 944</span></a>
+</span><span id="Parser-945"><a href="#Parser-945"><span class="linenos"> 945</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser-946"><a href="#Parser-946"><span class="linenos"> 946</span></a> <span class="k">raise</span> <span class="n">error</span>
+</span><span id="Parser-947"><a href="#Parser-947"><span class="linenos"> 947</span></a>
+</span><span id="Parser-948"><a href="#Parser-948"><span class="linenos"> 948</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
+</span><span id="Parser-949"><a href="#Parser-949"><span class="linenos"> 949</span></a>
+</span><span id="Parser-950"><a href="#Parser-950"><span class="linenos"> 950</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
+</span><span id="Parser-951"><a href="#Parser-951"><span class="linenos"> 951</span></a> <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">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 class="o">**</span><span class="n">kwargs</span>
+</span><span id="Parser-952"><a href="#Parser-952"><span class="linenos"> 952</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Parser-953"><a href="#Parser-953"><span class="linenos"> 953</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-954"><a href="#Parser-954"><span class="linenos"> 954</span></a><span class="sd"> Creates a new, validated Expression.</span>
+</span><span id="Parser-955"><a href="#Parser-955"><span class="linenos"> 955</span></a>
+</span><span id="Parser-956"><a href="#Parser-956"><span class="linenos"> 956</span></a><span class="sd"> Args:</span>
+</span><span id="Parser-957"><a href="#Parser-957"><span class="linenos"> 957</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
+</span><span id="Parser-958"><a href="#Parser-958"><span class="linenos"> 958</span></a><span class="sd"> comments: an optional list of comments to attach to the expression.</span>
+</span><span id="Parser-959"><a href="#Parser-959"><span class="linenos"> 959</span></a><span class="sd"> kwargs: the arguments to set for the expression along with their respective values.</span>
+</span><span id="Parser-960"><a href="#Parser-960"><span class="linenos"> 960</span></a>
+</span><span id="Parser-961"><a href="#Parser-961"><span class="linenos"> 961</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser-962"><a href="#Parser-962"><span class="linenos"> 962</span></a><span class="sd"> The target expression.</span>
+</span><span id="Parser-963"><a href="#Parser-963"><span class="linenos"> 963</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-964"><a href="#Parser-964"><span class="linenos"> 964</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Parser-965"><a href="#Parser-965"><span class="linenos"> 965</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="Parser-966"><a href="#Parser-966"><span class="linenos"> 966</span></a> <span class="n">instance</span><span class="o">.</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><span id="Parser-967"><a href="#Parser-967"><span class="linenos"> 967</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-968"><a href="#Parser-968"><span class="linenos"> 968</span></a> <span class="k">if</span> <span class="n">comments</span><span class="p">:</span>
+</span><span id="Parser-969"><a href="#Parser-969"><span class="linenos"> 969</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Parser-970"><a href="#Parser-970"><span class="linenos"> 970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+</span><span id="Parser-971"><a href="#Parser-971"><span class="linenos"> 971</span></a> <span class="k">return</span> <span class="n">instance</span>
</span><span id="Parser-972"><a href="#Parser-972"><span class="linenos"> 972</span></a>
-</span><span id="Parser-973"><a href="#Parser-973"><span class="linenos"> 973</span></a><span class="sd"> Args:</span>
-</span><span id="Parser-974"><a href="#Parser-974"><span class="linenos"> 974</span></a><span class="sd"> expression: the expression to validate.</span>
-</span><span id="Parser-975"><a href="#Parser-975"><span class="linenos"> 975</span></a><span class="sd"> args: an optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
-</span><span id="Parser-976"><a href="#Parser-976"><span class="linenos"> 976</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-977"><a href="#Parser-977"><span class="linenos"> 977</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser-978"><a href="#Parser-978"><span class="linenos"> 978</span></a> <span class="k">return</span>
+</span><span id="Parser-973"><a href="#Parser-973"><span class="linenos"> 973</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span>
+</span><span id="Parser-974"><a href="#Parser-974"><span class="linenos"> 974</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">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">t</span><span class="o">.</span><span class="n">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-975"><a href="#Parser-975"><span class="linenos"> 975</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-976"><a href="#Parser-976"><span class="linenos"> 976</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-977"><a href="#Parser-977"><span class="linenos"> 977</span></a><span class="sd"> Validates an already instantiated expression, making sure that all its mandatory arguments</span>
+</span><span id="Parser-978"><a href="#Parser-978"><span class="linenos"> 978</span></a><span class="sd"> are set.</span>
</span><span id="Parser-979"><a href="#Parser-979"><span class="linenos"> 979</span></a>
-</span><span id="Parser-980"><a href="#Parser-980"><span class="linenos"> 980</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
-</span><span id="Parser-981"><a href="#Parser-981"><span class="linenos"> 981</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
-</span><span id="Parser-982"><a href="#Parser-982"><span class="linenos"> 982</span></a>
-</span><span id="Parser-983"><a href="#Parser-983"><span class="linenos"> 983</span></a> <span class="k">def</span> <span class="nf">_find_sql</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="n">end</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Parser-984"><a href="#Parser-984"><span class="linenos"> 984</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="o">.</span><span class="n">start</span> <span class="p">:</span> <span class="n">end</span><span class="o">.</span><span class="n">end</span><span class="p">]</span>
-</span><span id="Parser-985"><a href="#Parser-985"><span class="linenos"> 985</span></a>
-</span><span id="Parser-986"><a href="#Parser-986"><span class="linenos"> 986</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">times</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-987"><a href="#Parser-987"><span class="linenos"> 987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">+=</span> <span class="n">times</span>
-</span><span id="Parser-988"><a href="#Parser-988"><span class="linenos"> 988</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="n">seq_get</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="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
-</span><span id="Parser-989"><a href="#Parser-989"><span class="linenos"> 989</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="n">seq_get</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="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-990"><a href="#Parser-990"><span class="linenos"> 990</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-991"><a href="#Parser-991"><span class="linenos"> 991</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-</span><span id="Parser-992"><a href="#Parser-992"><span class="linenos"> 992</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_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-993"><a href="#Parser-993"><span class="linenos"> 993</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-994"><a href="#Parser-994"><span class="linenos"> 994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-995"><a href="#Parser-995"><span class="linenos"> 995</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-996"><a href="#Parser-996"><span class="linenos"> 996</span></a>
-</span><span id="Parser-997"><a href="#Parser-997"><span class="linenos"> 997</span></a> <span class="k">def</span> <span class="nf">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-998"><a href="#Parser-998"><span class="linenos"> 998</span></a> <span class="k">if</span> <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="p">:</span>
-</span><span id="Parser-999"><a href="#Parser-999"><span class="linenos"> 999</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><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="p">)</span>
-</span><span id="Parser-1000"><a href="#Parser-1000"><span class="linenos">1000</span></a>
-</span><span id="Parser-1001"><a href="#Parser-1001"><span class="linenos">1001</span></a> <span class="k">def</span> <span class="nf">_parse_command</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">Command</span><span class="p">:</span>
-</span><span id="Parser-1002"><a href="#Parser-1002"><span class="linenos">1002</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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">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-980"><a href="#Parser-980"><span class="linenos"> 980</span></a><span class="sd"> Args:</span>
+</span><span id="Parser-981"><a href="#Parser-981"><span class="linenos"> 981</span></a><span class="sd"> expression: the expression to validate.</span>
+</span><span id="Parser-982"><a href="#Parser-982"><span class="linenos"> 982</span></a><span class="sd"> args: an optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
+</span><span id="Parser-983"><a href="#Parser-983"><span class="linenos"> 983</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-984"><a href="#Parser-984"><span class="linenos"> 984</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser-985"><a href="#Parser-985"><span class="linenos"> 985</span></a> <span class="k">return</span>
+</span><span id="Parser-986"><a href="#Parser-986"><span class="linenos"> 986</span></a>
+</span><span id="Parser-987"><a href="#Parser-987"><span class="linenos"> 987</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
+</span><span id="Parser-988"><a href="#Parser-988"><span class="linenos"> 988</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
+</span><span id="Parser-989"><a href="#Parser-989"><span class="linenos"> 989</span></a>
+</span><span id="Parser-990"><a href="#Parser-990"><span class="linenos"> 990</span></a> <span class="k">def</span> <span class="nf">_find_sql</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="n">end</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Parser-991"><a href="#Parser-991"><span class="linenos"> 991</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="o">.</span><span class="n">start</span> <span class="p">:</span> <span class="n">end</span><span class="o">.</span><span class="n">end</span><span class="p">]</span>
+</span><span id="Parser-992"><a href="#Parser-992"><span class="linenos"> 992</span></a>
+</span><span id="Parser-993"><a href="#Parser-993"><span class="linenos"> 993</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">times</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-994"><a href="#Parser-994"><span class="linenos"> 994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">+=</span> <span class="n">times</span>
+</span><span id="Parser-995"><a href="#Parser-995"><span class="linenos"> 995</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="n">seq_get</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="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
+</span><span id="Parser-996"><a href="#Parser-996"><span class="linenos"> 996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="n">seq_get</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="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-997"><a href="#Parser-997"><span class="linenos"> 997</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-998"><a href="#Parser-998"><span class="linenos"> 998</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
+</span><span id="Parser-999"><a href="#Parser-999"><span class="linenos"> 999</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_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-1000"><a href="#Parser-1000"><span class="linenos">1000</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1001"><a href="#Parser-1001"><span class="linenos">1001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1002"><a href="#Parser-1002"><span class="linenos">1002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1003"><a href="#Parser-1003"><span class="linenos">1003</span></a>
-</span><span id="Parser-1004"><a href="#Parser-1004"><span class="linenos">1004</span></a> <span class="k">def</span> <span class="nf">_parse_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">allow_exists</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-1005"><a href="#Parser-1005"><span class="linenos">1005</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-1006"><a href="#Parser-1006"><span class="linenos">1006</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 class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-1004"><a href="#Parser-1004"><span class="linenos">1004</span></a> <span class="k">def</span> <span class="nf">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-1005"><a href="#Parser-1005"><span class="linenos">1005</span></a> <span class="k">if</span> <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="p">:</span>
+</span><span id="Parser-1006"><a href="#Parser-1006"><span class="linenos">1006</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><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="p">)</span>
</span><span id="Parser-1007"><a href="#Parser-1007"><span class="linenos">1007</span></a>
-</span><span id="Parser-1008"><a href="#Parser-1008"><span class="linenos">1008</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-1009"><a href="#Parser-1009"><span class="linenos">1009</span></a>
-</span><span id="Parser-1010"><a href="#Parser-1010"><span class="linenos">1010</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">CREATABLES</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="Parser-1011"><a href="#Parser-1011"><span class="linenos">1011</span></a>
-</span><span id="Parser-1012"><a href="#Parser-1012"><span class="linenos">1012</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-1013"><a href="#Parser-1013"><span class="linenos">1013</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-1008"><a href="#Parser-1008"><span class="linenos">1008</span></a> <span class="k">def</span> <span class="nf">_parse_command</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">Command</span><span class="p">:</span>
+</span><span id="Parser-1009"><a href="#Parser-1009"><span class="linenos">1009</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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">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-1010"><a href="#Parser-1010"><span class="linenos">1010</span></a>
+</span><span id="Parser-1011"><a href="#Parser-1011"><span class="linenos">1011</span></a> <span class="k">def</span> <span class="nf">_parse_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">allow_exists</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-1012"><a href="#Parser-1012"><span class="linenos">1012</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-1013"><a href="#Parser-1013"><span class="linenos">1013</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 class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-1014"><a href="#Parser-1014"><span class="linenos">1014</span></a>
-</span><span id="Parser-1015"><a href="#Parser-1015"><span class="linenos">1015</span></a> <span class="k">if</span> <span class="n">kind</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">FUNCTION</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="Parser-1016"><a href="#Parser-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">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
-</span><span id="Parser-1017"><a href="#Parser-1017"><span class="linenos">1017</span></a> <span class="k">elif</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">TABLE</span><span class="p">:</span>
-</span><span id="Parser-1018"><a href="#Parser-1018"><span class="linenos">1018</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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COMMENT_TABLE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-1019"><a href="#Parser-1019"><span class="linenos">1019</span></a> <span class="k">elif</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">COLUMN</span><span class="p">:</span>
-</span><span id="Parser-1020"><a href="#Parser-1020"><span class="linenos">1020</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-1021"><a href="#Parser-1021"><span class="linenos">1021</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1022"><a href="#Parser-1022"><span class="linenos">1022</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-1023"><a href="#Parser-1023"><span class="linenos">1023</span></a>
-</span><span id="Parser-1024"><a href="#Parser-1024"><span class="linenos">1024</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">IS</span><span class="p">)</span>
-</span><span id="Parser-1025"><a href="#Parser-1025"><span class="linenos">1025</span></a>
-</span><span id="Parser-1026"><a href="#Parser-1026"><span class="linenos">1026</span></a> <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-1027"><a href="#Parser-1027"><span class="linenos">1027</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comment</span><span 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="o">.</span><span class="n">text</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 class="n">exists</span><span class="o">=</span><span class="n">exists</span>
-</span><span id="Parser-1028"><a href="#Parser-1028"><span class="linenos">1028</span></a> <span class="p">)</span>
-</span><span id="Parser-1029"><a href="#Parser-1029"><span class="linenos">1029</span></a>
-</span><span id="Parser-1030"><a href="#Parser-1030"><span class="linenos">1030</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1031"><a href="#Parser-1031"><span class="linenos">1031</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-1032"><a href="#Parser-1032"><span class="linenos">1032</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1033"><a href="#Parser-1033"><span class="linenos">1033</span></a>
-</span><span id="Parser-1034"><a href="#Parser-1034"><span class="linenos">1034</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">STATEMENT_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-1035"><a href="#Parser-1035"><span class="linenos">1035</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_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-1015"><a href="#Parser-1015"><span class="linenos">1015</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-1016"><a href="#Parser-1016"><span class="linenos">1016</span></a>
+</span><span id="Parser-1017"><a href="#Parser-1017"><span class="linenos">1017</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">CREATABLES</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="Parser-1018"><a href="#Parser-1018"><span class="linenos">1018</span></a>
+</span><span id="Parser-1019"><a href="#Parser-1019"><span class="linenos">1019</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-1020"><a href="#Parser-1020"><span class="linenos">1020</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-1021"><a href="#Parser-1021"><span class="linenos">1021</span></a>
+</span><span id="Parser-1022"><a href="#Parser-1022"><span class="linenos">1022</span></a> <span class="k">if</span> <span class="n">kind</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">FUNCTION</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="Parser-1023"><a href="#Parser-1023"><span class="linenos">1023</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="Parser-1024"><a href="#Parser-1024"><span class="linenos">1024</span></a> <span class="k">elif</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">TABLE</span><span class="p">:</span>
+</span><span id="Parser-1025"><a href="#Parser-1025"><span class="linenos">1025</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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COMMENT_TABLE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-1026"><a href="#Parser-1026"><span class="linenos">1026</span></a> <span class="k">elif</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">COLUMN</span><span class="p">:</span>
+</span><span id="Parser-1027"><a href="#Parser-1027"><span class="linenos">1027</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-1028"><a href="#Parser-1028"><span class="linenos">1028</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1029"><a href="#Parser-1029"><span class="linenos">1029</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-1030"><a href="#Parser-1030"><span class="linenos">1030</span></a>
+</span><span id="Parser-1031"><a href="#Parser-1031"><span class="linenos">1031</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">IS</span><span class="p">)</span>
+</span><span id="Parser-1032"><a href="#Parser-1032"><span class="linenos">1032</span></a>
+</span><span id="Parser-1033"><a href="#Parser-1033"><span class="linenos">1033</span></a> <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-1034"><a href="#Parser-1034"><span class="linenos">1034</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comment</span><span 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="o">.</span><span class="n">text</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 class="n">exists</span><span class="o">=</span><span class="n">exists</span>
+</span><span id="Parser-1035"><a href="#Parser-1035"><span class="linenos">1035</span></a> <span class="p">)</span>
</span><span id="Parser-1036"><a href="#Parser-1036"><span class="linenos">1036</span></a>
-</span><span id="Parser-1037"><a href="#Parser-1037"><span class="linenos">1037</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">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span><span class="p">):</span>
-</span><span id="Parser-1038"><a href="#Parser-1038"><span class="linenos">1038</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">()</span>
-</span><span id="Parser-1039"><a href="#Parser-1039"><span class="linenos">1039</span></a>
-</span><span id="Parser-1040"><a href="#Parser-1040"><span class="linenos">1040</span></a> <span class="n">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-1041"><a href="#Parser-1041"><span class="linenos">1041</span></a> <span class="n">expression</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">expression</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
-</span><span id="Parser-1042"><a href="#Parser-1042"><span class="linenos">1042</span></a>
-</span><span id="Parser-1043"><a href="#Parser-1043"><span class="linenos">1043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Parser-1044"><a href="#Parser-1044"><span class="linenos">1044</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Parser-1045"><a href="#Parser-1045"><span class="linenos">1045</span></a>
-</span><span id="Parser-1046"><a href="#Parser-1046"><span class="linenos">1046</span></a> <span class="k">def</span> <span class="nf">_parse_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">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-1047"><a href="#Parser-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">_prev</span>
-</span><span id="Parser-1048"><a href="#Parser-1048"><span class="linenos">1048</span></a> <span class="n">temporary</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-1049"><a href="#Parser-1049"><span class="linenos">1049</span></a> <span class="n">materialized</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">MATERIALIZED</span><span class="p">)</span>
-</span><span id="Parser-1050"><a href="#Parser-1050"><span class="linenos">1050</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">CREATABLES</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-1051"><a href="#Parser-1051"><span class="linenos">1051</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-1052"><a href="#Parser-1052"><span class="linenos">1052</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-1053"><a href="#Parser-1053"><span class="linenos">1053</span></a>
-</span><span id="Parser-1054"><a href="#Parser-1054"><span class="linenos">1054</span></a> <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-1055"><a href="#Parser-1055"><span class="linenos">1055</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
-</span><span id="Parser-1056"><a href="#Parser-1056"><span class="linenos">1056</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-1057"><a href="#Parser-1057"><span class="linenos">1057</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-1058"><a href="#Parser-1058"><span class="linenos">1058</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-1059"><a href="#Parser-1059"><span class="linenos">1059</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
-</span><span id="Parser-1060"><a href="#Parser-1060"><span class="linenos">1060</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
-</span><span id="Parser-1061"><a href="#Parser-1061"><span class="linenos">1061</span></a> <span class="n">cascade</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">CASCADE</span><span class="p">),</span>
-</span><span id="Parser-1062"><a href="#Parser-1062"><span class="linenos">1062</span></a> <span class="n">constraints</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;CONSTRAINTS&quot;</span><span class="p">),</span>
-</span><span id="Parser-1063"><a href="#Parser-1063"><span class="linenos">1063</span></a> <span class="n">purge</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;PURGE&quot;</span><span class="p">),</span>
-</span><span id="Parser-1064"><a href="#Parser-1064"><span class="linenos">1064</span></a> <span class="p">)</span>
-</span><span id="Parser-1065"><a href="#Parser-1065"><span class="linenos">1065</span></a>
-</span><span id="Parser-1066"><a href="#Parser-1066"><span class="linenos">1066</span></a> <span class="k">def</span> <span class="nf">_parse_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">not_</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="nb">bool</span><span class="p">]:</span>
-</span><span id="Parser-1067"><a href="#Parser-1067"><span class="linenos">1067</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-1068"><a href="#Parser-1068"><span class="linenos">1068</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">IF</span><span class="p">)</span>
-</span><span id="Parser-1069"><a href="#Parser-1069"><span class="linenos">1069</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">not_</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">NOT</span><span class="p">))</span>
-</span><span id="Parser-1070"><a href="#Parser-1070"><span class="linenos">1070</span></a> <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">EXISTS</span><span class="p">)</span>
+</span><span id="Parser-1037"><a href="#Parser-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1038"><a href="#Parser-1038"><span class="linenos">1038</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-1039"><a href="#Parser-1039"><span class="linenos">1039</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1040"><a href="#Parser-1040"><span class="linenos">1040</span></a>
+</span><span id="Parser-1041"><a href="#Parser-1041"><span class="linenos">1041</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">STATEMENT_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-1042"><a href="#Parser-1042"><span class="linenos">1042</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_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-1043"><a href="#Parser-1043"><span class="linenos">1043</span></a>
+</span><span id="Parser-1044"><a href="#Parser-1044"><span class="linenos">1044</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">Tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span><span class="p">):</span>
+</span><span id="Parser-1045"><a href="#Parser-1045"><span class="linenos">1045</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">()</span>
+</span><span id="Parser-1046"><a href="#Parser-1046"><span class="linenos">1046</span></a>
+</span><span id="Parser-1047"><a href="#Parser-1047"><span class="linenos">1047</span></a> <span class="n">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-1048"><a href="#Parser-1048"><span class="linenos">1048</span></a> <span class="n">expression</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">expression</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
+</span><span id="Parser-1049"><a href="#Parser-1049"><span class="linenos">1049</span></a>
+</span><span id="Parser-1050"><a href="#Parser-1050"><span class="linenos">1050</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-1051"><a href="#Parser-1051"><span class="linenos">1051</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Parser-1052"><a href="#Parser-1052"><span class="linenos">1052</span></a>
+</span><span id="Parser-1053"><a href="#Parser-1053"><span class="linenos">1053</span></a> <span class="k">def</span> <span class="nf">_parse_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">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-1054"><a href="#Parser-1054"><span class="linenos">1054</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-1055"><a href="#Parser-1055"><span class="linenos">1055</span></a> <span class="n">temporary</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-1056"><a href="#Parser-1056"><span class="linenos">1056</span></a> <span class="n">materialized</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">MATERIALIZED</span><span class="p">)</span>
+</span><span id="Parser-1057"><a href="#Parser-1057"><span class="linenos">1057</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">CREATABLES</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-1058"><a href="#Parser-1058"><span class="linenos">1058</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-1059"><a href="#Parser-1059"><span class="linenos">1059</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-1060"><a href="#Parser-1060"><span class="linenos">1060</span></a>
+</span><span id="Parser-1061"><a href="#Parser-1061"><span class="linenos">1061</span></a> <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-1062"><a href="#Parser-1062"><span class="linenos">1062</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
+</span><span id="Parser-1063"><a href="#Parser-1063"><span class="linenos">1063</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-1064"><a href="#Parser-1064"><span class="linenos">1064</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-1065"><a href="#Parser-1065"><span class="linenos">1065</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-1066"><a href="#Parser-1066"><span class="linenos">1066</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
+</span><span id="Parser-1067"><a href="#Parser-1067"><span class="linenos">1067</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
+</span><span id="Parser-1068"><a href="#Parser-1068"><span class="linenos">1068</span></a> <span class="n">cascade</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">CASCADE</span><span class="p">),</span>
+</span><span id="Parser-1069"><a href="#Parser-1069"><span class="linenos">1069</span></a> <span class="n">constraints</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;CONSTRAINTS&quot;</span><span class="p">),</span>
+</span><span id="Parser-1070"><a href="#Parser-1070"><span class="linenos">1070</span></a> <span class="n">purge</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;PURGE&quot;</span><span class="p">),</span>
</span><span id="Parser-1071"><a href="#Parser-1071"><span class="linenos">1071</span></a> <span class="p">)</span>
</span><span id="Parser-1072"><a href="#Parser-1072"><span class="linenos">1072</span></a>
-</span><span id="Parser-1073"><a href="#Parser-1073"><span class="linenos">1073</span></a> <span class="k">def</span> <span class="nf">_parse_create</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1074"><a href="#Parser-1074"><span class="linenos">1074</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-1075"><a href="#Parser-1075"><span class="linenos">1075</span></a> <span class="n">replace</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="o">==</span> <span class="s2">&quot;REPLACE&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span>
-</span><span id="Parser-1076"><a href="#Parser-1076"><span class="linenos">1076</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span>
-</span><span id="Parser-1077"><a href="#Parser-1077"><span class="linenos">1077</span></a> <span class="p">)</span>
-</span><span id="Parser-1078"><a href="#Parser-1078"><span class="linenos">1078</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-1073"><a href="#Parser-1073"><span class="linenos">1073</span></a> <span class="k">def</span> <span class="nf">_parse_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">not_</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="nb">bool</span><span class="p">]:</span>
+</span><span id="Parser-1074"><a href="#Parser-1074"><span class="linenos">1074</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-1075"><a href="#Parser-1075"><span class="linenos">1075</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">IF</span><span class="p">)</span>
+</span><span id="Parser-1076"><a href="#Parser-1076"><span class="linenos">1076</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">not_</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">NOT</span><span class="p">))</span>
+</span><span id="Parser-1077"><a href="#Parser-1077"><span class="linenos">1077</span></a> <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">EXISTS</span><span class="p">)</span>
+</span><span id="Parser-1078"><a href="#Parser-1078"><span class="linenos">1078</span></a> <span class="p">)</span>
</span><span id="Parser-1079"><a href="#Parser-1079"><span class="linenos">1079</span></a>
-</span><span id="Parser-1080"><a href="#Parser-1080"><span class="linenos">1080</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">TABLE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</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-1081"><a href="#Parser-1081"><span class="linenos">1081</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-1082"><a href="#Parser-1082"><span class="linenos">1082</span></a>
-</span><span id="Parser-1083"><a href="#Parser-1083"><span class="linenos">1083</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1084"><a href="#Parser-1084"><span class="linenos">1084</span></a> <span class="n">create_token</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">CREATABLES</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="Parser-1085"><a href="#Parser-1085"><span class="linenos">1085</span></a>
-</span><span id="Parser-1086"><a href="#Parser-1086"><span class="linenos">1086</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
-</span><span id="Parser-1087"><a href="#Parser-1087"><span class="linenos">1087</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
-</span><span id="Parser-1088"><a href="#Parser-1088"><span class="linenos">1088</span></a> <span class="n">create_token</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">CREATABLES</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="Parser-1080"><a href="#Parser-1080"><span class="linenos">1080</span></a> <span class="k">def</span> <span class="nf">_parse_create</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1081"><a href="#Parser-1081"><span class="linenos">1081</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-1082"><a href="#Parser-1082"><span class="linenos">1082</span></a> <span class="n">replace</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="o">==</span> <span class="s2">&quot;REPLACE&quot;</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span>
+</span><span id="Parser-1083"><a href="#Parser-1083"><span class="linenos">1083</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span>
+</span><span id="Parser-1084"><a href="#Parser-1084"><span class="linenos">1084</span></a> <span class="p">)</span>
+</span><span id="Parser-1085"><a href="#Parser-1085"><span class="linenos">1085</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-1086"><a href="#Parser-1086"><span class="linenos">1086</span></a>
+</span><span id="Parser-1087"><a href="#Parser-1087"><span class="linenos">1087</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">TABLE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</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-1088"><a href="#Parser-1088"><span class="linenos">1088</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-1089"><a href="#Parser-1089"><span class="linenos">1089</span></a>
-</span><span id="Parser-1090"><a href="#Parser-1090"><span class="linenos">1090</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">properties</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
-</span><span id="Parser-1091"><a href="#Parser-1091"><span class="linenos">1091</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-1090"><a href="#Parser-1090"><span class="linenos">1090</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1091"><a href="#Parser-1091"><span class="linenos">1091</span></a> <span class="n">create_token</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">CREATABLES</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="Parser-1092"><a href="#Parser-1092"><span class="linenos">1092</span></a>
-</span><span id="Parser-1093"><a href="#Parser-1093"><span class="linenos">1093</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 class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1094"><a href="#Parser-1094"><span class="linenos">1094</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1095"><a href="#Parser-1095"><span class="linenos">1095</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1096"><a href="#Parser-1096"><span class="linenos">1096</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1097"><a href="#Parser-1097"><span class="linenos">1097</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1098"><a href="#Parser-1098"><span class="linenos">1098</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1093"><a href="#Parser-1093"><span class="linenos">1093</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
+</span><span id="Parser-1094"><a href="#Parser-1094"><span class="linenos">1094</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
+</span><span id="Parser-1095"><a href="#Parser-1095"><span class="linenos">1095</span></a> <span class="n">create_token</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">CREATABLES</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="Parser-1096"><a href="#Parser-1096"><span class="linenos">1096</span></a>
+</span><span id="Parser-1097"><a href="#Parser-1097"><span class="linenos">1097</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">properties</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
+</span><span id="Parser-1098"><a href="#Parser-1098"><span class="linenos">1098</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-1099"><a href="#Parser-1099"><span class="linenos">1099</span></a>
-</span><span id="Parser-1100"><a href="#Parser-1100"><span class="linenos">1100</span></a> <span class="k">if</span> <span class="n">create_token</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">FUNCTION</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="Parser-1101"><a href="#Parser-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">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
-</span><span id="Parser-1102"><a href="#Parser-1102"><span class="linenos">1102</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="Parser-1103"><a href="#Parser-1103"><span class="linenos">1103</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1104"><a href="#Parser-1104"><span class="linenos">1104</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-1105"><a href="#Parser-1105"><span class="linenos">1105</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1106"><a href="#Parser-1106"><span class="linenos">1106</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="Parser-1107"><a href="#Parser-1107"><span class="linenos">1107</span></a>
-</span><span id="Parser-1108"><a href="#Parser-1108"><span class="linenos">1108</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-1109"><a href="#Parser-1109"><span class="linenos">1109</span></a> <span class="n">begin</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">BEGIN</span><span class="p">)</span>
-</span><span id="Parser-1110"><a href="#Parser-1110"><span class="linenos">1110</span></a> <span class="n">return_</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;RETURN&quot;</span><span class="p">)</span>
-</span><span id="Parser-1111"><a href="#Parser-1111"><span class="linenos">1111</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
-</span><span id="Parser-1112"><a href="#Parser-1112"><span class="linenos">1112</span></a>
-</span><span id="Parser-1113"><a href="#Parser-1113"><span class="linenos">1113</span></a> <span class="k">if</span> <span class="n">return_</span><span class="p">:</span>
-</span><span id="Parser-1114"><a href="#Parser-1114"><span class="linenos">1114</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 class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Parser-1115"><a href="#Parser-1115"><span class="linenos">1115</span></a> <span class="k">elif</span> <span class="n">create_token</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">INDEX</span><span class="p">:</span>
-</span><span id="Parser-1116"><a href="#Parser-1116"><span class="linenos">1116</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">()</span>
-</span><span id="Parser-1117"><a href="#Parser-1117"><span class="linenos">1117</span></a> <span class="k">elif</span> <span class="n">create_token</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">DB_CREATABLES</span><span class="p">:</span>
-</span><span id="Parser-1118"><a href="#Parser-1118"><span class="linenos">1118</span></a> <span class="n">table_parts</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-1100"><a href="#Parser-1100"><span class="linenos">1100</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 class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1101"><a href="#Parser-1101"><span class="linenos">1101</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1102"><a href="#Parser-1102"><span class="linenos">1102</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1103"><a href="#Parser-1103"><span class="linenos">1103</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1104"><a href="#Parser-1104"><span class="linenos">1104</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1105"><a href="#Parser-1105"><span class="linenos">1105</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1106"><a href="#Parser-1106"><span class="linenos">1106</span></a>
+</span><span id="Parser-1107"><a href="#Parser-1107"><span class="linenos">1107</span></a> <span class="k">if</span> <span class="n">create_token</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">FUNCTION</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="Parser-1108"><a href="#Parser-1108"><span class="linenos">1108</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="Parser-1109"><a href="#Parser-1109"><span class="linenos">1109</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="Parser-1110"><a href="#Parser-1110"><span class="linenos">1110</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1111"><a href="#Parser-1111"><span class="linenos">1111</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-1112"><a href="#Parser-1112"><span class="linenos">1112</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1113"><a href="#Parser-1113"><span class="linenos">1113</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="Parser-1114"><a href="#Parser-1114"><span class="linenos">1114</span></a>
+</span><span id="Parser-1115"><a href="#Parser-1115"><span class="linenos">1115</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-1116"><a href="#Parser-1116"><span class="linenos">1116</span></a> <span class="n">begin</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">BEGIN</span><span class="p">)</span>
+</span><span id="Parser-1117"><a href="#Parser-1117"><span class="linenos">1117</span></a> <span class="n">return_</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;RETURN&quot;</span><span class="p">)</span>
+</span><span id="Parser-1118"><a href="#Parser-1118"><span class="linenos">1118</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="Parser-1119"><a href="#Parser-1119"><span class="linenos">1119</span></a>
-</span><span id="Parser-1120"><a href="#Parser-1120"><span class="linenos">1120</span></a> <span class="c1"># exp.Properties.Location.POST_NAME</span>
-</span><span id="Parser-1121"><a href="#Parser-1121"><span class="linenos">1121</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1122"><a href="#Parser-1122"><span class="linenos">1122</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(</span><span class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1123"><a href="#Parser-1123"><span class="linenos">1123</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1124"><a href="#Parser-1124"><span class="linenos">1124</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-1125"><a href="#Parser-1125"><span class="linenos">1125</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1126"><a href="#Parser-1126"><span class="linenos">1126</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="Parser-1127"><a href="#Parser-1127"><span class="linenos">1127</span></a>
-</span><span id="Parser-1128"><a href="#Parser-1128"><span class="linenos">1128</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="n">this</span><span class="o">=</span><span class="n">table_parts</span><span class="p">)</span>
-</span><span id="Parser-1129"><a href="#Parser-1129"><span class="linenos">1129</span></a>
-</span><span id="Parser-1130"><a href="#Parser-1130"><span class="linenos">1130</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
-</span><span id="Parser-1131"><a href="#Parser-1131"><span class="linenos">1131</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="Parser-1132"><a href="#Parser-1132"><span class="linenos">1132</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1133"><a href="#Parser-1133"><span class="linenos">1133</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-1134"><a href="#Parser-1134"><span class="linenos">1134</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1135"><a href="#Parser-1135"><span class="linenos">1135</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="Parser-1120"><a href="#Parser-1120"><span class="linenos">1120</span></a> <span class="k">if</span> <span class="n">return_</span><span class="p">:</span>
+</span><span id="Parser-1121"><a href="#Parser-1121"><span class="linenos">1121</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 class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-1122"><a href="#Parser-1122"><span class="linenos">1122</span></a> <span class="k">elif</span> <span class="n">create_token</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">INDEX</span><span class="p">:</span>
+</span><span id="Parser-1123"><a href="#Parser-1123"><span class="linenos">1123</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">()</span>
+</span><span id="Parser-1124"><a href="#Parser-1124"><span class="linenos">1124</span></a> <span class="k">elif</span> <span class="n">create_token</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">DB_CREATABLES</span><span class="p">:</span>
+</span><span id="Parser-1125"><a href="#Parser-1125"><span class="linenos">1125</span></a> <span class="n">table_parts</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-1126"><a href="#Parser-1126"><span class="linenos">1126</span></a>
+</span><span id="Parser-1127"><a href="#Parser-1127"><span class="linenos">1127</span></a> <span class="c1"># exp.Properties.Location.POST_NAME</span>
+</span><span id="Parser-1128"><a href="#Parser-1128"><span class="linenos">1128</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1129"><a href="#Parser-1129"><span class="linenos">1129</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(</span><span class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1130"><a href="#Parser-1130"><span class="linenos">1130</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1131"><a href="#Parser-1131"><span class="linenos">1131</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-1132"><a href="#Parser-1132"><span class="linenos">1132</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1133"><a href="#Parser-1133"><span class="linenos">1133</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="Parser-1134"><a href="#Parser-1134"><span class="linenos">1134</span></a>
+</span><span id="Parser-1135"><a href="#Parser-1135"><span class="linenos">1135</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="n">this</span><span class="o">=</span><span class="n">table_parts</span><span class="p">)</span>
</span><span id="Parser-1136"><a href="#Parser-1136"><span class="linenos">1136</span></a>
-</span><span id="Parser-1137"><a href="#Parser-1137"><span class="linenos">1137</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-1138"><a href="#Parser-1138"><span class="linenos">1138</span></a>
-</span><span id="Parser-1139"><a href="#Parser-1139"><span class="linenos">1139</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
-</span><span id="Parser-1140"><a href="#Parser-1140"><span class="linenos">1140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="Parser-1141"><a href="#Parser-1141"><span class="linenos">1141</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">SELECT</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-1142"><a href="#Parser-1142"><span class="linenos">1142</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">WITH</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-1143"><a href="#Parser-1143"><span class="linenos">1143</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">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-1144"><a href="#Parser-1144"><span class="linenos">1144</span></a> <span class="p">):</span>
-</span><span id="Parser-1145"><a href="#Parser-1145"><span class="linenos">1145</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="Parser-1146"><a href="#Parser-1146"><span class="linenos">1146</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1147"><a href="#Parser-1147"><span class="linenos">1147</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-1148"><a href="#Parser-1148"><span class="linenos">1148</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1149"><a href="#Parser-1149"><span class="linenos">1149</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="Parser-1150"><a href="#Parser-1150"><span class="linenos">1150</span></a>
-</span><span id="Parser-1151"><a href="#Parser-1151"><span class="linenos">1151</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">()</span>
-</span><span id="Parser-1152"><a href="#Parser-1152"><span class="linenos">1152</span></a>
-</span><span id="Parser-1153"><a href="#Parser-1153"><span class="linenos">1153</span></a> <span class="k">if</span> <span class="n">create_token</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">TABLE</span><span class="p">:</span>
-</span><span id="Parser-1154"><a href="#Parser-1154"><span class="linenos">1154</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
-</span><span id="Parser-1155"><a href="#Parser-1155"><span class="linenos">1155</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="Parser-1156"><a href="#Parser-1156"><span class="linenos">1156</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1157"><a href="#Parser-1157"><span class="linenos">1157</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-1158"><a href="#Parser-1158"><span class="linenos">1158</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1159"><a href="#Parser-1159"><span class="linenos">1159</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="Parser-1160"><a href="#Parser-1160"><span class="linenos">1160</span></a>
-</span><span id="Parser-1161"><a href="#Parser-1161"><span class="linenos">1161</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1162"><a href="#Parser-1162"><span class="linenos">1162</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-1163"><a href="#Parser-1163"><span class="linenos">1163</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_table_index</span><span class="p">()</span>
-</span><span id="Parser-1164"><a href="#Parser-1164"><span class="linenos">1164</span></a>
-</span><span id="Parser-1165"><a href="#Parser-1165"><span class="linenos">1165</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
-</span><span id="Parser-1166"><a href="#Parser-1166"><span class="linenos">1166</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</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-1167"><a href="#Parser-1167"><span class="linenos">1167</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
-</span><span id="Parser-1168"><a href="#Parser-1168"><span class="linenos">1168</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1169"><a href="#Parser-1169"><span class="linenos">1169</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-1170"><a href="#Parser-1170"><span class="linenos">1170</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
-</span><span id="Parser-1171"><a href="#Parser-1171"><span class="linenos">1171</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
-</span><span id="Parser-1172"><a href="#Parser-1172"><span class="linenos">1172</span></a>
-</span><span id="Parser-1173"><a href="#Parser-1173"><span class="linenos">1173</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="Parser-1174"><a href="#Parser-1174"><span class="linenos">1174</span></a> <span class="k">break</span>
-</span><span id="Parser-1175"><a href="#Parser-1175"><span class="linenos">1175</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1176"><a href="#Parser-1176"><span class="linenos">1176</span></a> <span class="n">indexes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-1177"><a href="#Parser-1177"><span class="linenos">1177</span></a> <span class="k">elif</span> <span class="n">create_token</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">VIEW</span><span class="p">:</span>
-</span><span id="Parser-1178"><a href="#Parser-1178"><span class="linenos">1178</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;BINDING&quot;</span><span class="p">):</span>
-</span><span id="Parser-1179"><a href="#Parser-1179"><span class="linenos">1179</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1180"><a href="#Parser-1180"><span class="linenos">1180</span></a>
-</span><span id="Parser-1181"><a href="#Parser-1181"><span class="linenos">1181</span></a> <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-1182"><a href="#Parser-1182"><span class="linenos">1182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
-</span><span id="Parser-1183"><a href="#Parser-1183"><span class="linenos">1183</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1184"><a href="#Parser-1184"><span class="linenos">1184</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="Parser-1185"><a href="#Parser-1185"><span class="linenos">1185</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
-</span><span id="Parser-1186"><a href="#Parser-1186"><span class="linenos">1186</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="Parser-1187"><a href="#Parser-1187"><span class="linenos">1187</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Parser-1188"><a href="#Parser-1188"><span class="linenos">1188</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="Parser-1189"><a href="#Parser-1189"><span class="linenos">1189</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
-</span><span id="Parser-1190"><a href="#Parser-1190"><span class="linenos">1190</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
-</span><span id="Parser-1191"><a href="#Parser-1191"><span class="linenos">1191</span></a> <span class="n">no_schema_binding</span><span class="o">=</span><span class="n">no_schema_binding</span><span class="p">,</span>
-</span><span id="Parser-1192"><a href="#Parser-1192"><span class="linenos">1192</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
-</span><span id="Parser-1193"><a href="#Parser-1193"><span class="linenos">1193</span></a> <span class="p">)</span>
-</span><span id="Parser-1194"><a href="#Parser-1194"><span class="linenos">1194</span></a>
-</span><span id="Parser-1195"><a href="#Parser-1195"><span class="linenos">1195</span></a> <span class="k">def</span> <span class="nf">_parse_property_before</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1196"><a href="#Parser-1196"><span class="linenos">1196</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-1197"><a href="#Parser-1197"><span class="linenos">1197</span></a>
-</span><span id="Parser-1198"><a href="#Parser-1198"><span class="linenos">1198</span></a> <span class="c1"># parsers look to _prev for no/dual/default, so need to consume first</span>
-</span><span id="Parser-1199"><a href="#Parser-1199"><span class="linenos">1199</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;NO&quot;</span><span class="p">)</span>
-</span><span id="Parser-1200"><a href="#Parser-1200"><span class="linenos">1200</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;DUAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1201"><a href="#Parser-1201"><span class="linenos">1201</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;DEFAULT&quot;</span><span class="p">)</span>
-</span><span id="Parser-1202"><a href="#Parser-1202"><span class="linenos">1202</span></a>
-</span><span id="Parser-1203"><a href="#Parser-1203"><span class="linenos">1203</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_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">_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-1204"><a href="#Parser-1204"><span class="linenos">1204</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</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="bp">self</span><span class="p">)</span>
-</span><span id="Parser-1205"><a href="#Parser-1205"><span class="linenos">1205</span></a>
-</span><span id="Parser-1206"><a href="#Parser-1206"><span class="linenos">1206</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1207"><a href="#Parser-1207"><span class="linenos">1207</span></a>
-</span><span id="Parser-1208"><a href="#Parser-1208"><span class="linenos">1208</span></a> <span class="k">def</span> <span class="nf">_parse_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="Parser-1209"><a href="#Parser-1209"><span class="linenos">1209</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">PROPERTY_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-1210"><a href="#Parser-1210"><span class="linenos">1210</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_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-1211"><a href="#Parser-1211"><span class="linenos">1211</span></a>
-</span><span id="Parser-1212"><a href="#Parser-1212"><span class="linenos">1212</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">DEFAULT</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-1213"><a href="#Parser-1213"><span class="linenos">1213</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_character_set</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1137"><a href="#Parser-1137"><span class="linenos">1137</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
+</span><span id="Parser-1138"><a href="#Parser-1138"><span class="linenos">1138</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="Parser-1139"><a href="#Parser-1139"><span class="linenos">1139</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1140"><a href="#Parser-1140"><span class="linenos">1140</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-1141"><a href="#Parser-1141"><span class="linenos">1141</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1142"><a href="#Parser-1142"><span class="linenos">1142</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="Parser-1143"><a href="#Parser-1143"><span class="linenos">1143</span></a>
+</span><span id="Parser-1144"><a href="#Parser-1144"><span class="linenos">1144</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-1145"><a href="#Parser-1145"><span class="linenos">1145</span></a>
+</span><span id="Parser-1146"><a href="#Parser-1146"><span class="linenos">1146</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
+</span><span id="Parser-1147"><a href="#Parser-1147"><span class="linenos">1147</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
+</span><span id="Parser-1148"><a href="#Parser-1148"><span class="linenos">1148</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">SELECT</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-1149"><a href="#Parser-1149"><span class="linenos">1149</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">WITH</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-1150"><a href="#Parser-1150"><span class="linenos">1150</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">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-1151"><a href="#Parser-1151"><span class="linenos">1151</span></a> <span class="p">):</span>
+</span><span id="Parser-1152"><a href="#Parser-1152"><span class="linenos">1152</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="Parser-1153"><a href="#Parser-1153"><span class="linenos">1153</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1154"><a href="#Parser-1154"><span class="linenos">1154</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-1155"><a href="#Parser-1155"><span class="linenos">1155</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1156"><a href="#Parser-1156"><span class="linenos">1156</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="Parser-1157"><a href="#Parser-1157"><span class="linenos">1157</span></a>
+</span><span id="Parser-1158"><a href="#Parser-1158"><span class="linenos">1158</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">()</span>
+</span><span id="Parser-1159"><a href="#Parser-1159"><span class="linenos">1159</span></a>
+</span><span id="Parser-1160"><a href="#Parser-1160"><span class="linenos">1160</span></a> <span class="k">if</span> <span class="n">create_token</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">TABLE</span><span class="p">:</span>
+</span><span id="Parser-1161"><a href="#Parser-1161"><span class="linenos">1161</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
+</span><span id="Parser-1162"><a href="#Parser-1162"><span class="linenos">1162</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="Parser-1163"><a href="#Parser-1163"><span class="linenos">1163</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1164"><a href="#Parser-1164"><span class="linenos">1164</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-1165"><a href="#Parser-1165"><span class="linenos">1165</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1166"><a href="#Parser-1166"><span class="linenos">1166</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="Parser-1167"><a href="#Parser-1167"><span class="linenos">1167</span></a>
+</span><span id="Parser-1168"><a href="#Parser-1168"><span class="linenos">1168</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1169"><a href="#Parser-1169"><span class="linenos">1169</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-1170"><a href="#Parser-1170"><span class="linenos">1170</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_table_index</span><span class="p">()</span>
+</span><span id="Parser-1171"><a href="#Parser-1171"><span class="linenos">1171</span></a>
+</span><span id="Parser-1172"><a href="#Parser-1172"><span class="linenos">1172</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
+</span><span id="Parser-1173"><a href="#Parser-1173"><span class="linenos">1173</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</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-1174"><a href="#Parser-1174"><span class="linenos">1174</span></a> <span class="n">temp_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
+</span><span id="Parser-1175"><a href="#Parser-1175"><span class="linenos">1175</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1176"><a href="#Parser-1176"><span class="linenos">1176</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_properties</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-1177"><a href="#Parser-1177"><span class="linenos">1177</span></a> <span class="k">elif</span> <span class="n">temp_properties</span><span class="p">:</span>
+</span><span id="Parser-1178"><a href="#Parser-1178"><span class="linenos">1178</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_properties</span>
+</span><span id="Parser-1179"><a href="#Parser-1179"><span class="linenos">1179</span></a>
+</span><span id="Parser-1180"><a href="#Parser-1180"><span class="linenos">1180</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="Parser-1181"><a href="#Parser-1181"><span class="linenos">1181</span></a> <span class="k">break</span>
+</span><span id="Parser-1182"><a href="#Parser-1182"><span class="linenos">1182</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1183"><a href="#Parser-1183"><span class="linenos">1183</span></a> <span class="n">indexes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-1184"><a href="#Parser-1184"><span class="linenos">1184</span></a> <span class="k">elif</span> <span class="n">create_token</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">VIEW</span><span class="p">:</span>
+</span><span id="Parser-1185"><a href="#Parser-1185"><span class="linenos">1185</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;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;BINDING&quot;</span><span class="p">):</span>
+</span><span id="Parser-1186"><a href="#Parser-1186"><span class="linenos">1186</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1187"><a href="#Parser-1187"><span class="linenos">1187</span></a>
+</span><span id="Parser-1188"><a href="#Parser-1188"><span class="linenos">1188</span></a> <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-1189"><a href="#Parser-1189"><span class="linenos">1189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
+</span><span id="Parser-1190"><a href="#Parser-1190"><span class="linenos">1190</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1191"><a href="#Parser-1191"><span class="linenos">1191</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="Parser-1192"><a href="#Parser-1192"><span class="linenos">1192</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
+</span><span id="Parser-1193"><a href="#Parser-1193"><span class="linenos">1193</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="Parser-1194"><a href="#Parser-1194"><span class="linenos">1194</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-1195"><a href="#Parser-1195"><span class="linenos">1195</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="Parser-1196"><a href="#Parser-1196"><span class="linenos">1196</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
+</span><span id="Parser-1197"><a href="#Parser-1197"><span class="linenos">1197</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
+</span><span id="Parser-1198"><a href="#Parser-1198"><span class="linenos">1198</span></a> <span class="n">no_schema_binding</span><span class="o">=</span><span class="n">no_schema_binding</span><span class="p">,</span>
+</span><span id="Parser-1199"><a href="#Parser-1199"><span class="linenos">1199</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
+</span><span id="Parser-1200"><a href="#Parser-1200"><span class="linenos">1200</span></a> <span class="p">)</span>
+</span><span id="Parser-1201"><a href="#Parser-1201"><span class="linenos">1201</span></a>
+</span><span id="Parser-1202"><a href="#Parser-1202"><span class="linenos">1202</span></a> <span class="k">def</span> <span class="nf">_parse_property_before</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1203"><a href="#Parser-1203"><span class="linenos">1203</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-1204"><a href="#Parser-1204"><span class="linenos">1204</span></a>
+</span><span id="Parser-1205"><a href="#Parser-1205"><span class="linenos">1205</span></a> <span class="c1"># parsers look to _prev for no/dual/default, so need to consume first</span>
+</span><span id="Parser-1206"><a href="#Parser-1206"><span class="linenos">1206</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;NO&quot;</span><span class="p">)</span>
+</span><span id="Parser-1207"><a href="#Parser-1207"><span class="linenos">1207</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;DUAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1208"><a href="#Parser-1208"><span class="linenos">1208</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;DEFAULT&quot;</span><span class="p">)</span>
+</span><span id="Parser-1209"><a href="#Parser-1209"><span class="linenos">1209</span></a>
+</span><span id="Parser-1210"><a href="#Parser-1210"><span class="linenos">1210</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_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">_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-1211"><a href="#Parser-1211"><span class="linenos">1211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</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="bp">self</span><span class="p">)</span>
+</span><span id="Parser-1212"><a href="#Parser-1212"><span class="linenos">1212</span></a>
+</span><span id="Parser-1213"><a href="#Parser-1213"><span class="linenos">1213</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1214"><a href="#Parser-1214"><span class="linenos">1214</span></a>
-</span><span id="Parser-1215"><a href="#Parser-1215"><span class="linenos">1215</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">COMPOUND</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">):</span>
-</span><span id="Parser-1216"><a href="#Parser-1216"><span class="linenos">1216</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1217"><a href="#Parser-1217"><span class="linenos">1217</span></a>
-</span><span id="Parser-1218"><a href="#Parser-1218"><span class="linenos">1218</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;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;SECURITY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1219"><a href="#Parser-1219"><span class="linenos">1219</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">,</span> <span class="n">definer</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;DEFINER&quot;</span><span class="p">))</span>
-</span><span id="Parser-1220"><a href="#Parser-1220"><span class="linenos">1220</span></a>
-</span><span id="Parser-1221"><a href="#Parser-1221"><span class="linenos">1221</span></a> <span class="n">assignment</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><span id="Parser-1222"><a href="#Parser-1222"><span class="linenos">1222</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
-</span><span id="Parser-1223"><a href="#Parser-1223"><span class="linenos">1223</span></a> <span class="p">)</span> <span class="ow">or</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</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-1215"><a href="#Parser-1215"><span class="linenos">1215</span></a> <span class="k">def</span> <span class="nf">_parse_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="Parser-1216"><a href="#Parser-1216"><span class="linenos">1216</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">PROPERTY_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-1217"><a href="#Parser-1217"><span class="linenos">1217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_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-1218"><a href="#Parser-1218"><span class="linenos">1218</span></a>
+</span><span id="Parser-1219"><a href="#Parser-1219"><span class="linenos">1219</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">DEFAULT</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-1220"><a href="#Parser-1220"><span class="linenos">1220</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_character_set</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1221"><a href="#Parser-1221"><span class="linenos">1221</span></a>
+</span><span id="Parser-1222"><a href="#Parser-1222"><span class="linenos">1222</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">COMPOUND</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">):</span>
+</span><span id="Parser-1223"><a href="#Parser-1223"><span class="linenos">1223</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-1224"><a href="#Parser-1224"><span class="linenos">1224</span></a>
-</span><span id="Parser-1225"><a href="#Parser-1225"><span class="linenos">1225</span></a> <span class="k">if</span> <span class="n">assignment</span><span class="p">:</span>
-</span><span id="Parser-1226"><a href="#Parser-1226"><span class="linenos">1226</span></a> <span class="n">key</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-1227"><a href="#Parser-1227"><span class="linenos">1227</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1228"><a href="#Parser-1228"><span class="linenos">1228</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
-</span><span id="Parser-1229"><a href="#Parser-1229"><span class="linenos">1229</span></a>
-</span><span id="Parser-1230"><a href="#Parser-1230"><span class="linenos">1230</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1225"><a href="#Parser-1225"><span class="linenos">1225</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;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;SECURITY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1226"><a href="#Parser-1226"><span class="linenos">1226</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">,</span> <span class="n">definer</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;DEFINER&quot;</span><span class="p">))</span>
+</span><span id="Parser-1227"><a href="#Parser-1227"><span class="linenos">1227</span></a>
+</span><span id="Parser-1228"><a href="#Parser-1228"><span class="linenos">1228</span></a> <span class="n">assignment</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><span id="Parser-1229"><a href="#Parser-1229"><span class="linenos">1229</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
+</span><span id="Parser-1230"><a href="#Parser-1230"><span class="linenos">1230</span></a> <span class="p">)</span> <span class="ow">or</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">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</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-1231"><a href="#Parser-1231"><span class="linenos">1231</span></a>
-</span><span id="Parser-1232"><a href="#Parser-1232"><span class="linenos">1232</span></a> <span class="k">def</span> <span class="nf">_parse_stored</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-1233"><a href="#Parser-1233"><span class="linenos">1233</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-1234"><a href="#Parser-1234"><span class="linenos">1234</span></a>
-</span><span id="Parser-1235"><a href="#Parser-1235"><span class="linenos">1235</span></a> <span class="n">input_format</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="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;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-1236"><a href="#Parser-1236"><span class="linenos">1236</span></a> <span class="n">output_format</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="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;OUTPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-1237"><a href="#Parser-1237"><span class="linenos">1237</span></a>
-</span><span id="Parser-1238"><a href="#Parser-1238"><span class="linenos">1238</span></a> <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-1239"><a href="#Parser-1239"><span class="linenos">1239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
-</span><span id="Parser-1240"><a href="#Parser-1240"><span class="linenos">1240</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-1241"><a href="#Parser-1241"><span class="linenos">1241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">,</span> <span class="n">input_format</span><span class="o">=</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="n">output_format</span>
-</span><span id="Parser-1242"><a href="#Parser-1242"><span class="linenos">1242</span></a> <span class="p">)</span>
-</span><span id="Parser-1243"><a href="#Parser-1243"><span class="linenos">1243</span></a> <span class="k">if</span> <span class="n">input_format</span> <span class="ow">or</span> <span class="n">output_format</span>
-</span><span id="Parser-1244"><a href="#Parser-1244"><span class="linenos">1244</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1245"><a href="#Parser-1245"><span class="linenos">1245</span></a> <span class="p">)</span>
-</span><span id="Parser-1246"><a href="#Parser-1246"><span class="linenos">1246</span></a>
-</span><span id="Parser-1247"><a href="#Parser-1247"><span class="linenos">1247</span></a> <span class="k">def</span> <span class="nf">_parse_property_assignment</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">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-1248"><a href="#Parser-1248"><span class="linenos">1248</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1249"><a href="#Parser-1249"><span class="linenos">1249</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-1250"><a href="#Parser-1250"><span class="linenos">1250</span></a> <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-1251"><a href="#Parser-1251"><span class="linenos">1251</span></a> <span class="n">exp_class</span><span class="p">,</span>
-</span><span id="Parser-1252"><a href="#Parser-1252"><span class="linenos">1252</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_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1253"><a href="#Parser-1253"><span class="linenos">1253</span></a> <span class="p">)</span>
-</span><span id="Parser-1254"><a href="#Parser-1254"><span class="linenos">1254</span></a>
-</span><span id="Parser-1255"><a href="#Parser-1255"><span class="linenos">1255</span></a> <span class="k">def</span> <span class="nf">_parse_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">before</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-1256"><a href="#Parser-1256"><span class="linenos">1256</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1257"><a href="#Parser-1257"><span class="linenos">1257</span></a>
-</span><span id="Parser-1258"><a href="#Parser-1258"><span class="linenos">1258</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-1259"><a href="#Parser-1259"><span class="linenos">1259</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
-</span><span id="Parser-1260"><a href="#Parser-1260"><span class="linenos">1260</span></a> <span class="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_before</span><span class="p">()</span>
-</span><span id="Parser-1261"><a href="#Parser-1261"><span class="linenos">1261</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1262"><a href="#Parser-1262"><span class="linenos">1262</span></a> <span class="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">()</span>
-</span><span id="Parser-1263"><a href="#Parser-1263"><span class="linenos">1263</span></a>
-</span><span id="Parser-1264"><a href="#Parser-1264"><span class="linenos">1264</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identified_property</span><span class="p">:</span>
-</span><span id="Parser-1265"><a href="#Parser-1265"><span class="linenos">1265</span></a> <span class="k">break</span>
-</span><span id="Parser-1266"><a href="#Parser-1266"><span class="linenos">1266</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">identified_property</span><span class="p">):</span>
-</span><span id="Parser-1267"><a href="#Parser-1267"><span class="linenos">1267</span></a> <span class="n">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="Parser-1268"><a href="#Parser-1268"><span class="linenos">1268</span></a>
-</span><span id="Parser-1269"><a href="#Parser-1269"><span class="linenos">1269</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
-</span><span id="Parser-1270"><a href="#Parser-1270"><span class="linenos">1270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">expressions</span><span class="o">=</span><span class="n">properties</span><span class="p">)</span>
-</span><span id="Parser-1271"><a href="#Parser-1271"><span class="linenos">1271</span></a>
-</span><span id="Parser-1272"><a href="#Parser-1272"><span class="linenos">1272</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1273"><a href="#Parser-1273"><span class="linenos">1273</span></a>
-</span><span id="Parser-1274"><a href="#Parser-1274"><span class="linenos">1274</span></a> <span class="k">def</span> <span class="nf">_parse_fallback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1275"><a href="#Parser-1275"><span class="linenos">1275</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;FALLBACK&quot;</span><span class="p">)</span>
-</span><span id="Parser-1276"><a href="#Parser-1276"><span class="linenos">1276</span></a> <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-1277"><a href="#Parser-1277"><span class="linenos">1277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">protection</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;PROTECTION&quot;</span><span class="p">)</span>
-</span><span id="Parser-1278"><a href="#Parser-1278"><span class="linenos">1278</span></a> <span class="p">)</span>
-</span><span id="Parser-1279"><a href="#Parser-1279"><span class="linenos">1279</span></a>
-</span><span id="Parser-1280"><a href="#Parser-1280"><span class="linenos">1280</span></a> <span class="k">def</span> <span class="nf">_parse_volatile_property</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-1281"><a href="#Parser-1281"><span class="linenos">1281</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Parser-1282"><a href="#Parser-1282"><span class="linenos">1282</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span>
-</span><span id="Parser-1283"><a href="#Parser-1283"><span class="linenos">1283</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1284"><a href="#Parser-1284"><span class="linenos">1284</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1285"><a href="#Parser-1285"><span class="linenos">1285</span></a>
-</span><span id="Parser-1286"><a href="#Parser-1286"><span class="linenos">1286</span></a> <span class="k">if</span> <span class="n">pre_volatile_token</span> <span class="ow">and</span> <span class="n">pre_volatile_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span>
-</span><span id="Parser-1287"><a href="#Parser-1287"><span class="linenos">1287</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span>
-</span><span id="Parser-1288"><a href="#Parser-1288"><span class="linenos">1288</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
-</span><span id="Parser-1289"><a href="#Parser-1289"><span class="linenos">1289</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
-</span><span id="Parser-1290"><a href="#Parser-1290"><span class="linenos">1290</span></a> <span class="p">):</span>
-</span><span id="Parser-1291"><a href="#Parser-1291"><span class="linenos">1291</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">()</span>
+</span><span id="Parser-1232"><a href="#Parser-1232"><span class="linenos">1232</span></a> <span class="k">if</span> <span class="n">assignment</span><span class="p">:</span>
+</span><span id="Parser-1233"><a href="#Parser-1233"><span class="linenos">1233</span></a> <span class="n">key</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-1234"><a href="#Parser-1234"><span class="linenos">1234</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1235"><a href="#Parser-1235"><span class="linenos">1235</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
+</span><span id="Parser-1236"><a href="#Parser-1236"><span class="linenos">1236</span></a>
+</span><span id="Parser-1237"><a href="#Parser-1237"><span class="linenos">1237</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1238"><a href="#Parser-1238"><span class="linenos">1238</span></a>
+</span><span id="Parser-1239"><a href="#Parser-1239"><span class="linenos">1239</span></a> <span class="k">def</span> <span class="nf">_parse_stored</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-1240"><a href="#Parser-1240"><span class="linenos">1240</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-1241"><a href="#Parser-1241"><span class="linenos">1241</span></a>
+</span><span id="Parser-1242"><a href="#Parser-1242"><span class="linenos">1242</span></a> <span class="n">input_format</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="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;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-1243"><a href="#Parser-1243"><span class="linenos">1243</span></a> <span class="n">output_format</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="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;OUTPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-1244"><a href="#Parser-1244"><span class="linenos">1244</span></a>
+</span><span id="Parser-1245"><a href="#Parser-1245"><span class="linenos">1245</span></a> <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-1246"><a href="#Parser-1246"><span class="linenos">1246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
+</span><span id="Parser-1247"><a href="#Parser-1247"><span class="linenos">1247</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-1248"><a href="#Parser-1248"><span class="linenos">1248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">,</span> <span class="n">input_format</span><span class="o">=</span><span class="n">input_format</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="n">output_format</span>
+</span><span id="Parser-1249"><a href="#Parser-1249"><span class="linenos">1249</span></a> <span class="p">)</span>
+</span><span id="Parser-1250"><a href="#Parser-1250"><span class="linenos">1250</span></a> <span class="k">if</span> <span class="n">input_format</span> <span class="ow">or</span> <span class="n">output_format</span>
+</span><span id="Parser-1251"><a href="#Parser-1251"><span class="linenos">1251</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1252"><a href="#Parser-1252"><span class="linenos">1252</span></a> <span class="p">)</span>
+</span><span id="Parser-1253"><a href="#Parser-1253"><span class="linenos">1253</span></a>
+</span><span id="Parser-1254"><a href="#Parser-1254"><span class="linenos">1254</span></a> <span class="k">def</span> <span class="nf">_parse_property_assignment</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">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-1255"><a href="#Parser-1255"><span class="linenos">1255</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1256"><a href="#Parser-1256"><span class="linenos">1256</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-1257"><a href="#Parser-1257"><span class="linenos">1257</span></a> <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-1258"><a href="#Parser-1258"><span class="linenos">1258</span></a> <span class="n">exp_class</span><span class="p">,</span>
+</span><span id="Parser-1259"><a href="#Parser-1259"><span class="linenos">1259</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_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</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-1260"><a href="#Parser-1260"><span class="linenos">1260</span></a> <span class="p">)</span>
+</span><span id="Parser-1261"><a href="#Parser-1261"><span class="linenos">1261</span></a>
+</span><span id="Parser-1262"><a href="#Parser-1262"><span class="linenos">1262</span></a> <span class="k">def</span> <span class="nf">_parse_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">before</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-1263"><a href="#Parser-1263"><span class="linenos">1263</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1264"><a href="#Parser-1264"><span class="linenos">1264</span></a>
+</span><span id="Parser-1265"><a href="#Parser-1265"><span class="linenos">1265</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-1266"><a href="#Parser-1266"><span class="linenos">1266</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
+</span><span id="Parser-1267"><a href="#Parser-1267"><span class="linenos">1267</span></a> <span class="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_before</span><span class="p">()</span>
+</span><span id="Parser-1268"><a href="#Parser-1268"><span class="linenos">1268</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1269"><a href="#Parser-1269"><span class="linenos">1269</span></a> <span class="n">identified_property</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">()</span>
+</span><span id="Parser-1270"><a href="#Parser-1270"><span class="linenos">1270</span></a>
+</span><span id="Parser-1271"><a href="#Parser-1271"><span class="linenos">1271</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identified_property</span><span class="p">:</span>
+</span><span id="Parser-1272"><a href="#Parser-1272"><span class="linenos">1272</span></a> <span class="k">break</span>
+</span><span id="Parser-1273"><a href="#Parser-1273"><span class="linenos">1273</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">identified_property</span><span class="p">):</span>
+</span><span id="Parser-1274"><a href="#Parser-1274"><span class="linenos">1274</span></a> <span class="n">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="Parser-1275"><a href="#Parser-1275"><span class="linenos">1275</span></a>
+</span><span id="Parser-1276"><a href="#Parser-1276"><span class="linenos">1276</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
+</span><span id="Parser-1277"><a href="#Parser-1277"><span class="linenos">1277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">expressions</span><span class="o">=</span><span class="n">properties</span><span class="p">)</span>
+</span><span id="Parser-1278"><a href="#Parser-1278"><span class="linenos">1278</span></a>
+</span><span id="Parser-1279"><a href="#Parser-1279"><span class="linenos">1279</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1280"><a href="#Parser-1280"><span class="linenos">1280</span></a>
+</span><span id="Parser-1281"><a href="#Parser-1281"><span class="linenos">1281</span></a> <span class="k">def</span> <span class="nf">_parse_fallback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1282"><a href="#Parser-1282"><span class="linenos">1282</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;FALLBACK&quot;</span><span class="p">)</span>
+</span><span id="Parser-1283"><a href="#Parser-1283"><span class="linenos">1283</span></a> <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-1284"><a href="#Parser-1284"><span class="linenos">1284</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">protection</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;PROTECTION&quot;</span><span class="p">)</span>
+</span><span id="Parser-1285"><a href="#Parser-1285"><span class="linenos">1285</span></a> <span class="p">)</span>
+</span><span id="Parser-1286"><a href="#Parser-1286"><span class="linenos">1286</span></a>
+</span><span id="Parser-1287"><a href="#Parser-1287"><span class="linenos">1287</span></a> <span class="k">def</span> <span class="nf">_parse_volatile_property</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-1288"><a href="#Parser-1288"><span class="linenos">1288</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Parser-1289"><a href="#Parser-1289"><span class="linenos">1289</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span>
+</span><span id="Parser-1290"><a href="#Parser-1290"><span class="linenos">1290</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1291"><a href="#Parser-1291"><span class="linenos">1291</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1292"><a href="#Parser-1292"><span class="linenos">1292</span></a>
-</span><span id="Parser-1293"><a href="#Parser-1293"><span class="linenos">1293</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">))</span>
-</span><span id="Parser-1294"><a href="#Parser-1294"><span class="linenos">1294</span></a>
-</span><span id="Parser-1295"><a href="#Parser-1295"><span class="linenos">1295</span></a> <span class="k">def</span> <span class="nf">_parse_with_property</span><span class="p">(</span>
-</span><span id="Parser-1296"><a href="#Parser-1296"><span class="linenos">1296</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-1297"><a href="#Parser-1297"><span class="linenos">1297</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span 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">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="Parser-1298"><a href="#Parser-1298"><span class="linenos">1298</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">WITH</span><span class="p">)</span>
-</span><span id="Parser-1299"><a href="#Parser-1299"><span class="linenos">1299</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1300"><a href="#Parser-1300"><span class="linenos">1300</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_property</span><span class="p">)</span>
+</span><span id="Parser-1293"><a href="#Parser-1293"><span class="linenos">1293</span></a> <span class="k">if</span> <span class="n">pre_volatile_token</span> <span class="ow">and</span> <span class="n">pre_volatile_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span>
+</span><span id="Parser-1294"><a href="#Parser-1294"><span class="linenos">1294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span>
+</span><span id="Parser-1295"><a href="#Parser-1295"><span class="linenos">1295</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
+</span><span id="Parser-1296"><a href="#Parser-1296"><span class="linenos">1296</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
+</span><span id="Parser-1297"><a href="#Parser-1297"><span class="linenos">1297</span></a> <span class="p">):</span>
+</span><span id="Parser-1298"><a href="#Parser-1298"><span class="linenos">1298</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">()</span>
+</span><span id="Parser-1299"><a href="#Parser-1299"><span class="linenos">1299</span></a>
+</span><span id="Parser-1300"><a href="#Parser-1300"><span class="linenos">1300</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">))</span>
</span><span id="Parser-1301"><a href="#Parser-1301"><span class="linenos">1301</span></a>
-</span><span id="Parser-1302"><a href="#Parser-1302"><span class="linenos">1302</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;JOURNAL&quot;</span><span class="p">):</span>
-</span><span id="Parser-1303"><a href="#Parser-1303"><span class="linenos">1303</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withjournaltable</span><span class="p">()</span>
-</span><span id="Parser-1304"><a href="#Parser-1304"><span class="linenos">1304</span></a>
-</span><span id="Parser-1305"><a href="#Parser-1305"><span class="linenos">1305</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;DATA&quot;</span><span class="p">):</span>
-</span><span id="Parser-1306"><a href="#Parser-1306"><span class="linenos">1306</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-1307"><a href="#Parser-1307"><span class="linenos">1307</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;DATA&quot;</span><span class="p">):</span>
-</span><span id="Parser-1308"><a href="#Parser-1308"><span class="linenos">1308</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1309"><a href="#Parser-1309"><span class="linenos">1309</span></a>
-</span><span id="Parser-1310"><a href="#Parser-1310"><span class="linenos">1310</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="p">:</span>
-</span><span id="Parser-1311"><a href="#Parser-1311"><span class="linenos">1311</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1312"><a href="#Parser-1312"><span class="linenos">1312</span></a>
-</span><span id="Parser-1313"><a href="#Parser-1313"><span class="linenos">1313</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withisolatedloading</span><span class="p">()</span>
-</span><span id="Parser-1314"><a href="#Parser-1314"><span class="linenos">1314</span></a>
-</span><span id="Parser-1315"><a href="#Parser-1315"><span class="linenos">1315</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
-</span><span id="Parser-1316"><a href="#Parser-1316"><span class="linenos">1316</span></a> <span class="k">def</span> <span class="nf">_parse_definer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1317"><a href="#Parser-1317"><span class="linenos">1317</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1318"><a href="#Parser-1318"><span class="linenos">1318</span></a>
-</span><span id="Parser-1319"><a href="#Parser-1319"><span class="linenos">1319</span></a> <span class="n">user</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-1320"><a href="#Parser-1320"><span class="linenos">1320</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">PARAMETER</span><span class="p">)</span>
-</span><span id="Parser-1321"><a href="#Parser-1321"><span class="linenos">1321</span></a> <span class="n">host</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="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">MOD</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-1322"><a href="#Parser-1322"><span class="linenos">1322</span></a>
-</span><span id="Parser-1323"><a href="#Parser-1323"><span class="linenos">1323</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">user</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">host</span><span class="p">:</span>
-</span><span id="Parser-1324"><a href="#Parser-1324"><span class="linenos">1324</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1302"><a href="#Parser-1302"><span class="linenos">1302</span></a> <span class="k">def</span> <span class="nf">_parse_with_property</span><span class="p">(</span>
+</span><span id="Parser-1303"><a href="#Parser-1303"><span class="linenos">1303</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-1304"><a href="#Parser-1304"><span class="linenos">1304</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Union</span><span 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">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="Parser-1305"><a href="#Parser-1305"><span class="linenos">1305</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">WITH</span><span class="p">)</span>
+</span><span id="Parser-1306"><a href="#Parser-1306"><span class="linenos">1306</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1307"><a href="#Parser-1307"><span class="linenos">1307</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_property</span><span class="p">)</span>
+</span><span id="Parser-1308"><a href="#Parser-1308"><span class="linenos">1308</span></a>
+</span><span id="Parser-1309"><a href="#Parser-1309"><span class="linenos">1309</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;JOURNAL&quot;</span><span class="p">):</span>
+</span><span id="Parser-1310"><a href="#Parser-1310"><span class="linenos">1310</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withjournaltable</span><span class="p">()</span>
+</span><span id="Parser-1311"><a href="#Parser-1311"><span class="linenos">1311</span></a>
+</span><span id="Parser-1312"><a href="#Parser-1312"><span class="linenos">1312</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;DATA&quot;</span><span class="p">):</span>
+</span><span id="Parser-1313"><a href="#Parser-1313"><span class="linenos">1313</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-1314"><a href="#Parser-1314"><span class="linenos">1314</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;DATA&quot;</span><span class="p">):</span>
+</span><span id="Parser-1315"><a href="#Parser-1315"><span class="linenos">1315</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1316"><a href="#Parser-1316"><span class="linenos">1316</span></a>
+</span><span id="Parser-1317"><a href="#Parser-1317"><span class="linenos">1317</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="p">:</span>
+</span><span id="Parser-1318"><a href="#Parser-1318"><span class="linenos">1318</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1319"><a href="#Parser-1319"><span class="linenos">1319</span></a>
+</span><span id="Parser-1320"><a href="#Parser-1320"><span class="linenos">1320</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withisolatedloading</span><span class="p">()</span>
+</span><span id="Parser-1321"><a href="#Parser-1321"><span class="linenos">1321</span></a>
+</span><span id="Parser-1322"><a href="#Parser-1322"><span class="linenos">1322</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
+</span><span id="Parser-1323"><a href="#Parser-1323"><span class="linenos">1323</span></a> <span class="k">def</span> <span class="nf">_parse_definer</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1324"><a href="#Parser-1324"><span class="linenos">1324</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">EQ</span><span class="p">)</span>
</span><span id="Parser-1325"><a href="#Parser-1325"><span class="linenos">1325</span></a>
-</span><span id="Parser-1326"><a href="#Parser-1326"><span class="linenos">1326</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">(</span><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">user</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-1327"><a href="#Parser-1327"><span class="linenos">1327</span></a>
-</span><span id="Parser-1328"><a href="#Parser-1328"><span class="linenos">1328</span></a> <span class="k">def</span> <span class="nf">_parse_withjournaltable</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-1329"><a href="#Parser-1329"><span class="linenos">1329</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-1330"><a href="#Parser-1330"><span class="linenos">1330</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1331"><a href="#Parser-1331"><span class="linenos">1331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</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_parts</span><span class="p">())</span>
+</span><span id="Parser-1326"><a href="#Parser-1326"><span class="linenos">1326</span></a> <span class="n">user</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-1327"><a href="#Parser-1327"><span class="linenos">1327</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">PARAMETER</span><span class="p">)</span>
+</span><span id="Parser-1328"><a href="#Parser-1328"><span class="linenos">1328</span></a> <span class="n">host</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="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">MOD</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-1329"><a href="#Parser-1329"><span class="linenos">1329</span></a>
+</span><span id="Parser-1330"><a href="#Parser-1330"><span class="linenos">1330</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">user</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">host</span><span class="p">:</span>
+</span><span id="Parser-1331"><a href="#Parser-1331"><span class="linenos">1331</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1332"><a href="#Parser-1332"><span class="linenos">1332</span></a>
-</span><span id="Parser-1333"><a href="#Parser-1333"><span class="linenos">1333</span></a> <span class="k">def</span> <span class="nf">_parse_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1334"><a href="#Parser-1334"><span class="linenos">1334</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;LOG&quot;</span><span class="p">)</span>
-</span><span id="Parser-1335"><a href="#Parser-1335"><span class="linenos">1335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">)</span>
-</span><span id="Parser-1336"><a href="#Parser-1336"><span class="linenos">1336</span></a>
-</span><span id="Parser-1337"><a href="#Parser-1337"><span class="linenos">1337</span></a> <span class="k">def</span> <span class="nf">_parse_journal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</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-1338"><a href="#Parser-1338"><span class="linenos">1338</span></a> <span class="n">before</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;BEFORE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1339"><a href="#Parser-1339"><span class="linenos">1339</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;JOURNAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1340"><a href="#Parser-1340"><span class="linenos">1340</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="n">before</span><span class="p">)</span>
-</span><span id="Parser-1341"><a href="#Parser-1341"><span class="linenos">1341</span></a>
-</span><span id="Parser-1342"><a href="#Parser-1342"><span class="linenos">1342</span></a> <span class="k">def</span> <span class="nf">_parse_afterjournal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</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-1343"><a href="#Parser-1343"><span class="linenos">1343</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;NOT&quot;</span><span class="p">)</span>
-</span><span id="Parser-1344"><a href="#Parser-1344"><span class="linenos">1344</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;LOCAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1345"><a href="#Parser-1345"><span class="linenos">1345</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;JOURNAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1346"><a href="#Parser-1346"><span class="linenos">1346</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AfterJournalProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">)</span>
-</span><span id="Parser-1347"><a href="#Parser-1347"><span class="linenos">1347</span></a>
-</span><span id="Parser-1348"><a href="#Parser-1348"><span class="linenos">1348</span></a> <span class="k">def</span> <span class="nf">_parse_checksum</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-1349"><a href="#Parser-1349"><span class="linenos">1349</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;CHECKSUM&quot;</span><span class="p">)</span>
-</span><span id="Parser-1350"><a href="#Parser-1350"><span class="linenos">1350</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1351"><a href="#Parser-1351"><span class="linenos">1351</span></a>
-</span><span id="Parser-1352"><a href="#Parser-1352"><span class="linenos">1352</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1353"><a href="#Parser-1353"><span class="linenos">1353</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1354"><a href="#Parser-1354"><span class="linenos">1354</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1355"><a href="#Parser-1355"><span class="linenos">1355</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;OFF&quot;</span><span class="p">):</span>
-</span><span id="Parser-1356"><a href="#Parser-1356"><span class="linenos">1356</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-1357"><a href="#Parser-1357"><span class="linenos">1357</span></a> <span class="n">default</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">DEFAULT</span><span class="p">)</span>
+</span><span id="Parser-1333"><a href="#Parser-1333"><span class="linenos">1333</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">(</span><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">user</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-1334"><a href="#Parser-1334"><span class="linenos">1334</span></a>
+</span><span id="Parser-1335"><a href="#Parser-1335"><span class="linenos">1335</span></a> <span class="k">def</span> <span class="nf">_parse_withjournaltable</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-1336"><a href="#Parser-1336"><span class="linenos">1336</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-1337"><a href="#Parser-1337"><span class="linenos">1337</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1338"><a href="#Parser-1338"><span class="linenos">1338</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</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_parts</span><span class="p">())</span>
+</span><span id="Parser-1339"><a href="#Parser-1339"><span class="linenos">1339</span></a>
+</span><span id="Parser-1340"><a href="#Parser-1340"><span class="linenos">1340</span></a> <span class="k">def</span> <span class="nf">_parse_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1341"><a href="#Parser-1341"><span class="linenos">1341</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;LOG&quot;</span><span class="p">)</span>
+</span><span id="Parser-1342"><a href="#Parser-1342"><span class="linenos">1342</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">)</span>
+</span><span id="Parser-1343"><a href="#Parser-1343"><span class="linenos">1343</span></a>
+</span><span id="Parser-1344"><a href="#Parser-1344"><span class="linenos">1344</span></a> <span class="k">def</span> <span class="nf">_parse_journal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</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-1345"><a href="#Parser-1345"><span class="linenos">1345</span></a> <span class="n">before</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;BEFORE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1346"><a href="#Parser-1346"><span class="linenos">1346</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;JOURNAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1347"><a href="#Parser-1347"><span class="linenos">1347</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="n">before</span><span class="p">)</span>
+</span><span id="Parser-1348"><a href="#Parser-1348"><span class="linenos">1348</span></a>
+</span><span id="Parser-1349"><a href="#Parser-1349"><span class="linenos">1349</span></a> <span class="k">def</span> <span class="nf">_parse_afterjournal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">local</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-1350"><a href="#Parser-1350"><span class="linenos">1350</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;NOT&quot;</span><span class="p">)</span>
+</span><span id="Parser-1351"><a href="#Parser-1351"><span class="linenos">1351</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;LOCAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1352"><a href="#Parser-1352"><span class="linenos">1352</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;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;JOURNAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1353"><a href="#Parser-1353"><span class="linenos">1353</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AfterJournalProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">dual</span><span class="o">=</span><span class="n">dual</span><span class="p">,</span> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">)</span>
+</span><span id="Parser-1354"><a href="#Parser-1354"><span class="linenos">1354</span></a>
+</span><span id="Parser-1355"><a href="#Parser-1355"><span class="linenos">1355</span></a> <span class="k">def</span> <span class="nf">_parse_checksum</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-1356"><a href="#Parser-1356"><span class="linenos">1356</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;CHECKSUM&quot;</span><span class="p">)</span>
+</span><span id="Parser-1357"><a href="#Parser-1357"><span class="linenos">1357</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">EQ</span><span class="p">)</span>
</span><span id="Parser-1358"><a href="#Parser-1358"><span class="linenos">1358</span></a>
-</span><span id="Parser-1359"><a href="#Parser-1359"><span class="linenos">1359</span></a> <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-1360"><a href="#Parser-1360"><span class="linenos">1360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span>
-</span><span id="Parser-1361"><a href="#Parser-1361"><span class="linenos">1361</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="Parser-1362"><a href="#Parser-1362"><span class="linenos">1362</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="Parser-1363"><a href="#Parser-1363"><span class="linenos">1363</span></a> <span class="p">)</span>
-</span><span id="Parser-1364"><a href="#Parser-1364"><span class="linenos">1364</span></a>
-</span><span id="Parser-1365"><a href="#Parser-1365"><span class="linenos">1365</span></a> <span class="k">def</span> <span class="nf">_parse_freespace</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-1366"><a href="#Parser-1366"><span class="linenos">1366</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;FREESPACE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1367"><a href="#Parser-1367"><span class="linenos">1367</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1368"><a href="#Parser-1368"><span class="linenos">1368</span></a> <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-1369"><a href="#Parser-1369"><span class="linenos">1369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</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_number</span><span class="p">(),</span> <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-1359"><a href="#Parser-1359"><span class="linenos">1359</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1360"><a href="#Parser-1360"><span class="linenos">1360</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1361"><a href="#Parser-1361"><span class="linenos">1361</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1362"><a href="#Parser-1362"><span class="linenos">1362</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;OFF&quot;</span><span class="p">):</span>
+</span><span id="Parser-1363"><a href="#Parser-1363"><span class="linenos">1363</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-1364"><a href="#Parser-1364"><span class="linenos">1364</span></a> <span class="n">default</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">DEFAULT</span><span class="p">)</span>
+</span><span id="Parser-1365"><a href="#Parser-1365"><span class="linenos">1365</span></a>
+</span><span id="Parser-1366"><a href="#Parser-1366"><span class="linenos">1366</span></a> <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-1367"><a href="#Parser-1367"><span class="linenos">1367</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span>
+</span><span id="Parser-1368"><a href="#Parser-1368"><span class="linenos">1368</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="Parser-1369"><a href="#Parser-1369"><span class="linenos">1369</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="Parser-1370"><a href="#Parser-1370"><span class="linenos">1370</span></a> <span class="p">)</span>
</span><span id="Parser-1371"><a href="#Parser-1371"><span class="linenos">1371</span></a>
-</span><span id="Parser-1372"><a href="#Parser-1372"><span class="linenos">1372</span></a> <span class="k">def</span> <span class="nf">_parse_mergeblockratio</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default</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-1373"><a href="#Parser-1373"><span class="linenos">1373</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;MERGEBLOCKRATIO&quot;</span><span class="p">)</span>
-</span><span id="Parser-1374"><a href="#Parser-1374"><span class="linenos">1374</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="Parser-1375"><a href="#Parser-1375"><span class="linenos">1375</span></a> <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-1376"><a href="#Parser-1376"><span class="linenos">1376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
-</span><span id="Parser-1377"><a href="#Parser-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">_parse_number</span><span class="p">(),</span>
-</span><span id="Parser-1378"><a href="#Parser-1378"><span class="linenos">1378</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-1379"><a href="#Parser-1379"><span class="linenos">1379</span></a> <span class="p">)</span>
-</span><span id="Parser-1380"><a href="#Parser-1380"><span class="linenos">1380</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1381"><a href="#Parser-1381"><span class="linenos">1381</span></a> <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-1382"><a href="#Parser-1382"><span class="linenos">1382</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
-</span><span id="Parser-1383"><a href="#Parser-1383"><span class="linenos">1383</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
-</span><span id="Parser-1384"><a href="#Parser-1384"><span class="linenos">1384</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="Parser-1385"><a href="#Parser-1385"><span class="linenos">1385</span></a> <span class="p">)</span>
-</span><span id="Parser-1386"><a href="#Parser-1386"><span class="linenos">1386</span></a>
-</span><span id="Parser-1387"><a href="#Parser-1387"><span class="linenos">1387</span></a> <span class="k">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1388"><a href="#Parser-1388"><span class="linenos">1388</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
-</span><span id="Parser-1389"><a href="#Parser-1389"><span class="linenos">1389</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1390"><a href="#Parser-1390"><span class="linenos">1390</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1391"><a href="#Parser-1391"><span class="linenos">1391</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;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)):</span>
-</span><span id="Parser-1392"><a href="#Parser-1392"><span class="linenos">1392</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1393"><a href="#Parser-1393"><span class="linenos">1393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1394"><a href="#Parser-1394"><span class="linenos">1394</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)):</span>
-</span><span id="Parser-1395"><a href="#Parser-1395"><span class="linenos">1395</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1396"><a href="#Parser-1396"><span class="linenos">1396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-1397"><a href="#Parser-1397"><span class="linenos">1397</span></a>
-</span><span id="Parser-1398"><a href="#Parser-1398"><span class="linenos">1398</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1399"><a href="#Parser-1399"><span class="linenos">1399</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1400"><a href="#Parser-1400"><span class="linenos">1400</span></a> <span class="n">size</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-1401"><a href="#Parser-1401"><span class="linenos">1401</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1402"><a href="#Parser-1402"><span class="linenos">1402</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;BYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KBYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KILOBYTES&quot;</span><span class="p">)):</span>
-</span><span id="Parser-1403"><a href="#Parser-1403"><span class="linenos">1403</span></a> <span class="n">units</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-1404"><a href="#Parser-1404"><span class="linenos">1404</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">)</span>
-</span><span id="Parser-1405"><a href="#Parser-1405"><span class="linenos">1405</span></a>
-</span><span id="Parser-1406"><a href="#Parser-1406"><span class="linenos">1406</span></a> <span class="k">def</span> <span class="nf">_parse_blockcompression</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-1407"><a href="#Parser-1407"><span class="linenos">1407</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;BLOCKCOMPRESSION&quot;</span><span class="p">)</span>
-</span><span id="Parser-1408"><a href="#Parser-1408"><span class="linenos">1408</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1409"><a href="#Parser-1409"><span class="linenos">1409</span></a> <span class="n">always</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;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="Parser-1410"><a href="#Parser-1410"><span class="linenos">1410</span></a> <span class="n">manual</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;MANUAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1411"><a href="#Parser-1411"><span class="linenos">1411</span></a> <span class="n">never</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;NEVER&quot;</span><span class="p">)</span>
-</span><span id="Parser-1412"><a href="#Parser-1412"><span class="linenos">1412</span></a> <span class="n">default</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;DEFAULT&quot;</span><span class="p">)</span>
-</span><span id="Parser-1413"><a href="#Parser-1413"><span class="linenos">1413</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1414"><a href="#Parser-1414"><span class="linenos">1414</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;AUTOTEMP&quot;</span><span class="p">):</span>
-</span><span id="Parser-1415"><a href="#Parser-1415"><span class="linenos">1415</span></a> <span class="n">autotemp</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><span id="Parser-1416"><a href="#Parser-1416"><span class="linenos">1416</span></a>
-</span><span id="Parser-1417"><a href="#Parser-1417"><span class="linenos">1417</span></a> <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-1418"><a href="#Parser-1418"><span class="linenos">1418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
-</span><span id="Parser-1419"><a href="#Parser-1419"><span class="linenos">1419</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
-</span><span id="Parser-1420"><a href="#Parser-1420"><span class="linenos">1420</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
-</span><span id="Parser-1421"><a href="#Parser-1421"><span class="linenos">1421</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
-</span><span id="Parser-1422"><a href="#Parser-1422"><span class="linenos">1422</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
-</span><span id="Parser-1423"><a href="#Parser-1423"><span class="linenos">1423</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
-</span><span id="Parser-1424"><a href="#Parser-1424"><span class="linenos">1424</span></a> <span class="p">)</span>
-</span><span id="Parser-1425"><a href="#Parser-1425"><span class="linenos">1425</span></a>
-</span><span id="Parser-1426"><a href="#Parser-1426"><span class="linenos">1426</span></a> <span class="k">def</span> <span class="nf">_parse_withisolatedloading</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-1427"><a href="#Parser-1427"><span class="linenos">1427</span></a> <span class="n">no</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;NO&quot;</span><span class="p">)</span>
-</span><span id="Parser-1428"><a href="#Parser-1428"><span class="linenos">1428</span></a> <span class="n">concurrent</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;CONCURRENT&quot;</span><span class="p">)</span>
-</span><span id="Parser-1429"><a href="#Parser-1429"><span class="linenos">1429</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;ISOLATED&quot;</span><span class="p">,</span> <span class="s2">&quot;LOADING&quot;</span><span class="p">)</span>
-</span><span id="Parser-1430"><a href="#Parser-1430"><span class="linenos">1430</span></a> <span class="n">for_all</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
-</span><span id="Parser-1431"><a href="#Parser-1431"><span class="linenos">1431</span></a> <span class="n">for_insert</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">)</span>
-</span><span id="Parser-1432"><a href="#Parser-1432"><span class="linenos">1432</span></a> <span class="n">for_none</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1433"><a href="#Parser-1433"><span class="linenos">1433</span></a> <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-1434"><a href="#Parser-1434"><span class="linenos">1434</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
-</span><span id="Parser-1435"><a href="#Parser-1435"><span class="linenos">1435</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
-</span><span id="Parser-1436"><a href="#Parser-1436"><span class="linenos">1436</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
-</span><span id="Parser-1437"><a href="#Parser-1437"><span class="linenos">1437</span></a> <span class="n">for_all</span><span class="o">=</span><span class="n">for_all</span><span class="p">,</span>
-</span><span id="Parser-1438"><a href="#Parser-1438"><span class="linenos">1438</span></a> <span class="n">for_insert</span><span class="o">=</span><span class="n">for_insert</span><span class="p">,</span>
-</span><span id="Parser-1439"><a href="#Parser-1439"><span class="linenos">1439</span></a> <span class="n">for_none</span><span class="o">=</span><span class="n">for_none</span><span class="p">,</span>
-</span><span id="Parser-1440"><a href="#Parser-1440"><span class="linenos">1440</span></a> <span class="p">)</span>
-</span><span id="Parser-1441"><a href="#Parser-1441"><span class="linenos">1441</span></a>
-</span><span id="Parser-1442"><a href="#Parser-1442"><span class="linenos">1442</span></a> <span class="k">def</span> <span class="nf">_parse_locking</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-1443"><a href="#Parser-1443"><span class="linenos">1443</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1444"><a href="#Parser-1444"><span class="linenos">1444</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
-</span><span id="Parser-1445"><a href="#Parser-1445"><span class="linenos">1445</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">VIEW</span><span class="p">):</span>
-</span><span id="Parser-1446"><a href="#Parser-1446"><span class="linenos">1446</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
-</span><span id="Parser-1447"><a href="#Parser-1447"><span class="linenos">1447</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">ROW</span><span class="p">):</span>
-</span><span id="Parser-1448"><a href="#Parser-1448"><span class="linenos">1448</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
-</span><span id="Parser-1449"><a href="#Parser-1449"><span class="linenos">1449</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;DATABASE&quot;</span><span class="p">):</span>
-</span><span id="Parser-1450"><a href="#Parser-1450"><span class="linenos">1450</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
-</span><span id="Parser-1451"><a href="#Parser-1451"><span class="linenos">1451</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1452"><a href="#Parser-1452"><span class="linenos">1452</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1453"><a href="#Parser-1453"><span class="linenos">1453</span></a>
-</span><span id="Parser-1454"><a href="#Parser-1454"><span class="linenos">1454</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;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">):</span>
-</span><span id="Parser-1455"><a href="#Parser-1455"><span class="linenos">1455</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_parts</span><span class="p">()</span>
-</span><span id="Parser-1456"><a href="#Parser-1456"><span class="linenos">1456</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1457"><a href="#Parser-1457"><span class="linenos">1457</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1458"><a href="#Parser-1458"><span class="linenos">1458</span></a>
-</span><span id="Parser-1459"><a href="#Parser-1459"><span class="linenos">1459</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1460"><a href="#Parser-1460"><span class="linenos">1460</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
-</span><span id="Parser-1461"><a href="#Parser-1461"><span class="linenos">1461</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">IN</span><span class="p">):</span>
-</span><span id="Parser-1462"><a href="#Parser-1462"><span class="linenos">1462</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
+</span><span id="Parser-1372"><a href="#Parser-1372"><span class="linenos">1372</span></a> <span class="k">def</span> <span class="nf">_parse_freespace</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-1373"><a href="#Parser-1373"><span class="linenos">1373</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;FREESPACE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1374"><a href="#Parser-1374"><span class="linenos">1374</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1375"><a href="#Parser-1375"><span class="linenos">1375</span></a> <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-1376"><a href="#Parser-1376"><span class="linenos">1376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</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_number</span><span class="p">(),</span> <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-1377"><a href="#Parser-1377"><span class="linenos">1377</span></a> <span class="p">)</span>
+</span><span id="Parser-1378"><a href="#Parser-1378"><span class="linenos">1378</span></a>
+</span><span id="Parser-1379"><a href="#Parser-1379"><span class="linenos">1379</span></a> <span class="k">def</span> <span class="nf">_parse_mergeblockratio</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default</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-1380"><a href="#Parser-1380"><span class="linenos">1380</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;MERGEBLOCKRATIO&quot;</span><span class="p">)</span>
+</span><span id="Parser-1381"><a href="#Parser-1381"><span class="linenos">1381</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="Parser-1382"><a href="#Parser-1382"><span class="linenos">1382</span></a> <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-1383"><a href="#Parser-1383"><span class="linenos">1383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
+</span><span id="Parser-1384"><a href="#Parser-1384"><span class="linenos">1384</span></a> <span class="n">this</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-1385"><a href="#Parser-1385"><span class="linenos">1385</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-1386"><a href="#Parser-1386"><span class="linenos">1386</span></a> <span class="p">)</span>
+</span><span id="Parser-1387"><a href="#Parser-1387"><span class="linenos">1387</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1388"><a href="#Parser-1388"><span class="linenos">1388</span></a> <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-1389"><a href="#Parser-1389"><span class="linenos">1389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
+</span><span id="Parser-1390"><a href="#Parser-1390"><span class="linenos">1390</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
+</span><span id="Parser-1391"><a href="#Parser-1391"><span class="linenos">1391</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="Parser-1392"><a href="#Parser-1392"><span class="linenos">1392</span></a> <span class="p">)</span>
+</span><span id="Parser-1393"><a href="#Parser-1393"><span class="linenos">1393</span></a>
+</span><span id="Parser-1394"><a href="#Parser-1394"><span class="linenos">1394</span></a> <span class="k">def</span> <span class="nf">_parse_datablocksize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1395"><a href="#Parser-1395"><span class="linenos">1395</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
+</span><span id="Parser-1396"><a href="#Parser-1396"><span class="linenos">1396</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1397"><a href="#Parser-1397"><span class="linenos">1397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1398"><a href="#Parser-1398"><span class="linenos">1398</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;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)):</span>
+</span><span id="Parser-1399"><a href="#Parser-1399"><span class="linenos">1399</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1400"><a href="#Parser-1400"><span class="linenos">1400</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1401"><a href="#Parser-1401"><span class="linenos">1401</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;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)):</span>
+</span><span id="Parser-1402"><a href="#Parser-1402"><span class="linenos">1402</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1403"><a href="#Parser-1403"><span class="linenos">1403</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="nb">min</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-1404"><a href="#Parser-1404"><span class="linenos">1404</span></a>
+</span><span id="Parser-1405"><a href="#Parser-1405"><span class="linenos">1405</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;DATABLOCKSIZE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1406"><a href="#Parser-1406"><span class="linenos">1406</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1407"><a href="#Parser-1407"><span class="linenos">1407</span></a> <span class="n">size</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-1408"><a href="#Parser-1408"><span class="linenos">1408</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1409"><a href="#Parser-1409"><span class="linenos">1409</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;BYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KBYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KILOBYTES&quot;</span><span class="p">)):</span>
+</span><span id="Parser-1410"><a href="#Parser-1410"><span class="linenos">1410</span></a> <span class="n">units</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-1411"><a href="#Parser-1411"><span class="linenos">1411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">)</span>
+</span><span id="Parser-1412"><a href="#Parser-1412"><span class="linenos">1412</span></a>
+</span><span id="Parser-1413"><a href="#Parser-1413"><span class="linenos">1413</span></a> <span class="k">def</span> <span class="nf">_parse_blockcompression</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-1414"><a href="#Parser-1414"><span class="linenos">1414</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;BLOCKCOMPRESSION&quot;</span><span class="p">)</span>
+</span><span id="Parser-1415"><a href="#Parser-1415"><span class="linenos">1415</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1416"><a href="#Parser-1416"><span class="linenos">1416</span></a> <span class="n">always</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;ALWAYS&quot;</span><span class="p">)</span>
+</span><span id="Parser-1417"><a href="#Parser-1417"><span class="linenos">1417</span></a> <span class="n">manual</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;MANUAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1418"><a href="#Parser-1418"><span class="linenos">1418</span></a> <span class="n">never</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;NEVER&quot;</span><span class="p">)</span>
+</span><span id="Parser-1419"><a href="#Parser-1419"><span class="linenos">1419</span></a> <span class="n">default</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;DEFAULT&quot;</span><span class="p">)</span>
+</span><span id="Parser-1420"><a href="#Parser-1420"><span class="linenos">1420</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1421"><a href="#Parser-1421"><span class="linenos">1421</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;AUTOTEMP&quot;</span><span class="p">):</span>
+</span><span id="Parser-1422"><a href="#Parser-1422"><span class="linenos">1422</span></a> <span class="n">autotemp</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><span id="Parser-1423"><a href="#Parser-1423"><span class="linenos">1423</span></a>
+</span><span id="Parser-1424"><a href="#Parser-1424"><span class="linenos">1424</span></a> <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-1425"><a href="#Parser-1425"><span class="linenos">1425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
+</span><span id="Parser-1426"><a href="#Parser-1426"><span class="linenos">1426</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
+</span><span id="Parser-1427"><a href="#Parser-1427"><span class="linenos">1427</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
+</span><span id="Parser-1428"><a href="#Parser-1428"><span class="linenos">1428</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
+</span><span id="Parser-1429"><a href="#Parser-1429"><span class="linenos">1429</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
+</span><span id="Parser-1430"><a href="#Parser-1430"><span class="linenos">1430</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
+</span><span id="Parser-1431"><a href="#Parser-1431"><span class="linenos">1431</span></a> <span class="p">)</span>
+</span><span id="Parser-1432"><a href="#Parser-1432"><span class="linenos">1432</span></a>
+</span><span id="Parser-1433"><a href="#Parser-1433"><span class="linenos">1433</span></a> <span class="k">def</span> <span class="nf">_parse_withisolatedloading</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-1434"><a href="#Parser-1434"><span class="linenos">1434</span></a> <span class="n">no</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;NO&quot;</span><span class="p">)</span>
+</span><span id="Parser-1435"><a href="#Parser-1435"><span class="linenos">1435</span></a> <span class="n">concurrent</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;CONCURRENT&quot;</span><span class="p">)</span>
+</span><span id="Parser-1436"><a href="#Parser-1436"><span class="linenos">1436</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;ISOLATED&quot;</span><span class="p">,</span> <span class="s2">&quot;LOADING&quot;</span><span class="p">)</span>
+</span><span id="Parser-1437"><a href="#Parser-1437"><span class="linenos">1437</span></a> <span class="n">for_all</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ALL&quot;</span><span class="p">)</span>
+</span><span id="Parser-1438"><a href="#Parser-1438"><span class="linenos">1438</span></a> <span class="n">for_insert</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">)</span>
+</span><span id="Parser-1439"><a href="#Parser-1439"><span class="linenos">1439</span></a> <span class="n">for_none</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;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1440"><a href="#Parser-1440"><span class="linenos">1440</span></a> <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-1441"><a href="#Parser-1441"><span class="linenos">1441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span>
+</span><span id="Parser-1442"><a href="#Parser-1442"><span class="linenos">1442</span></a> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span>
+</span><span id="Parser-1443"><a href="#Parser-1443"><span class="linenos">1443</span></a> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span>
+</span><span id="Parser-1444"><a href="#Parser-1444"><span class="linenos">1444</span></a> <span class="n">for_all</span><span class="o">=</span><span class="n">for_all</span><span class="p">,</span>
+</span><span id="Parser-1445"><a href="#Parser-1445"><span class="linenos">1445</span></a> <span class="n">for_insert</span><span class="o">=</span><span class="n">for_insert</span><span class="p">,</span>
+</span><span id="Parser-1446"><a href="#Parser-1446"><span class="linenos">1446</span></a> <span class="n">for_none</span><span class="o">=</span><span class="n">for_none</span><span class="p">,</span>
+</span><span id="Parser-1447"><a href="#Parser-1447"><span class="linenos">1447</span></a> <span class="p">)</span>
+</span><span id="Parser-1448"><a href="#Parser-1448"><span class="linenos">1448</span></a>
+</span><span id="Parser-1449"><a href="#Parser-1449"><span class="linenos">1449</span></a> <span class="k">def</span> <span class="nf">_parse_locking</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-1450"><a href="#Parser-1450"><span class="linenos">1450</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1451"><a href="#Parser-1451"><span class="linenos">1451</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
+</span><span id="Parser-1452"><a href="#Parser-1452"><span class="linenos">1452</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">VIEW</span><span class="p">):</span>
+</span><span id="Parser-1453"><a href="#Parser-1453"><span class="linenos">1453</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
+</span><span id="Parser-1454"><a href="#Parser-1454"><span class="linenos">1454</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">ROW</span><span class="p">):</span>
+</span><span id="Parser-1455"><a href="#Parser-1455"><span class="linenos">1455</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
+</span><span id="Parser-1456"><a href="#Parser-1456"><span class="linenos">1456</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;DATABASE&quot;</span><span class="p">):</span>
+</span><span id="Parser-1457"><a href="#Parser-1457"><span class="linenos">1457</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
+</span><span id="Parser-1458"><a href="#Parser-1458"><span class="linenos">1458</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1459"><a href="#Parser-1459"><span class="linenos">1459</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1460"><a href="#Parser-1460"><span class="linenos">1460</span></a>
+</span><span id="Parser-1461"><a href="#Parser-1461"><span class="linenos">1461</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;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW&quot;</span><span class="p">):</span>
+</span><span id="Parser-1462"><a href="#Parser-1462"><span class="linenos">1462</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_parts</span><span class="p">()</span>
</span><span id="Parser-1463"><a href="#Parser-1463"><span class="linenos">1463</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1464"><a href="#Parser-1464"><span class="linenos">1464</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1464"><a href="#Parser-1464"><span class="linenos">1464</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1465"><a href="#Parser-1465"><span class="linenos">1465</span></a>
-</span><span id="Parser-1466"><a href="#Parser-1466"><span class="linenos">1466</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;ACCESS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1467"><a href="#Parser-1467"><span class="linenos">1467</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
-</span><span id="Parser-1468"><a href="#Parser-1468"><span class="linenos">1468</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;EXCL&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">)):</span>
-</span><span id="Parser-1469"><a href="#Parser-1469"><span class="linenos">1469</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
-</span><span id="Parser-1470"><a href="#Parser-1470"><span class="linenos">1470</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;SHARE&quot;</span><span class="p">):</span>
-</span><span id="Parser-1471"><a href="#Parser-1471"><span class="linenos">1471</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
-</span><span id="Parser-1472"><a href="#Parser-1472"><span class="linenos">1472</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;READ&quot;</span><span class="p">):</span>
-</span><span id="Parser-1473"><a href="#Parser-1473"><span class="linenos">1473</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
-</span><span id="Parser-1474"><a href="#Parser-1474"><span class="linenos">1474</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;WRITE&quot;</span><span class="p">):</span>
-</span><span id="Parser-1475"><a href="#Parser-1475"><span class="linenos">1475</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
-</span><span id="Parser-1476"><a href="#Parser-1476"><span class="linenos">1476</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;CHECKSUM&quot;</span><span class="p">):</span>
-</span><span id="Parser-1477"><a href="#Parser-1477"><span class="linenos">1477</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
-</span><span id="Parser-1478"><a href="#Parser-1478"><span class="linenos">1478</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1479"><a href="#Parser-1479"><span class="linenos">1479</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1480"><a href="#Parser-1480"><span class="linenos">1480</span></a>
-</span><span id="Parser-1481"><a href="#Parser-1481"><span class="linenos">1481</span></a> <span class="n">override</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;OVERRIDE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1482"><a href="#Parser-1482"><span class="linenos">1482</span></a>
-</span><span id="Parser-1483"><a href="#Parser-1483"><span class="linenos">1483</span></a> <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-1484"><a href="#Parser-1484"><span class="linenos">1484</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
-</span><span id="Parser-1485"><a href="#Parser-1485"><span class="linenos">1485</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1486"><a href="#Parser-1486"><span class="linenos">1486</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-1487"><a href="#Parser-1487"><span class="linenos">1487</span></a> <span class="n">for_or_in</span><span class="o">=</span><span class="n">for_or_in</span><span class="p">,</span>
-</span><span id="Parser-1488"><a href="#Parser-1488"><span class="linenos">1488</span></a> <span class="n">lock_type</span><span class="o">=</span><span class="n">lock_type</span><span class="p">,</span>
-</span><span id="Parser-1489"><a href="#Parser-1489"><span class="linenos">1489</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
-</span><span id="Parser-1490"><a href="#Parser-1490"><span class="linenos">1490</span></a> <span class="p">)</span>
-</span><span id="Parser-1491"><a href="#Parser-1491"><span class="linenos">1491</span></a>
-</span><span id="Parser-1492"><a href="#Parser-1492"><span class="linenos">1492</span></a> <span class="k">def</span> <span class="nf">_parse_partition_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">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="Parser-1493"><a href="#Parser-1493"><span class="linenos">1493</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</span><span class="p">):</span>
-</span><span id="Parser-1494"><a href="#Parser-1494"><span class="linenos">1494</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_conjunction</span><span class="p">)</span>
-</span><span id="Parser-1495"><a href="#Parser-1495"><span class="linenos">1495</span></a> <span class="k">return</span> <span class="p">[]</span>
-</span><span id="Parser-1496"><a href="#Parser-1496"><span class="linenos">1496</span></a>
-</span><span id="Parser-1497"><a href="#Parser-1497"><span class="linenos">1497</span></a> <span class="k">def</span> <span class="nf">_parse_partitioned_by</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-1498"><a href="#Parser-1498"><span class="linenos">1498</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1499"><a href="#Parser-1499"><span class="linenos">1499</span></a> <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-1500"><a href="#Parser-1500"><span class="linenos">1500</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
-</span><span id="Parser-1501"><a href="#Parser-1501"><span class="linenos">1501</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</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><span id="Parser-1502"><a href="#Parser-1502"><span class="linenos">1502</span></a> <span class="p">)</span>
+</span><span id="Parser-1466"><a href="#Parser-1466"><span class="linenos">1466</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1467"><a href="#Parser-1467"><span class="linenos">1467</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
+</span><span id="Parser-1468"><a href="#Parser-1468"><span class="linenos">1468</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">IN</span><span class="p">):</span>
+</span><span id="Parser-1469"><a href="#Parser-1469"><span class="linenos">1469</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
+</span><span id="Parser-1470"><a href="#Parser-1470"><span class="linenos">1470</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1471"><a href="#Parser-1471"><span class="linenos">1471</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1472"><a href="#Parser-1472"><span class="linenos">1472</span></a>
+</span><span id="Parser-1473"><a href="#Parser-1473"><span class="linenos">1473</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;ACCESS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1474"><a href="#Parser-1474"><span class="linenos">1474</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
+</span><span id="Parser-1475"><a href="#Parser-1475"><span class="linenos">1475</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;EXCL&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">)):</span>
+</span><span id="Parser-1476"><a href="#Parser-1476"><span class="linenos">1476</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
+</span><span id="Parser-1477"><a href="#Parser-1477"><span class="linenos">1477</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;SHARE&quot;</span><span class="p">):</span>
+</span><span id="Parser-1478"><a href="#Parser-1478"><span class="linenos">1478</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
+</span><span id="Parser-1479"><a href="#Parser-1479"><span class="linenos">1479</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;READ&quot;</span><span class="p">):</span>
+</span><span id="Parser-1480"><a href="#Parser-1480"><span class="linenos">1480</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
+</span><span id="Parser-1481"><a href="#Parser-1481"><span class="linenos">1481</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;WRITE&quot;</span><span class="p">):</span>
+</span><span id="Parser-1482"><a href="#Parser-1482"><span class="linenos">1482</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
+</span><span id="Parser-1483"><a href="#Parser-1483"><span class="linenos">1483</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;CHECKSUM&quot;</span><span class="p">):</span>
+</span><span id="Parser-1484"><a href="#Parser-1484"><span class="linenos">1484</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
+</span><span id="Parser-1485"><a href="#Parser-1485"><span class="linenos">1485</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1486"><a href="#Parser-1486"><span class="linenos">1486</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1487"><a href="#Parser-1487"><span class="linenos">1487</span></a>
+</span><span id="Parser-1488"><a href="#Parser-1488"><span class="linenos">1488</span></a> <span class="n">override</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;OVERRIDE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1489"><a href="#Parser-1489"><span class="linenos">1489</span></a>
+</span><span id="Parser-1490"><a href="#Parser-1490"><span class="linenos">1490</span></a> <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-1491"><a href="#Parser-1491"><span class="linenos">1491</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
+</span><span id="Parser-1492"><a href="#Parser-1492"><span class="linenos">1492</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1493"><a href="#Parser-1493"><span class="linenos">1493</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-1494"><a href="#Parser-1494"><span class="linenos">1494</span></a> <span class="n">for_or_in</span><span class="o">=</span><span class="n">for_or_in</span><span class="p">,</span>
+</span><span id="Parser-1495"><a href="#Parser-1495"><span class="linenos">1495</span></a> <span class="n">lock_type</span><span class="o">=</span><span class="n">lock_type</span><span class="p">,</span>
+</span><span id="Parser-1496"><a href="#Parser-1496"><span class="linenos">1496</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
+</span><span id="Parser-1497"><a href="#Parser-1497"><span class="linenos">1497</span></a> <span class="p">)</span>
+</span><span id="Parser-1498"><a href="#Parser-1498"><span class="linenos">1498</span></a>
+</span><span id="Parser-1499"><a href="#Parser-1499"><span class="linenos">1499</span></a> <span class="k">def</span> <span class="nf">_parse_partition_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">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="Parser-1500"><a href="#Parser-1500"><span class="linenos">1500</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BY</span><span class="p">):</span>
+</span><span id="Parser-1501"><a href="#Parser-1501"><span class="linenos">1501</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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-1502"><a href="#Parser-1502"><span class="linenos">1502</span></a> <span class="k">return</span> <span class="p">[]</span>
</span><span id="Parser-1503"><a href="#Parser-1503"><span class="linenos">1503</span></a>
-</span><span id="Parser-1504"><a href="#Parser-1504"><span class="linenos">1504</span></a> <span class="k">def</span> <span class="nf">_parse_withdata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1505"><a href="#Parser-1505"><span class="linenos">1505</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1506"><a href="#Parser-1506"><span class="linenos">1506</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1507"><a href="#Parser-1507"><span class="linenos">1507</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1508"><a href="#Parser-1508"><span class="linenos">1508</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-1509"><a href="#Parser-1509"><span class="linenos">1509</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1510"><a href="#Parser-1510"><span class="linenos">1510</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1511"><a href="#Parser-1511"><span class="linenos">1511</span></a>
-</span><span id="Parser-1512"><a href="#Parser-1512"><span class="linenos">1512</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">statistics</span><span class="o">=</span><span class="n">statistics</span><span class="p">)</span>
-</span><span id="Parser-1513"><a href="#Parser-1513"><span class="linenos">1513</span></a>
-</span><span id="Parser-1514"><a href="#Parser-1514"><span class="linenos">1514</span></a> <span class="k">def</span> <span class="nf">_parse_noprimaryindex</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-1515"><a href="#Parser-1515"><span class="linenos">1515</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;PRIMARY&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">)</span>
-</span><span id="Parser-1516"><a href="#Parser-1516"><span class="linenos">1516</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">()</span>
-</span><span id="Parser-1517"><a href="#Parser-1517"><span class="linenos">1517</span></a>
-</span><span id="Parser-1518"><a href="#Parser-1518"><span class="linenos">1518</span></a> <span class="k">def</span> <span class="nf">_parse_oncommit</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-1519"><a href="#Parser-1519"><span class="linenos">1519</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;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;PRESERVE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">)</span>
-</span><span id="Parser-1520"><a href="#Parser-1520"><span class="linenos">1520</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">()</span>
-</span><span id="Parser-1521"><a href="#Parser-1521"><span class="linenos">1521</span></a>
-</span><span id="Parser-1522"><a href="#Parser-1522"><span class="linenos">1522</span></a> <span class="k">def</span> <span class="nf">_parse_distkey</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-1523"><a href="#Parser-1523"><span class="linenos">1523</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</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</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-1504"><a href="#Parser-1504"><span class="linenos">1504</span></a> <span class="k">def</span> <span class="nf">_parse_partitioned_by</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-1505"><a href="#Parser-1505"><span class="linenos">1505</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1506"><a href="#Parser-1506"><span class="linenos">1506</span></a> <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-1507"><a href="#Parser-1507"><span class="linenos">1507</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
+</span><span id="Parser-1508"><a href="#Parser-1508"><span class="linenos">1508</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="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</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><span id="Parser-1509"><a href="#Parser-1509"><span class="linenos">1509</span></a> <span class="p">)</span>
+</span><span id="Parser-1510"><a href="#Parser-1510"><span class="linenos">1510</span></a>
+</span><span id="Parser-1511"><a href="#Parser-1511"><span class="linenos">1511</span></a> <span class="k">def</span> <span class="nf">_parse_withdata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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-1512"><a href="#Parser-1512"><span class="linenos">1512</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1513"><a href="#Parser-1513"><span class="linenos">1513</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1514"><a href="#Parser-1514"><span class="linenos">1514</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;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1515"><a href="#Parser-1515"><span class="linenos">1515</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-1516"><a href="#Parser-1516"><span class="linenos">1516</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1517"><a href="#Parser-1517"><span class="linenos">1517</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1518"><a href="#Parser-1518"><span class="linenos">1518</span></a>
+</span><span id="Parser-1519"><a href="#Parser-1519"><span class="linenos">1519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">statistics</span><span class="o">=</span><span class="n">statistics</span><span class="p">)</span>
+</span><span id="Parser-1520"><a href="#Parser-1520"><span class="linenos">1520</span></a>
+</span><span id="Parser-1521"><a href="#Parser-1521"><span class="linenos">1521</span></a> <span class="k">def</span> <span class="nf">_parse_noprimaryindex</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-1522"><a href="#Parser-1522"><span class="linenos">1522</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;PRIMARY&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">)</span>
+</span><span id="Parser-1523"><a href="#Parser-1523"><span class="linenos">1523</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">()</span>
</span><span id="Parser-1524"><a href="#Parser-1524"><span class="linenos">1524</span></a>
-</span><span id="Parser-1525"><a href="#Parser-1525"><span class="linenos">1525</span></a> <span class="k">def</span> <span class="nf">_parse_create_like</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1526"><a href="#Parser-1526"><span class="linenos">1526</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</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-1527"><a href="#Parser-1527"><span class="linenos">1527</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1528"><a href="#Parser-1528"><span class="linenos">1528</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INCLUDING&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDING&quot;</span><span class="p">)):</span>
-</span><span id="Parser-1529"><a href="#Parser-1529"><span class="linenos">1529</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-1530"><a href="#Parser-1530"><span class="linenos">1530</span></a> <span class="n">id_var</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-1525"><a href="#Parser-1525"><span class="linenos">1525</span></a> <span class="k">def</span> <span class="nf">_parse_oncommit</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-1526"><a href="#Parser-1526"><span class="linenos">1526</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;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;PRESERVE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">)</span>
+</span><span id="Parser-1527"><a href="#Parser-1527"><span class="linenos">1527</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">()</span>
+</span><span id="Parser-1528"><a href="#Parser-1528"><span class="linenos">1528</span></a>
+</span><span id="Parser-1529"><a href="#Parser-1529"><span class="linenos">1529</span></a> <span class="k">def</span> <span class="nf">_parse_distkey</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-1530"><a href="#Parser-1530"><span class="linenos">1530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</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</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-1531"><a href="#Parser-1531"><span class="linenos">1531</span></a>
-</span><span id="Parser-1532"><a href="#Parser-1532"><span class="linenos">1532</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">id_var</span><span class="p">:</span>
-</span><span id="Parser-1533"><a href="#Parser-1533"><span class="linenos">1533</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1534"><a href="#Parser-1534"><span class="linenos">1534</span></a>
-</span><span id="Parser-1535"><a href="#Parser-1535"><span class="linenos">1535</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-1536"><a href="#Parser-1536"><span class="linenos">1536</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-1537"><a href="#Parser-1537"><span class="linenos">1537</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span>
-</span><span id="Parser-1538"><a href="#Parser-1538"><span class="linenos">1538</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1539"><a href="#Parser-1539"><span class="linenos">1539</span></a> <span class="n">value</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">id_var</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-1540"><a href="#Parser-1540"><span class="linenos">1540</span></a> <span class="p">)</span>
-</span><span id="Parser-1541"><a href="#Parser-1541"><span class="linenos">1541</span></a> <span class="p">)</span>
-</span><span id="Parser-1542"><a href="#Parser-1542"><span class="linenos">1542</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="Parser-1543"><a href="#Parser-1543"><span class="linenos">1543</span></a>
-</span><span id="Parser-1544"><a href="#Parser-1544"><span class="linenos">1544</span></a> <span class="k">def</span> <span class="nf">_parse_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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-1545"><a href="#Parser-1545"><span class="linenos">1545</span></a> <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-1546"><a href="#Parser-1546"><span class="linenos">1546</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</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_id_var</span><span class="p">),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
-</span><span id="Parser-1547"><a href="#Parser-1547"><span class="linenos">1547</span></a> <span class="p">)</span>
-</span><span id="Parser-1548"><a href="#Parser-1548"><span class="linenos">1548</span></a>
-</span><span id="Parser-1549"><a href="#Parser-1549"><span class="linenos">1549</span></a> <span class="k">def</span> <span class="nf">_parse_character_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1550"><a href="#Parser-1550"><span class="linenos">1550</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1551"><a href="#Parser-1551"><span class="linenos">1551</span></a> <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-1552"><a href="#Parser-1552"><span class="linenos">1552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</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 class="n">default</span><span class="o">=</span><span class="n">default</span>
-</span><span id="Parser-1553"><a href="#Parser-1553"><span class="linenos">1553</span></a> <span class="p">)</span>
-</span><span id="Parser-1554"><a href="#Parser-1554"><span class="linenos">1554</span></a>
-</span><span id="Parser-1555"><a href="#Parser-1555"><span class="linenos">1555</span></a> <span class="k">def</span> <span class="nf">_parse_returns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-1556"><a href="#Parser-1556"><span class="linenos">1556</span></a> <span class="n">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="p">]</span>
-</span><span id="Parser-1557"><a href="#Parser-1557"><span class="linenos">1557</span></a> <span class="n">is_table</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">TABLE</span><span class="p">)</span>
-</span><span id="Parser-1558"><a href="#Parser-1558"><span class="linenos">1558</span></a>
-</span><span id="Parser-1559"><a href="#Parser-1559"><span class="linenos">1559</span></a> <span class="k">if</span> <span class="n">is_table</span><span class="p">:</span>
-</span><span id="Parser-1560"><a href="#Parser-1560"><span class="linenos">1560</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1561"><a href="#Parser-1561"><span class="linenos">1561</span></a> <span class="n">value</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-1562"><a href="#Parser-1562"><span class="linenos">1562</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
-</span><span id="Parser-1563"><a href="#Parser-1563"><span class="linenos">1563</span></a> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
-</span><span id="Parser-1564"><a href="#Parser-1564"><span class="linenos">1564</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_kwargs</span><span class="p">),</span>
-</span><span id="Parser-1565"><a href="#Parser-1565"><span class="linenos">1565</span></a> <span class="p">)</span>
-</span><span id="Parser-1566"><a href="#Parser-1566"><span class="linenos">1566</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-1567"><a href="#Parser-1567"><span class="linenos">1567</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-1568"><a href="#Parser-1568"><span class="linenos">1568</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1569"><a href="#Parser-1569"><span class="linenos">1569</span></a> <span class="n">value</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="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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
-</span><span id="Parser-1570"><a href="#Parser-1570"><span class="linenos">1570</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1571"><a href="#Parser-1571"><span class="linenos">1571</span></a> <span class="n">value</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-1572"><a href="#Parser-1572"><span class="linenos">1572</span></a>
-</span><span id="Parser-1573"><a href="#Parser-1573"><span class="linenos">1573</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">)</span>
-</span><span id="Parser-1574"><a href="#Parser-1574"><span class="linenos">1574</span></a>
-</span><span id="Parser-1575"><a href="#Parser-1575"><span class="linenos">1575</span></a> <span class="k">def</span> <span class="nf">_parse_temporary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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-1576"><a href="#Parser-1576"><span class="linenos">1576</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">TEMPORARY</span><span class="p">)</span> <span class="c1"># in case calling from &quot;GLOBAL&quot;</span>
-</span><span id="Parser-1577"><a href="#Parser-1577"><span class="linenos">1577</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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="n">global_</span><span class="o">=</span><span class="n">global_</span><span class="p">)</span>
-</span><span id="Parser-1578"><a href="#Parser-1578"><span class="linenos">1578</span></a>
-</span><span id="Parser-1579"><a href="#Parser-1579"><span class="linenos">1579</span></a> <span class="k">def</span> <span class="nf">_parse_describe</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-1580"><a href="#Parser-1580"><span class="linenos">1580</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">CREATABLES</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-1581"><a href="#Parser-1581"><span class="linenos">1581</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-1582"><a href="#Parser-1582"><span class="linenos">1582</span></a>
-</span><span id="Parser-1583"><a href="#Parser-1583"><span class="linenos">1583</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1584"><a href="#Parser-1584"><span class="linenos">1584</span></a>
-</span><span id="Parser-1585"><a href="#Parser-1585"><span class="linenos">1585</span></a> <span class="k">def</span> <span class="nf">_parse_insert</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-1586"><a href="#Parser-1586"><span class="linenos">1586</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
-</span><span id="Parser-1587"><a href="#Parser-1587"><span class="linenos">1587</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
-</span><span id="Parser-1588"><a href="#Parser-1588"><span class="linenos">1588</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1532"><a href="#Parser-1532"><span class="linenos">1532</span></a> <span class="k">def</span> <span class="nf">_parse_create_like</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1533"><a href="#Parser-1533"><span class="linenos">1533</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</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-1534"><a href="#Parser-1534"><span class="linenos">1534</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1535"><a href="#Parser-1535"><span class="linenos">1535</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INCLUDING&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDING&quot;</span><span class="p">)):</span>
+</span><span id="Parser-1536"><a href="#Parser-1536"><span class="linenos">1536</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-1537"><a href="#Parser-1537"><span class="linenos">1537</span></a> <span class="n">id_var</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-1538"><a href="#Parser-1538"><span class="linenos">1538</span></a>
+</span><span id="Parser-1539"><a href="#Parser-1539"><span class="linenos">1539</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">id_var</span><span class="p">:</span>
+</span><span id="Parser-1540"><a href="#Parser-1540"><span class="linenos">1540</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1541"><a href="#Parser-1541"><span class="linenos">1541</span></a>
+</span><span id="Parser-1542"><a href="#Parser-1542"><span class="linenos">1542</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-1543"><a href="#Parser-1543"><span class="linenos">1543</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-1544"><a href="#Parser-1544"><span class="linenos">1544</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span>
+</span><span id="Parser-1545"><a href="#Parser-1545"><span class="linenos">1545</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1546"><a href="#Parser-1546"><span class="linenos">1546</span></a> <span class="n">value</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">id_var</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-1547"><a href="#Parser-1547"><span class="linenos">1547</span></a> <span class="p">)</span>
+</span><span id="Parser-1548"><a href="#Parser-1548"><span class="linenos">1548</span></a> <span class="p">)</span>
+</span><span id="Parser-1549"><a href="#Parser-1549"><span class="linenos">1549</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="Parser-1550"><a href="#Parser-1550"><span class="linenos">1550</span></a>
+</span><span id="Parser-1551"><a href="#Parser-1551"><span class="linenos">1551</span></a> <span class="k">def</span> <span class="nf">_parse_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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-1552"><a href="#Parser-1552"><span class="linenos">1552</span></a> <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-1553"><a href="#Parser-1553"><span class="linenos">1553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</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_id_var</span><span class="p">),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
+</span><span id="Parser-1554"><a href="#Parser-1554"><span class="linenos">1554</span></a> <span class="p">)</span>
+</span><span id="Parser-1555"><a href="#Parser-1555"><span class="linenos">1555</span></a>
+</span><span id="Parser-1556"><a href="#Parser-1556"><span class="linenos">1556</span></a> <span class="k">def</span> <span class="nf">_parse_character_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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-1557"><a href="#Parser-1557"><span class="linenos">1557</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1558"><a href="#Parser-1558"><span class="linenos">1558</span></a> <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-1559"><a href="#Parser-1559"><span class="linenos">1559</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</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 class="n">default</span><span class="o">=</span><span class="n">default</span>
+</span><span id="Parser-1560"><a href="#Parser-1560"><span class="linenos">1560</span></a> <span class="p">)</span>
+</span><span id="Parser-1561"><a href="#Parser-1561"><span class="linenos">1561</span></a>
+</span><span id="Parser-1562"><a href="#Parser-1562"><span class="linenos">1562</span></a> <span class="k">def</span> <span class="nf">_parse_returns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-1563"><a href="#Parser-1563"><span class="linenos">1563</span></a> <span class="n">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="p">]</span>
+</span><span id="Parser-1564"><a href="#Parser-1564"><span class="linenos">1564</span></a> <span class="n">is_table</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">TABLE</span><span class="p">)</span>
+</span><span id="Parser-1565"><a href="#Parser-1565"><span class="linenos">1565</span></a>
+</span><span id="Parser-1566"><a href="#Parser-1566"><span class="linenos">1566</span></a> <span class="k">if</span> <span class="n">is_table</span><span class="p">:</span>
+</span><span id="Parser-1567"><a href="#Parser-1567"><span class="linenos">1567</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1568"><a href="#Parser-1568"><span class="linenos">1568</span></a> <span class="n">value</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-1569"><a href="#Parser-1569"><span class="linenos">1569</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
+</span><span id="Parser-1570"><a href="#Parser-1570"><span class="linenos">1570</span></a> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
+</span><span id="Parser-1571"><a href="#Parser-1571"><span class="linenos">1571</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_kwargs</span><span class="p">),</span>
+</span><span id="Parser-1572"><a href="#Parser-1572"><span class="linenos">1572</span></a> <span class="p">)</span>
+</span><span id="Parser-1573"><a href="#Parser-1573"><span class="linenos">1573</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-1574"><a href="#Parser-1574"><span class="linenos">1574</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-1575"><a href="#Parser-1575"><span class="linenos">1575</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1576"><a href="#Parser-1576"><span class="linenos">1576</span></a> <span class="n">value</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="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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
+</span><span id="Parser-1577"><a href="#Parser-1577"><span class="linenos">1577</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1578"><a href="#Parser-1578"><span class="linenos">1578</span></a> <span class="n">value</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-1579"><a href="#Parser-1579"><span class="linenos">1579</span></a>
+</span><span id="Parser-1580"><a href="#Parser-1580"><span class="linenos">1580</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">)</span>
+</span><span id="Parser-1581"><a href="#Parser-1581"><span class="linenos">1581</span></a>
+</span><span id="Parser-1582"><a href="#Parser-1582"><span class="linenos">1582</span></a> <span class="k">def</span> <span class="nf">_parse_temporary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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-1583"><a href="#Parser-1583"><span class="linenos">1583</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">TEMPORARY</span><span class="p">)</span> <span class="c1"># in case calling from &quot;GLOBAL&quot;</span>
+</span><span id="Parser-1584"><a href="#Parser-1584"><span class="linenos">1584</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</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="n">global_</span><span class="o">=</span><span class="n">global_</span><span class="p">)</span>
+</span><span id="Parser-1585"><a href="#Parser-1585"><span class="linenos">1585</span></a>
+</span><span id="Parser-1586"><a href="#Parser-1586"><span class="linenos">1586</span></a> <span class="k">def</span> <span class="nf">_parse_describe</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-1587"><a href="#Parser-1587"><span class="linenos">1587</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">CREATABLES</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-1588"><a href="#Parser-1588"><span class="linenos">1588</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-1589"><a href="#Parser-1589"><span class="linenos">1589</span></a>
-</span><span id="Parser-1590"><a href="#Parser-1590"><span class="linenos">1590</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;DIRECTORY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1591"><a href="#Parser-1591"><span class="linenos">1591</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-1592"><a href="#Parser-1592"><span class="linenos">1592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
-</span><span id="Parser-1593"><a href="#Parser-1593"><span class="linenos">1593</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_or_string</span><span class="p">(),</span>
-</span><span id="Parser-1594"><a href="#Parser-1594"><span class="linenos">1594</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="Parser-1595"><a href="#Parser-1595"><span class="linenos">1595</span></a> <span class="n">row_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">(</span><span class="n">match_row</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-1596"><a href="#Parser-1596"><span class="linenos">1596</span></a> <span class="p">)</span>
-</span><span id="Parser-1597"><a href="#Parser-1597"><span class="linenos">1597</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1598"><a href="#Parser-1598"><span class="linenos">1598</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="Parser-1599"><a href="#Parser-1599"><span class="linenos">1599</span></a> <span class="n">alternative</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="bp">self</span><span class="o">.</span><span class="n">INSERT_ALTERNATIVES</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-1600"><a href="#Parser-1600"><span class="linenos">1600</span></a>
-</span><span id="Parser-1601"><a href="#Parser-1601"><span class="linenos">1601</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-1602"><a href="#Parser-1602"><span class="linenos">1602</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-1603"><a href="#Parser-1603"><span class="linenos">1603</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-1604"><a href="#Parser-1604"><span class="linenos">1604</span></a>
-</span><span id="Parser-1605"><a href="#Parser-1605"><span class="linenos">1605</span></a> <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-1606"><a href="#Parser-1606"><span class="linenos">1606</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Parser-1607"><a href="#Parser-1607"><span class="linenos">1607</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1608"><a href="#Parser-1608"><span class="linenos">1608</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-1609"><a href="#Parser-1609"><span class="linenos">1609</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</span><span class="p">(),</span>
-</span><span id="Parser-1610"><a href="#Parser-1610"><span class="linenos">1610</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">(),</span>
-</span><span id="Parser-1611"><a href="#Parser-1611"><span class="linenos">1611</span></a> <span class="n">conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
-</span><span id="Parser-1612"><a href="#Parser-1612"><span class="linenos">1612</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="Parser-1613"><a href="#Parser-1613"><span class="linenos">1613</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="Parser-1614"><a href="#Parser-1614"><span class="linenos">1614</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
-</span><span id="Parser-1615"><a href="#Parser-1615"><span class="linenos">1615</span></a> <span class="p">)</span>
-</span><span id="Parser-1616"><a href="#Parser-1616"><span class="linenos">1616</span></a>
-</span><span id="Parser-1617"><a href="#Parser-1617"><span class="linenos">1617</span></a> <span class="k">def</span> <span class="nf">_parse_on_conflict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1618"><a href="#Parser-1618"><span class="linenos">1618</span></a> <span class="n">conflict</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONFLICT&quot;</span><span class="p">)</span>
-</span><span id="Parser-1619"><a href="#Parser-1619"><span class="linenos">1619</span></a> <span class="n">duplicate</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="Parser-1620"><a href="#Parser-1620"><span class="linenos">1620</span></a>
-</span><span id="Parser-1621"><a href="#Parser-1621"><span class="linenos">1621</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">conflict</span> <span class="ow">or</span> <span class="n">duplicate</span><span class="p">):</span>
-</span><span id="Parser-1622"><a href="#Parser-1622"><span class="linenos">1622</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1590"><a href="#Parser-1590"><span class="linenos">1590</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1591"><a href="#Parser-1591"><span class="linenos">1591</span></a>
+</span><span id="Parser-1592"><a href="#Parser-1592"><span class="linenos">1592</span></a> <span class="k">def</span> <span class="nf">_parse_insert</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-1593"><a href="#Parser-1593"><span class="linenos">1593</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
+</span><span id="Parser-1594"><a href="#Parser-1594"><span class="linenos">1594</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
+</span><span id="Parser-1595"><a href="#Parser-1595"><span class="linenos">1595</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1596"><a href="#Parser-1596"><span class="linenos">1596</span></a>
+</span><span id="Parser-1597"><a href="#Parser-1597"><span class="linenos">1597</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;DIRECTORY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1598"><a href="#Parser-1598"><span class="linenos">1598</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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-1599"><a href="#Parser-1599"><span class="linenos">1599</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
+</span><span id="Parser-1600"><a href="#Parser-1600"><span class="linenos">1600</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_or_string</span><span class="p">(),</span>
+</span><span id="Parser-1601"><a href="#Parser-1601"><span class="linenos">1601</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="Parser-1602"><a href="#Parser-1602"><span class="linenos">1602</span></a> <span class="n">row_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">(</span><span class="n">match_row</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-1603"><a href="#Parser-1603"><span class="linenos">1603</span></a> <span class="p">)</span>
+</span><span id="Parser-1604"><a href="#Parser-1604"><span class="linenos">1604</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1605"><a href="#Parser-1605"><span class="linenos">1605</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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="Parser-1606"><a href="#Parser-1606"><span class="linenos">1606</span></a> <span class="n">alternative</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="bp">self</span><span class="o">.</span><span class="n">INSERT_ALTERNATIVES</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-1607"><a href="#Parser-1607"><span class="linenos">1607</span></a>
+</span><span id="Parser-1608"><a href="#Parser-1608"><span class="linenos">1608</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-1609"><a href="#Parser-1609"><span class="linenos">1609</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-1610"><a href="#Parser-1610"><span class="linenos">1610</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-1611"><a href="#Parser-1611"><span class="linenos">1611</span></a>
+</span><span id="Parser-1612"><a href="#Parser-1612"><span class="linenos">1612</span></a> <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-1613"><a href="#Parser-1613"><span class="linenos">1613</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Parser-1614"><a href="#Parser-1614"><span class="linenos">1614</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1615"><a href="#Parser-1615"><span class="linenos">1615</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-1616"><a href="#Parser-1616"><span class="linenos">1616</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</span><span class="p">(),</span>
+</span><span id="Parser-1617"><a href="#Parser-1617"><span class="linenos">1617</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">(),</span>
+</span><span id="Parser-1618"><a href="#Parser-1618"><span class="linenos">1618</span></a> <span class="n">conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
+</span><span id="Parser-1619"><a href="#Parser-1619"><span class="linenos">1619</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="Parser-1620"><a href="#Parser-1620"><span class="linenos">1620</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="Parser-1621"><a href="#Parser-1621"><span class="linenos">1621</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
+</span><span id="Parser-1622"><a href="#Parser-1622"><span class="linenos">1622</span></a> <span class="p">)</span>
</span><span id="Parser-1623"><a href="#Parser-1623"><span class="linenos">1623</span></a>
-</span><span id="Parser-1624"><a href="#Parser-1624"><span class="linenos">1624</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1625"><a href="#Parser-1625"><span class="linenos">1625</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1626"><a href="#Parser-1626"><span class="linenos">1626</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1627"><a href="#Parser-1627"><span class="linenos">1627</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1628"><a href="#Parser-1628"><span class="linenos">1628</span></a>
-</span><span id="Parser-1629"><a href="#Parser-1629"><span class="linenos">1629</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
-</span><span id="Parser-1630"><a href="#Parser-1630"><span class="linenos">1630</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">):</span>
-</span><span id="Parser-1631"><a href="#Parser-1631"><span class="linenos">1631</span></a> <span class="n">constraint</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-1632"><a href="#Parser-1632"><span class="linenos">1632</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1633"><a href="#Parser-1633"><span class="linenos">1633</span></a> <span class="n">key</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-1634"><a href="#Parser-1634"><span class="linenos">1634</span></a>
-</span><span id="Parser-1635"><a href="#Parser-1635"><span class="linenos">1635</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;DO&quot;</span><span class="p">)</span>
-</span><span id="Parser-1636"><a href="#Parser-1636"><span class="linenos">1636</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;NOTHING&quot;</span><span class="p">):</span>
-</span><span id="Parser-1637"><a href="#Parser-1637"><span class="linenos">1637</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1638"><a href="#Parser-1638"><span class="linenos">1638</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1639"><a href="#Parser-1639"><span class="linenos">1639</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">UPDATE</span><span class="p">)</span>
-</span><span id="Parser-1640"><a href="#Parser-1640"><span class="linenos">1640</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 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-1624"><a href="#Parser-1624"><span class="linenos">1624</span></a> <span class="k">def</span> <span class="nf">_parse_on_conflict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1625"><a href="#Parser-1625"><span class="linenos">1625</span></a> <span class="n">conflict</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONFLICT&quot;</span><span class="p">)</span>
+</span><span id="Parser-1626"><a href="#Parser-1626"><span class="linenos">1626</span></a> <span class="n">duplicate</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="Parser-1627"><a href="#Parser-1627"><span class="linenos">1627</span></a>
+</span><span id="Parser-1628"><a href="#Parser-1628"><span class="linenos">1628</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">conflict</span> <span class="ow">or</span> <span class="n">duplicate</span><span class="p">):</span>
+</span><span id="Parser-1629"><a href="#Parser-1629"><span class="linenos">1629</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1630"><a href="#Parser-1630"><span class="linenos">1630</span></a>
+</span><span id="Parser-1631"><a href="#Parser-1631"><span class="linenos">1631</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1632"><a href="#Parser-1632"><span class="linenos">1632</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1633"><a href="#Parser-1633"><span class="linenos">1633</span></a> <span class="n">key</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1634"><a href="#Parser-1634"><span class="linenos">1634</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1635"><a href="#Parser-1635"><span class="linenos">1635</span></a>
+</span><span id="Parser-1636"><a href="#Parser-1636"><span class="linenos">1636</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
+</span><span id="Parser-1637"><a href="#Parser-1637"><span class="linenos">1637</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;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">):</span>
+</span><span id="Parser-1638"><a href="#Parser-1638"><span class="linenos">1638</span></a> <span class="n">constraint</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-1639"><a href="#Parser-1639"><span class="linenos">1639</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1640"><a href="#Parser-1640"><span class="linenos">1640</span></a> <span class="n">key</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-1641"><a href="#Parser-1641"><span class="linenos">1641</span></a>
-</span><span id="Parser-1642"><a href="#Parser-1642"><span class="linenos">1642</span></a> <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-1643"><a href="#Parser-1643"><span class="linenos">1643</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
-</span><span id="Parser-1644"><a href="#Parser-1644"><span class="linenos">1644</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
-</span><span id="Parser-1645"><a href="#Parser-1645"><span class="linenos">1645</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-1646"><a href="#Parser-1646"><span class="linenos">1646</span></a> <span class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
-</span><span id="Parser-1647"><a href="#Parser-1647"><span class="linenos">1647</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
-</span><span id="Parser-1648"><a href="#Parser-1648"><span class="linenos">1648</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</span><span class="p">,</span>
-</span><span id="Parser-1649"><a href="#Parser-1649"><span class="linenos">1649</span></a> <span class="p">)</span>
-</span><span id="Parser-1650"><a href="#Parser-1650"><span class="linenos">1650</span></a>
-</span><span id="Parser-1651"><a href="#Parser-1651"><span class="linenos">1651</span></a> <span class="k">def</span> <span class="nf">_parse_returning</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1652"><a href="#Parser-1652"><span class="linenos">1652</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">RETURNING</span><span class="p">):</span>
-</span><span id="Parser-1653"><a href="#Parser-1653"><span class="linenos">1653</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1654"><a href="#Parser-1654"><span class="linenos">1654</span></a>
-</span><span id="Parser-1655"><a href="#Parser-1655"><span class="linenos">1655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1656"><a href="#Parser-1656"><span class="linenos">1656</span></a>
-</span><span id="Parser-1657"><a href="#Parser-1657"><span class="linenos">1657</span></a> <span class="k">def</span> <span class="nf">_parse_row</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1658"><a href="#Parser-1658"><span class="linenos">1658</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">FORMAT</span><span class="p">):</span>
-</span><span id="Parser-1659"><a href="#Parser-1659"><span class="linenos">1659</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1660"><a href="#Parser-1660"><span class="linenos">1660</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">()</span>
+</span><span id="Parser-1642"><a href="#Parser-1642"><span class="linenos">1642</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;DO&quot;</span><span class="p">)</span>
+</span><span id="Parser-1643"><a href="#Parser-1643"><span class="linenos">1643</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;NOTHING&quot;</span><span class="p">):</span>
+</span><span id="Parser-1644"><a href="#Parser-1644"><span class="linenos">1644</span></a> <span class="n">nothing</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1645"><a href="#Parser-1645"><span class="linenos">1645</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1646"><a href="#Parser-1646"><span class="linenos">1646</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">UPDATE</span><span class="p">)</span>
+</span><span id="Parser-1647"><a href="#Parser-1647"><span class="linenos">1647</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 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-1648"><a href="#Parser-1648"><span class="linenos">1648</span></a>
+</span><span id="Parser-1649"><a href="#Parser-1649"><span class="linenos">1649</span></a> <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-1650"><a href="#Parser-1650"><span class="linenos">1650</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
+</span><span id="Parser-1651"><a href="#Parser-1651"><span class="linenos">1651</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
+</span><span id="Parser-1652"><a href="#Parser-1652"><span class="linenos">1652</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-1653"><a href="#Parser-1653"><span class="linenos">1653</span></a> <span class="n">nothing</span><span class="o">=</span><span class="n">nothing</span><span class="p">,</span>
+</span><span id="Parser-1654"><a href="#Parser-1654"><span class="linenos">1654</span></a> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
+</span><span id="Parser-1655"><a href="#Parser-1655"><span class="linenos">1655</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</span><span class="p">,</span>
+</span><span id="Parser-1656"><a href="#Parser-1656"><span class="linenos">1656</span></a> <span class="p">)</span>
+</span><span id="Parser-1657"><a href="#Parser-1657"><span class="linenos">1657</span></a>
+</span><span id="Parser-1658"><a href="#Parser-1658"><span class="linenos">1658</span></a> <span class="k">def</span> <span class="nf">_parse_returning</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1659"><a href="#Parser-1659"><span class="linenos">1659</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">RETURNING</span><span class="p">):</span>
+</span><span id="Parser-1660"><a href="#Parser-1660"><span class="linenos">1660</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1661"><a href="#Parser-1661"><span class="linenos">1661</span></a>
-</span><span id="Parser-1662"><a href="#Parser-1662"><span class="linenos">1662</span></a> <span class="k">def</span> <span class="nf">_parse_row_format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_row</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-1663"><a href="#Parser-1663"><span class="linenos">1663</span></a> <span class="k">if</span> <span class="n">match_row</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</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-1664"><a href="#Parser-1664"><span class="linenos">1664</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1665"><a href="#Parser-1665"><span class="linenos">1665</span></a>
-</span><span id="Parser-1666"><a href="#Parser-1666"><span class="linenos">1666</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;SERDE&quot;</span><span class="p">):</span>
-</span><span id="Parser-1667"><a href="#Parser-1667"><span class="linenos">1667</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</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><span id="Parser-1662"><a href="#Parser-1662"><span class="linenos">1662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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-1663"><a href="#Parser-1663"><span class="linenos">1663</span></a>
+</span><span id="Parser-1664"><a href="#Parser-1664"><span class="linenos">1664</span></a> <span class="k">def</span> <span class="nf">_parse_row</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1665"><a href="#Parser-1665"><span class="linenos">1665</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">FORMAT</span><span class="p">):</span>
+</span><span id="Parser-1666"><a href="#Parser-1666"><span class="linenos">1666</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1667"><a href="#Parser-1667"><span class="linenos">1667</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">()</span>
</span><span id="Parser-1668"><a href="#Parser-1668"><span class="linenos">1668</span></a>
-</span><span id="Parser-1669"><a href="#Parser-1669"><span class="linenos">1669</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;DELIMITED&quot;</span><span class="p">)</span>
-</span><span id="Parser-1670"><a href="#Parser-1670"><span class="linenos">1670</span></a>
-</span><span id="Parser-1671"><a href="#Parser-1671"><span class="linenos">1671</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-1669"><a href="#Parser-1669"><span class="linenos">1669</span></a> <span class="k">def</span> <span class="nf">_parse_row_format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_row</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-1670"><a href="#Parser-1670"><span class="linenos">1670</span></a> <span class="k">if</span> <span class="n">match_row</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</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-1671"><a href="#Parser-1671"><span class="linenos">1671</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1672"><a href="#Parser-1672"><span class="linenos">1672</span></a>
-</span><span id="Parser-1673"><a href="#Parser-1673"><span class="linenos">1673</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;FIELDS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1674"><a href="#Parser-1674"><span class="linenos">1674</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fields&quot;</span><span class="p">]</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-1675"><a href="#Parser-1675"><span class="linenos">1675</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;ESCAPED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1676"><a href="#Parser-1676"><span class="linenos">1676</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;escaped&quot;</span><span class="p">]</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-1677"><a href="#Parser-1677"><span class="linenos">1677</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;COLLECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;ITEMS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1678"><a href="#Parser-1678"><span class="linenos">1678</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;collection_items&quot;</span><span class="p">]</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-1679"><a href="#Parser-1679"><span class="linenos">1679</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;MAP&quot;</span><span class="p">,</span> <span class="s2">&quot;KEYS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1680"><a href="#Parser-1680"><span class="linenos">1680</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;map_keys&quot;</span><span class="p">]</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-1681"><a href="#Parser-1681"><span class="linenos">1681</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;LINES&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-1682"><a href="#Parser-1682"><span class="linenos">1682</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;lines&quot;</span><span class="p">]</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-1683"><a href="#Parser-1683"><span class="linenos">1683</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 class="s2">&quot;DEFINED&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
-</span><span id="Parser-1684"><a href="#Parser-1684"><span class="linenos">1684</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;null&quot;</span><span class="p">]</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-1685"><a href="#Parser-1685"><span class="linenos">1685</span></a>
-</span><span id="Parser-1686"><a href="#Parser-1686"><span class="linenos">1686</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-1687"><a href="#Parser-1687"><span class="linenos">1687</span></a>
-</span><span id="Parser-1688"><a href="#Parser-1688"><span class="linenos">1688</span></a> <span class="k">def</span> <span class="nf">_parse_load_data</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-1689"><a href="#Parser-1689"><span class="linenos">1689</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
-</span><span id="Parser-1690"><a href="#Parser-1690"><span class="linenos">1690</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;INPATH&quot;</span><span class="p">)</span>
-</span><span id="Parser-1691"><a href="#Parser-1691"><span class="linenos">1691</span></a> <span class="n">inpath</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-1692"><a href="#Parser-1692"><span class="linenos">1692</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
-</span><span id="Parser-1693"><a href="#Parser-1693"><span class="linenos">1693</span></a> <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">INTO</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-1673"><a href="#Parser-1673"><span class="linenos">1673</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;SERDE&quot;</span><span class="p">):</span>
+</span><span id="Parser-1674"><a href="#Parser-1674"><span class="linenos">1674</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</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><span id="Parser-1675"><a href="#Parser-1675"><span class="linenos">1675</span></a>
+</span><span id="Parser-1676"><a href="#Parser-1676"><span class="linenos">1676</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;DELIMITED&quot;</span><span class="p">)</span>
+</span><span id="Parser-1677"><a href="#Parser-1677"><span class="linenos">1677</span></a>
+</span><span id="Parser-1678"><a href="#Parser-1678"><span class="linenos">1678</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-1679"><a href="#Parser-1679"><span class="linenos">1679</span></a>
+</span><span id="Parser-1680"><a href="#Parser-1680"><span class="linenos">1680</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;FIELDS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1681"><a href="#Parser-1681"><span class="linenos">1681</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fields&quot;</span><span class="p">]</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-1682"><a href="#Parser-1682"><span class="linenos">1682</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;ESCAPED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1683"><a href="#Parser-1683"><span class="linenos">1683</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;escaped&quot;</span><span class="p">]</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-1684"><a href="#Parser-1684"><span class="linenos">1684</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;COLLECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;ITEMS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1685"><a href="#Parser-1685"><span class="linenos">1685</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;collection_items&quot;</span><span class="p">]</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-1686"><a href="#Parser-1686"><span class="linenos">1686</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;MAP&quot;</span><span class="p">,</span> <span class="s2">&quot;KEYS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1687"><a href="#Parser-1687"><span class="linenos">1687</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;map_keys&quot;</span><span class="p">]</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-1688"><a href="#Parser-1688"><span class="linenos">1688</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;LINES&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="Parser-1689"><a href="#Parser-1689"><span class="linenos">1689</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;lines&quot;</span><span class="p">]</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-1690"><a href="#Parser-1690"><span class="linenos">1690</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 class="s2">&quot;DEFINED&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
+</span><span id="Parser-1691"><a href="#Parser-1691"><span class="linenos">1691</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;null&quot;</span><span class="p">]</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-1692"><a href="#Parser-1692"><span class="linenos">1692</span></a>
+</span><span id="Parser-1693"><a href="#Parser-1693"><span class="linenos">1693</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-1694"><a href="#Parser-1694"><span class="linenos">1694</span></a>
-</span><span id="Parser-1695"><a href="#Parser-1695"><span class="linenos">1695</span></a> <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-1696"><a href="#Parser-1696"><span class="linenos">1696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
-</span><span id="Parser-1697"><a href="#Parser-1697"><span class="linenos">1697</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-1698"><a href="#Parser-1698"><span class="linenos">1698</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
-</span><span id="Parser-1699"><a href="#Parser-1699"><span class="linenos">1699</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
-</span><span id="Parser-1700"><a href="#Parser-1700"><span class="linenos">1700</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
-</span><span id="Parser-1701"><a href="#Parser-1701"><span class="linenos">1701</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</span><span class="p">(),</span>
-</span><span id="Parser-1702"><a href="#Parser-1702"><span class="linenos">1702</span></a> <span class="n">input_format</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;INPUTFORMAT&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-1703"><a href="#Parser-1703"><span class="linenos">1703</span></a> <span class="n">serde</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;SERDE&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-1704"><a href="#Parser-1704"><span class="linenos">1704</span></a> <span class="p">)</span>
-</span><span id="Parser-1705"><a href="#Parser-1705"><span class="linenos">1705</span></a>
-</span><span id="Parser-1706"><a href="#Parser-1706"><span class="linenos">1706</span></a> <span class="k">def</span> <span class="nf">_parse_delete</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-1707"><a href="#Parser-1707"><span class="linenos">1707</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">FROM</span><span class="p">)</span>
-</span><span id="Parser-1708"><a href="#Parser-1708"><span class="linenos">1708</span></a>
-</span><span id="Parser-1709"><a href="#Parser-1709"><span class="linenos">1709</span></a> <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-1710"><a href="#Parser-1710"><span class="linenos">1710</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
-</span><span id="Parser-1711"><a href="#Parser-1711"><span class="linenos">1711</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-1712"><a href="#Parser-1712"><span class="linenos">1712</span></a> <span class="n">using</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">_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_table</span><span class="p">()),</span>
-</span><span id="Parser-1713"><a href="#Parser-1713"><span class="linenos">1713</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-1714"><a href="#Parser-1714"><span class="linenos">1714</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="Parser-1715"><a href="#Parser-1715"><span class="linenos">1715</span></a> <span class="p">)</span>
-</span><span id="Parser-1716"><a href="#Parser-1716"><span class="linenos">1716</span></a>
-</span><span id="Parser-1717"><a href="#Parser-1717"><span class="linenos">1717</span></a> <span class="k">def</span> <span class="nf">_parse_update</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-1718"><a href="#Parser-1718"><span class="linenos">1718</span></a> <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-1719"><a href="#Parser-1719"><span class="linenos">1719</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Parser-1720"><a href="#Parser-1720"><span class="linenos">1720</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-1721"><a href="#Parser-1721"><span class="linenos">1721</span></a> <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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UPDATE_ALIAS_TOKENS</span><span class="p">),</span>
-</span><span id="Parser-1722"><a href="#Parser-1722"><span class="linenos">1722</span></a> <span class="s2">&quot;expressions&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">SET</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_equality</span><span class="p">),</span>
-</span><span id="Parser-1723"><a href="#Parser-1723"><span class="linenos">1723</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">_parse_from</span><span class="p">(),</span>
-</span><span id="Parser-1724"><a href="#Parser-1724"><span class="linenos">1724</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
-</span><span id="Parser-1725"><a href="#Parser-1725"><span class="linenos">1725</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
-</span><span id="Parser-1726"><a href="#Parser-1726"><span class="linenos">1726</span></a> <span class="p">},</span>
-</span><span id="Parser-1727"><a href="#Parser-1727"><span class="linenos">1727</span></a> <span class="p">)</span>
-</span><span id="Parser-1728"><a href="#Parser-1728"><span class="linenos">1728</span></a>
-</span><span id="Parser-1729"><a href="#Parser-1729"><span class="linenos">1729</span></a> <span class="k">def</span> <span class="nf">_parse_uncache</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-1730"><a href="#Parser-1730"><span class="linenos">1730</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-1731"><a href="#Parser-1731"><span class="linenos">1731</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 TABLE after UNCACHE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1732"><a href="#Parser-1732"><span class="linenos">1732</span></a>
-</span><span id="Parser-1733"><a href="#Parser-1733"><span class="linenos">1733</span></a> <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-1734"><a href="#Parser-1734"><span class="linenos">1734</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span>
-</span><span id="Parser-1735"><a href="#Parser-1735"><span class="linenos">1735</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-1736"><a href="#Parser-1736"><span class="linenos">1736</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-1737"><a href="#Parser-1737"><span class="linenos">1737</span></a> <span class="p">)</span>
-</span><span id="Parser-1738"><a href="#Parser-1738"><span class="linenos">1738</span></a>
-</span><span id="Parser-1739"><a href="#Parser-1739"><span class="linenos">1739</span></a> <span class="k">def</span> <span class="nf">_parse_cache</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-1740"><a href="#Parser-1740"><span class="linenos">1740</span></a> <span class="n">lazy</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">LAZY</span><span class="p">)</span>
-</span><span id="Parser-1741"><a href="#Parser-1741"><span class="linenos">1741</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-1742"><a href="#Parser-1742"><span class="linenos">1742</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</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-1743"><a href="#Parser-1743"><span class="linenos">1743</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1744"><a href="#Parser-1744"><span class="linenos">1744</span></a>
-</span><span id="Parser-1745"><a href="#Parser-1745"><span class="linenos">1745</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">):</span>
-</span><span id="Parser-1746"><a href="#Parser-1746"><span class="linenos">1746</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-1747"><a href="#Parser-1747"><span class="linenos">1747</span></a> <span class="n">k</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-1748"><a href="#Parser-1748"><span class="linenos">1748</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">EQ</span><span class="p">)</span>
-</span><span id="Parser-1749"><a href="#Parser-1749"><span class="linenos">1749</span></a> <span class="n">v</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-1750"><a href="#Parser-1750"><span class="linenos">1750</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span>
-</span><span id="Parser-1751"><a href="#Parser-1751"><span class="linenos">1751</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-1752"><a href="#Parser-1752"><span class="linenos">1752</span></a>
-</span><span id="Parser-1753"><a href="#Parser-1753"><span class="linenos">1753</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-1754"><a href="#Parser-1754"><span class="linenos">1754</span></a> <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-1755"><a href="#Parser-1755"><span class="linenos">1755</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
-</span><span id="Parser-1756"><a href="#Parser-1756"><span class="linenos">1756</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Parser-1757"><a href="#Parser-1757"><span class="linenos">1757</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
-</span><span id="Parser-1758"><a href="#Parser-1758"><span class="linenos">1758</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
-</span><span id="Parser-1759"><a href="#Parser-1759"><span class="linenos">1759</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><span id="Parser-1760"><a href="#Parser-1760"><span class="linenos">1760</span></a> <span class="p">)</span>
-</span><span id="Parser-1761"><a href="#Parser-1761"><span class="linenos">1761</span></a>
-</span><span id="Parser-1762"><a href="#Parser-1762"><span class="linenos">1762</span></a> <span class="k">def</span> <span class="nf">_parse_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1763"><a href="#Parser-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">_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><span id="Parser-1764"><a href="#Parser-1764"><span class="linenos">1764</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1765"><a href="#Parser-1765"><span class="linenos">1765</span></a>
-</span><span id="Parser-1766"><a href="#Parser-1766"><span class="linenos">1766</span></a> <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-1767"><a href="#Parser-1767"><span class="linenos">1767</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</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_conjunction</span><span class="p">)</span>
-</span><span id="Parser-1768"><a href="#Parser-1768"><span class="linenos">1768</span></a> <span class="p">)</span>
-</span><span id="Parser-1769"><a href="#Parser-1769"><span class="linenos">1769</span></a>
-</span><span id="Parser-1770"><a href="#Parser-1770"><span class="linenos">1770</span></a> <span class="k">def</span> <span class="nf">_parse_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">Expression</span><span class="p">:</span>
-</span><span id="Parser-1771"><a href="#Parser-1771"><span class="linenos">1771</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1772"><a href="#Parser-1772"><span class="linenos">1772</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-1773"><a href="#Parser-1773"><span class="linenos">1773</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-1774"><a href="#Parser-1774"><span class="linenos">1774</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1775"><a href="#Parser-1775"><span class="linenos">1775</span></a>
-</span><span id="Parser-1776"><a href="#Parser-1776"><span class="linenos">1776</span></a> <span class="c1"># In presto we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
-</span><span id="Parser-1777"><a href="#Parser-1777"><span class="linenos">1777</span></a> <span class="c1"># Source: https://prestodb.io/docs/current/sql/values.html</span>
-</span><span id="Parser-1778"><a href="#Parser-1778"><span class="linenos">1778</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="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-1779"><a href="#Parser-1779"><span class="linenos">1779</span></a>
-</span><span id="Parser-1780"><a href="#Parser-1780"><span class="linenos">1780</span></a> <span class="k">def</span> <span class="nf">_parse_select</span><span class="p">(</span>
-</span><span id="Parser-1781"><a href="#Parser-1781"><span class="linenos">1781</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">nested</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">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 class="n">parse_subquery_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1782"><a href="#Parser-1782"><span class="linenos">1782</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-1783"><a href="#Parser-1783"><span class="linenos">1783</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">()</span>
-</span><span id="Parser-1784"><a href="#Parser-1784"><span class="linenos">1784</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
-</span><span id="Parser-1785"><a href="#Parser-1785"><span class="linenos">1785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
+</span><span id="Parser-1695"><a href="#Parser-1695"><span class="linenos">1695</span></a> <span class="k">def</span> <span class="nf">_parse_load_data</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-1696"><a href="#Parser-1696"><span class="linenos">1696</span></a> <span class="n">local</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">LOCAL</span><span class="p">)</span>
+</span><span id="Parser-1697"><a href="#Parser-1697"><span class="linenos">1697</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;INPATH&quot;</span><span class="p">)</span>
+</span><span id="Parser-1698"><a href="#Parser-1698"><span class="linenos">1698</span></a> <span class="n">inpath</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-1699"><a href="#Parser-1699"><span class="linenos">1699</span></a> <span class="n">overwrite</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">OVERWRITE</span><span class="p">)</span>
+</span><span id="Parser-1700"><a href="#Parser-1700"><span class="linenos">1700</span></a> <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">INTO</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-1701"><a href="#Parser-1701"><span class="linenos">1701</span></a>
+</span><span id="Parser-1702"><a href="#Parser-1702"><span class="linenos">1702</span></a> <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-1703"><a href="#Parser-1703"><span class="linenos">1703</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
+</span><span id="Parser-1704"><a href="#Parser-1704"><span class="linenos">1704</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-1705"><a href="#Parser-1705"><span class="linenos">1705</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
+</span><span id="Parser-1706"><a href="#Parser-1706"><span class="linenos">1706</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
+</span><span id="Parser-1707"><a href="#Parser-1707"><span class="linenos">1707</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
+</span><span id="Parser-1708"><a href="#Parser-1708"><span class="linenos">1708</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</span><span class="p">(),</span>
+</span><span id="Parser-1709"><a href="#Parser-1709"><span class="linenos">1709</span></a> <span class="n">input_format</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;INPUTFORMAT&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-1710"><a href="#Parser-1710"><span class="linenos">1710</span></a> <span class="n">serde</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;SERDE&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-1711"><a href="#Parser-1711"><span class="linenos">1711</span></a> <span class="p">)</span>
+</span><span id="Parser-1712"><a href="#Parser-1712"><span class="linenos">1712</span></a>
+</span><span id="Parser-1713"><a href="#Parser-1713"><span class="linenos">1713</span></a> <span class="k">def</span> <span class="nf">_parse_delete</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-1714"><a href="#Parser-1714"><span class="linenos">1714</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">FROM</span><span class="p">)</span>
+</span><span id="Parser-1715"><a href="#Parser-1715"><span class="linenos">1715</span></a>
+</span><span id="Parser-1716"><a href="#Parser-1716"><span class="linenos">1716</span></a> <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-1717"><a href="#Parser-1717"><span class="linenos">1717</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
+</span><span id="Parser-1718"><a href="#Parser-1718"><span class="linenos">1718</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-1719"><a href="#Parser-1719"><span class="linenos">1719</span></a> <span class="n">using</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">_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_table</span><span class="p">()),</span>
+</span><span id="Parser-1720"><a href="#Parser-1720"><span class="linenos">1720</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-1721"><a href="#Parser-1721"><span class="linenos">1721</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="Parser-1722"><a href="#Parser-1722"><span class="linenos">1722</span></a> <span class="p">)</span>
+</span><span id="Parser-1723"><a href="#Parser-1723"><span class="linenos">1723</span></a>
+</span><span id="Parser-1724"><a href="#Parser-1724"><span class="linenos">1724</span></a> <span class="k">def</span> <span class="nf">_parse_update</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-1725"><a href="#Parser-1725"><span class="linenos">1725</span></a> <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-1726"><a href="#Parser-1726"><span class="linenos">1726</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Parser-1727"><a href="#Parser-1727"><span class="linenos">1727</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-1728"><a href="#Parser-1728"><span class="linenos">1728</span></a> <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">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UPDATE_ALIAS_TOKENS</span><span class="p">),</span>
+</span><span id="Parser-1729"><a href="#Parser-1729"><span class="linenos">1729</span></a> <span class="s2">&quot;expressions&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">SET</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_equality</span><span class="p">),</span>
+</span><span id="Parser-1730"><a href="#Parser-1730"><span class="linenos">1730</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">_parse_from</span><span class="p">(),</span>
+</span><span id="Parser-1731"><a href="#Parser-1731"><span class="linenos">1731</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
+</span><span id="Parser-1732"><a href="#Parser-1732"><span class="linenos">1732</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
+</span><span id="Parser-1733"><a href="#Parser-1733"><span class="linenos">1733</span></a> <span class="p">},</span>
+</span><span id="Parser-1734"><a href="#Parser-1734"><span class="linenos">1734</span></a> <span class="p">)</span>
+</span><span id="Parser-1735"><a href="#Parser-1735"><span class="linenos">1735</span></a>
+</span><span id="Parser-1736"><a href="#Parser-1736"><span class="linenos">1736</span></a> <span class="k">def</span> <span class="nf">_parse_uncache</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-1737"><a href="#Parser-1737"><span class="linenos">1737</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-1738"><a href="#Parser-1738"><span class="linenos">1738</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 TABLE after UNCACHE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1739"><a href="#Parser-1739"><span class="linenos">1739</span></a>
+</span><span id="Parser-1740"><a href="#Parser-1740"><span class="linenos">1740</span></a> <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-1741"><a href="#Parser-1741"><span class="linenos">1741</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span>
+</span><span id="Parser-1742"><a href="#Parser-1742"><span class="linenos">1742</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-1743"><a href="#Parser-1743"><span class="linenos">1743</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-1744"><a href="#Parser-1744"><span class="linenos">1744</span></a> <span class="p">)</span>
+</span><span id="Parser-1745"><a href="#Parser-1745"><span class="linenos">1745</span></a>
+</span><span id="Parser-1746"><a href="#Parser-1746"><span class="linenos">1746</span></a> <span class="k">def</span> <span class="nf">_parse_cache</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-1747"><a href="#Parser-1747"><span class="linenos">1747</span></a> <span class="n">lazy</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">LAZY</span><span class="p">)</span>
+</span><span id="Parser-1748"><a href="#Parser-1748"><span class="linenos">1748</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-1749"><a href="#Parser-1749"><span class="linenos">1749</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</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-1750"><a href="#Parser-1750"><span class="linenos">1750</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1751"><a href="#Parser-1751"><span class="linenos">1751</span></a>
+</span><span id="Parser-1752"><a href="#Parser-1752"><span class="linenos">1752</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">):</span>
+</span><span id="Parser-1753"><a href="#Parser-1753"><span class="linenos">1753</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-1754"><a href="#Parser-1754"><span class="linenos">1754</span></a> <span class="n">k</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-1755"><a href="#Parser-1755"><span class="linenos">1755</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">EQ</span><span class="p">)</span>
+</span><span id="Parser-1756"><a href="#Parser-1756"><span class="linenos">1756</span></a> <span class="n">v</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-1757"><a href="#Parser-1757"><span class="linenos">1757</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span>
+</span><span id="Parser-1758"><a href="#Parser-1758"><span class="linenos">1758</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-1759"><a href="#Parser-1759"><span class="linenos">1759</span></a>
+</span><span id="Parser-1760"><a href="#Parser-1760"><span class="linenos">1760</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-1761"><a href="#Parser-1761"><span class="linenos">1761</span></a> <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-1762"><a href="#Parser-1762"><span class="linenos">1762</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
+</span><span id="Parser-1763"><a href="#Parser-1763"><span class="linenos">1763</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Parser-1764"><a href="#Parser-1764"><span class="linenos">1764</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
+</span><span id="Parser-1765"><a href="#Parser-1765"><span class="linenos">1765</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
+</span><span id="Parser-1766"><a href="#Parser-1766"><span class="linenos">1766</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><span id="Parser-1767"><a href="#Parser-1767"><span class="linenos">1767</span></a> <span class="p">)</span>
+</span><span id="Parser-1768"><a href="#Parser-1768"><span class="linenos">1768</span></a>
+</span><span id="Parser-1769"><a href="#Parser-1769"><span class="linenos">1769</span></a> <span class="k">def</span> <span class="nf">_parse_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1770"><a href="#Parser-1770"><span class="linenos">1770</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">PARTITION</span><span class="p">):</span>
+</span><span id="Parser-1771"><a href="#Parser-1771"><span class="linenos">1771</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1772"><a href="#Parser-1772"><span class="linenos">1772</span></a>
+</span><span id="Parser-1773"><a href="#Parser-1773"><span class="linenos">1773</span></a> <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-1774"><a href="#Parser-1774"><span class="linenos">1774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</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_conjunction</span><span class="p">)</span>
+</span><span id="Parser-1775"><a href="#Parser-1775"><span class="linenos">1775</span></a> <span class="p">)</span>
+</span><span id="Parser-1776"><a href="#Parser-1776"><span class="linenos">1776</span></a>
+</span><span id="Parser-1777"><a href="#Parser-1777"><span class="linenos">1777</span></a> <span class="k">def</span> <span class="nf">_parse_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">Expression</span><span class="p">:</span>
+</span><span id="Parser-1778"><a href="#Parser-1778"><span class="linenos">1778</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1779"><a href="#Parser-1779"><span class="linenos">1779</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-1780"><a href="#Parser-1780"><span class="linenos">1780</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-1781"><a href="#Parser-1781"><span class="linenos">1781</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1782"><a href="#Parser-1782"><span class="linenos">1782</span></a>
+</span><span id="Parser-1783"><a href="#Parser-1783"><span class="linenos">1783</span></a> <span class="c1"># In presto we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
+</span><span id="Parser-1784"><a href="#Parser-1784"><span class="linenos">1784</span></a> <span class="c1"># Source: https://prestodb.io/docs/current/sql/values.html</span>
+</span><span id="Parser-1785"><a href="#Parser-1785"><span class="linenos">1785</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="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-1786"><a href="#Parser-1786"><span class="linenos">1786</span></a>
-</span><span id="Parser-1787"><a href="#Parser-1787"><span class="linenos">1787</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-1788"><a href="#Parser-1788"><span class="linenos">1788</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 any statement following CTE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1789"><a href="#Parser-1789"><span class="linenos">1789</span></a> <span class="k">return</span> <span class="n">cte</span>
-</span><span id="Parser-1790"><a href="#Parser-1790"><span class="linenos">1790</span></a>
-</span><span id="Parser-1791"><a href="#Parser-1791"><span class="linenos">1791</span></a> <span class="k">if</span> <span class="s2">&quot;with&quot;</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
-</span><span id="Parser-1792"><a href="#Parser-1792"><span class="linenos">1792</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;with&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="p">)</span>
-</span><span id="Parser-1793"><a href="#Parser-1793"><span class="linenos">1793</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1794"><a href="#Parser-1794"><span class="linenos">1794</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;</span><span class="si">{</span><span class="n">this</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> does not support CTE&quot;</span><span class="p">)</span>
-</span><span id="Parser-1795"><a href="#Parser-1795"><span class="linenos">1795</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
-</span><span id="Parser-1796"><a href="#Parser-1796"><span class="linenos">1796</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">SELECT</span><span class="p">):</span>
-</span><span id="Parser-1797"><a href="#Parser-1797"><span class="linenos">1797</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-1798"><a href="#Parser-1798"><span class="linenos">1798</span></a>
-</span><span id="Parser-1799"><a href="#Parser-1799"><span class="linenos">1799</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-1800"><a href="#Parser-1800"><span class="linenos">1800</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-1801"><a href="#Parser-1801"><span class="linenos">1801</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">))</span>
-</span><span id="Parser-1802"><a href="#Parser-1802"><span class="linenos">1802</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">text</span>
-</span><span id="Parser-1803"><a href="#Parser-1803"><span class="linenos">1803</span></a> <span class="p">)</span>
-</span><span id="Parser-1804"><a href="#Parser-1804"><span class="linenos">1804</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
-</span><span id="Parser-1805"><a href="#Parser-1805"><span class="linenos">1805</span></a> <span class="n">all_</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">ALL</span><span class="p">)</span>
-</span><span id="Parser-1806"><a href="#Parser-1806"><span class="linenos">1806</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><span id="Parser-1807"><a href="#Parser-1807"><span class="linenos">1807</span></a>
-</span><span id="Parser-1808"><a href="#Parser-1808"><span class="linenos">1808</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="Parser-1809"><a href="#Parser-1809"><span class="linenos">1809</span></a> <span class="n">distinct</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-1810"><a href="#Parser-1810"><span class="linenos">1810</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
-</span><span id="Parser-1811"><a href="#Parser-1811"><span class="linenos">1811</span></a> <span class="n">on</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 class="k">if</span> <span class="bp">self</span><span 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="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-1812"><a href="#Parser-1812"><span class="linenos">1812</span></a> <span class="p">)</span>
-</span><span id="Parser-1813"><a href="#Parser-1813"><span class="linenos">1813</span></a>
-</span><span id="Parser-1814"><a href="#Parser-1814"><span class="linenos">1814</span></a> <span class="k">if</span> <span class="n">all_</span> <span class="ow">and</span> <span class="n">distinct</span><span class="p">:</span>
-</span><span id="Parser-1815"><a href="#Parser-1815"><span class="linenos">1815</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 ALL and DISTINCT after SELECT&quot;</span><span class="p">)</span>
-</span><span id="Parser-1816"><a href="#Parser-1816"><span class="linenos">1816</span></a>
-</span><span id="Parser-1817"><a href="#Parser-1817"><span class="linenos">1817</span></a> <span class="n">limit</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">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-1818"><a href="#Parser-1818"><span class="linenos">1818</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_expression</span><span class="p">)</span>
-</span><span id="Parser-1819"><a href="#Parser-1819"><span class="linenos">1819</span></a>
-</span><span id="Parser-1820"><a href="#Parser-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">expression</span><span class="p">(</span>
-</span><span id="Parser-1821"><a href="#Parser-1821"><span class="linenos">1821</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
-</span><span id="Parser-1822"><a href="#Parser-1822"><span class="linenos">1822</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-1823"><a href="#Parser-1823"><span class="linenos">1823</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
-</span><span id="Parser-1824"><a href="#Parser-1824"><span class="linenos">1824</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="Parser-1825"><a href="#Parser-1825"><span class="linenos">1825</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-1826"><a href="#Parser-1826"><span class="linenos">1826</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
-</span><span id="Parser-1827"><a href="#Parser-1827"><span class="linenos">1827</span></a> <span class="p">)</span>
-</span><span id="Parser-1828"><a href="#Parser-1828"><span class="linenos">1828</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Parser-1829"><a href="#Parser-1829"><span class="linenos">1829</span></a>
-</span><span id="Parser-1830"><a href="#Parser-1830"><span class="linenos">1830</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
-</span><span id="Parser-1831"><a href="#Parser-1831"><span class="linenos">1831</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
-</span><span id="Parser-1832"><a href="#Parser-1832"><span class="linenos">1832</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;into&quot;</span><span class="p">,</span> <span class="n">into</span><span class="p">)</span>
-</span><span id="Parser-1833"><a href="#Parser-1833"><span class="linenos">1833</span></a>
-</span><span id="Parser-1834"><a href="#Parser-1834"><span class="linenos">1834</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
-</span><span id="Parser-1835"><a href="#Parser-1835"><span class="linenos">1835</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
-</span><span id="Parser-1836"><a href="#Parser-1836"><span class="linenos">1836</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</span>
-</span><span id="Parser-1837"><a href="#Parser-1837"><span class="linenos">1837</span></a>
-</span><span id="Parser-1838"><a href="#Parser-1838"><span class="linenos">1838</span></a> <span class="bp">self</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="Parser-1839"><a href="#Parser-1839"><span class="linenos">1839</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">table</span> <span class="ow">or</span> <span class="n">nested</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-1840"><a href="#Parser-1840"><span class="linenos">1840</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="k">if</span> <span class="n">table</span> <span class="k">else</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-1841"><a href="#Parser-1841"><span class="linenos">1841</span></a> <span class="bp">self</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="Parser-1842"><a href="#Parser-1842"><span class="linenos">1842</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 class="n">this</span><span class="p">)</span>
-</span><span id="Parser-1843"><a href="#Parser-1843"><span class="linenos">1843</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-1787"><a href="#Parser-1787"><span class="linenos">1787</span></a> <span class="k">def</span> <span class="nf">_parse_select</span><span class="p">(</span>
+</span><span id="Parser-1788"><a href="#Parser-1788"><span class="linenos">1788</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">nested</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">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 class="n">parse_subquery_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1789"><a href="#Parser-1789"><span class="linenos">1789</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-1790"><a href="#Parser-1790"><span class="linenos">1790</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">()</span>
+</span><span id="Parser-1791"><a href="#Parser-1791"><span class="linenos">1791</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
+</span><span id="Parser-1792"><a href="#Parser-1792"><span class="linenos">1792</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
+</span><span id="Parser-1793"><a href="#Parser-1793"><span class="linenos">1793</span></a>
+</span><span id="Parser-1794"><a href="#Parser-1794"><span class="linenos">1794</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-1795"><a href="#Parser-1795"><span class="linenos">1795</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 any statement following CTE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1796"><a href="#Parser-1796"><span class="linenos">1796</span></a> <span class="k">return</span> <span class="n">cte</span>
+</span><span id="Parser-1797"><a href="#Parser-1797"><span class="linenos">1797</span></a>
+</span><span id="Parser-1798"><a href="#Parser-1798"><span class="linenos">1798</span></a> <span class="k">if</span> <span class="s2">&quot;with&quot;</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
+</span><span id="Parser-1799"><a href="#Parser-1799"><span class="linenos">1799</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;with&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="p">)</span>
+</span><span id="Parser-1800"><a href="#Parser-1800"><span class="linenos">1800</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1801"><a href="#Parser-1801"><span class="linenos">1801</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;</span><span class="si">{</span><span class="n">this</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> does not support CTE&quot;</span><span class="p">)</span>
+</span><span id="Parser-1802"><a href="#Parser-1802"><span class="linenos">1802</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
+</span><span id="Parser-1803"><a href="#Parser-1803"><span class="linenos">1803</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">SELECT</span><span class="p">):</span>
+</span><span id="Parser-1804"><a href="#Parser-1804"><span class="linenos">1804</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-1805"><a href="#Parser-1805"><span class="linenos">1805</span></a>
+</span><span id="Parser-1806"><a href="#Parser-1806"><span class="linenos">1806</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-1807"><a href="#Parser-1807"><span class="linenos">1807</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-1808"><a href="#Parser-1808"><span class="linenos">1808</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">))</span>
+</span><span id="Parser-1809"><a href="#Parser-1809"><span class="linenos">1809</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">text</span>
+</span><span id="Parser-1810"><a href="#Parser-1810"><span class="linenos">1810</span></a> <span class="p">)</span>
+</span><span id="Parser-1811"><a href="#Parser-1811"><span class="linenos">1811</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
+</span><span id="Parser-1812"><a href="#Parser-1812"><span class="linenos">1812</span></a> <span class="n">all_</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">ALL</span><span class="p">)</span>
+</span><span id="Parser-1813"><a href="#Parser-1813"><span class="linenos">1813</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><span id="Parser-1814"><a href="#Parser-1814"><span class="linenos">1814</span></a>
+</span><span id="Parser-1815"><a href="#Parser-1815"><span class="linenos">1815</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="Parser-1816"><a href="#Parser-1816"><span class="linenos">1816</span></a> <span class="n">distinct</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-1817"><a href="#Parser-1817"><span class="linenos">1817</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
+</span><span id="Parser-1818"><a href="#Parser-1818"><span class="linenos">1818</span></a> <span class="n">on</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 class="k">if</span> <span class="bp">self</span><span 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="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-1819"><a href="#Parser-1819"><span class="linenos">1819</span></a> <span class="p">)</span>
+</span><span id="Parser-1820"><a href="#Parser-1820"><span class="linenos">1820</span></a>
+</span><span id="Parser-1821"><a href="#Parser-1821"><span class="linenos">1821</span></a> <span class="k">if</span> <span class="n">all_</span> <span class="ow">and</span> <span class="n">distinct</span><span class="p">:</span>
+</span><span id="Parser-1822"><a href="#Parser-1822"><span class="linenos">1822</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 ALL and DISTINCT after SELECT&quot;</span><span class="p">)</span>
+</span><span id="Parser-1823"><a href="#Parser-1823"><span class="linenos">1823</span></a>
+</span><span id="Parser-1824"><a href="#Parser-1824"><span class="linenos">1824</span></a> <span class="n">limit</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">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-1825"><a href="#Parser-1825"><span class="linenos">1825</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_expression</span><span class="p">)</span>
+</span><span id="Parser-1826"><a href="#Parser-1826"><span class="linenos">1826</span></a>
+</span><span id="Parser-1827"><a href="#Parser-1827"><span class="linenos">1827</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-1828"><a href="#Parser-1828"><span class="linenos">1828</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
+</span><span id="Parser-1829"><a href="#Parser-1829"><span class="linenos">1829</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-1830"><a href="#Parser-1830"><span class="linenos">1830</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
+</span><span id="Parser-1831"><a href="#Parser-1831"><span class="linenos">1831</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="Parser-1832"><a href="#Parser-1832"><span class="linenos">1832</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-1833"><a href="#Parser-1833"><span class="linenos">1833</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
+</span><span id="Parser-1834"><a href="#Parser-1834"><span class="linenos">1834</span></a> <span class="p">)</span>
+</span><span id="Parser-1835"><a href="#Parser-1835"><span class="linenos">1835</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Parser-1836"><a href="#Parser-1836"><span class="linenos">1836</span></a>
+</span><span id="Parser-1837"><a href="#Parser-1837"><span class="linenos">1837</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
+</span><span id="Parser-1838"><a href="#Parser-1838"><span class="linenos">1838</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
+</span><span id="Parser-1839"><a href="#Parser-1839"><span class="linenos">1839</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;into&quot;</span><span class="p">,</span> <span class="n">into</span><span class="p">)</span>
+</span><span id="Parser-1840"><a href="#Parser-1840"><span class="linenos">1840</span></a>
+</span><span id="Parser-1841"><a href="#Parser-1841"><span class="linenos">1841</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
+</span><span id="Parser-1842"><a href="#Parser-1842"><span class="linenos">1842</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
+</span><span id="Parser-1843"><a href="#Parser-1843"><span class="linenos">1843</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</span>
</span><span id="Parser-1844"><a href="#Parser-1844"><span class="linenos">1844</span></a>
-</span><span id="Parser-1845"><a href="#Parser-1845"><span class="linenos">1845</span></a> <span class="c1"># early return so that subquery unions aren&#39;t parsed again</span>
-</span><span id="Parser-1846"><a href="#Parser-1846"><span class="linenos">1846</span></a> <span class="c1"># SELECT * FROM (SELECT 1) UNION ALL SELECT 1</span>
-</span><span id="Parser-1847"><a href="#Parser-1847"><span class="linenos">1847</span></a> <span class="c1"># Union ALL should be a property of the top select node, not the subquery</span>
-</span><span id="Parser-1848"><a href="#Parser-1848"><span class="linenos">1848</span></a> <span class="k">return</span> <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="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="n">parse_subquery_alias</span><span class="p">)</span>
-</span><span id="Parser-1849"><a href="#Parser-1849"><span class="linenos">1849</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">VALUES</span><span class="p">):</span>
-</span><span id="Parser-1850"><a href="#Parser-1850"><span class="linenos">1850</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-1851"><a href="#Parser-1851"><span class="linenos">1851</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span>
-</span><span id="Parser-1852"><a href="#Parser-1852"><span class="linenos">1852</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-1853"><a href="#Parser-1853"><span class="linenos">1853</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-1854"><a href="#Parser-1854"><span class="linenos">1854</span></a> <span class="p">)</span>
-</span><span id="Parser-1855"><a href="#Parser-1855"><span class="linenos">1855</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1856"><a href="#Parser-1856"><span class="linenos">1856</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1857"><a href="#Parser-1857"><span class="linenos">1857</span></a>
-</span><span id="Parser-1858"><a href="#Parser-1858"><span class="linenos">1858</span></a> <span class="k">return</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-1859"><a href="#Parser-1859"><span class="linenos">1859</span></a>
-</span><span id="Parser-1860"><a href="#Parser-1860"><span class="linenos">1860</span></a> <span class="k">def</span> <span class="nf">_parse_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_with_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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-1861"><a href="#Parser-1861"><span class="linenos">1861</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_with_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">WITH</span><span class="p">):</span>
-</span><span id="Parser-1862"><a href="#Parser-1862"><span class="linenos">1862</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1863"><a href="#Parser-1863"><span class="linenos">1863</span></a>
-</span><span id="Parser-1864"><a href="#Parser-1864"><span class="linenos">1864</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-1865"><a href="#Parser-1865"><span class="linenos">1865</span></a> <span class="n">recursive</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">RECURSIVE</span><span class="p">)</span>
+</span><span id="Parser-1845"><a href="#Parser-1845"><span class="linenos">1845</span></a> <span class="bp">self</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="Parser-1846"><a href="#Parser-1846"><span class="linenos">1846</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">table</span> <span class="ow">or</span> <span class="n">nested</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-1847"><a href="#Parser-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">_parse_table</span><span class="p">()</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</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-1848"><a href="#Parser-1848"><span class="linenos">1848</span></a> <span class="bp">self</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="Parser-1849"><a href="#Parser-1849"><span class="linenos">1849</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 class="n">this</span><span class="p">)</span>
+</span><span id="Parser-1850"><a href="#Parser-1850"><span class="linenos">1850</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-1851"><a href="#Parser-1851"><span class="linenos">1851</span></a>
+</span><span id="Parser-1852"><a href="#Parser-1852"><span class="linenos">1852</span></a> <span class="c1"># early return so that subquery unions aren&#39;t parsed again</span>
+</span><span id="Parser-1853"><a href="#Parser-1853"><span class="linenos">1853</span></a> <span class="c1"># SELECT * FROM (SELECT 1) UNION ALL SELECT 1</span>
+</span><span id="Parser-1854"><a href="#Parser-1854"><span class="linenos">1854</span></a> <span class="c1"># Union ALL should be a property of the top select node, not the subquery</span>
+</span><span id="Parser-1855"><a href="#Parser-1855"><span class="linenos">1855</span></a> <span class="k">return</span> <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="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="n">parse_subquery_alias</span><span class="p">)</span>
+</span><span id="Parser-1856"><a href="#Parser-1856"><span class="linenos">1856</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">VALUES</span><span class="p">):</span>
+</span><span id="Parser-1857"><a href="#Parser-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">expression</span><span class="p">(</span>
+</span><span id="Parser-1858"><a href="#Parser-1858"><span class="linenos">1858</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span>
+</span><span id="Parser-1859"><a href="#Parser-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">_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-1860"><a href="#Parser-1860"><span class="linenos">1860</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-1861"><a href="#Parser-1861"><span class="linenos">1861</span></a> <span class="p">)</span>
+</span><span id="Parser-1862"><a href="#Parser-1862"><span class="linenos">1862</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1863"><a href="#Parser-1863"><span class="linenos">1863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1864"><a href="#Parser-1864"><span class="linenos">1864</span></a>
+</span><span id="Parser-1865"><a href="#Parser-1865"><span class="linenos">1865</span></a> <span class="k">return</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-1866"><a href="#Parser-1866"><span class="linenos">1866</span></a>
-</span><span id="Parser-1867"><a href="#Parser-1867"><span class="linenos">1867</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-1868"><a href="#Parser-1868"><span class="linenos">1868</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-1869"><a href="#Parser-1869"><span class="linenos">1869</span></a> <span class="n">expressions</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_cte</span><span class="p">())</span>
+</span><span id="Parser-1867"><a href="#Parser-1867"><span class="linenos">1867</span></a> <span class="k">def</span> <span class="nf">_parse_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_with_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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-1868"><a href="#Parser-1868"><span class="linenos">1868</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_with_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">WITH</span><span class="p">):</span>
+</span><span id="Parser-1869"><a href="#Parser-1869"><span class="linenos">1869</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1870"><a href="#Parser-1870"><span class="linenos">1870</span></a>
-</span><span id="Parser-1871"><a href="#Parser-1871"><span class="linenos">1871</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 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">WITH</span><span class="p">):</span>
-</span><span id="Parser-1872"><a href="#Parser-1872"><span class="linenos">1872</span></a> <span class="k">break</span>
-</span><span id="Parser-1873"><a href="#Parser-1873"><span class="linenos">1873</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1874"><a href="#Parser-1874"><span class="linenos">1874</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">WITH</span><span class="p">)</span>
-</span><span id="Parser-1875"><a href="#Parser-1875"><span class="linenos">1875</span></a>
-</span><span id="Parser-1876"><a href="#Parser-1876"><span class="linenos">1876</span></a> <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-1877"><a href="#Parser-1877"><span class="linenos">1877</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</span>
-</span><span id="Parser-1878"><a href="#Parser-1878"><span class="linenos">1878</span></a> <span class="p">)</span>
-</span><span id="Parser-1879"><a href="#Parser-1879"><span class="linenos">1879</span></a>
-</span><span id="Parser-1880"><a href="#Parser-1880"><span class="linenos">1880</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-1881"><a href="#Parser-1881"><span class="linenos">1881</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-1882"><a href="#Parser-1882"><span class="linenos">1882</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-1883"><a href="#Parser-1883"><span class="linenos">1883</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
-</span><span id="Parser-1884"><a href="#Parser-1884"><span class="linenos">1884</span></a>
-</span><span id="Parser-1885"><a href="#Parser-1885"><span class="linenos">1885</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-1871"><a href="#Parser-1871"><span class="linenos">1871</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-1872"><a href="#Parser-1872"><span class="linenos">1872</span></a> <span class="n">recursive</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">RECURSIVE</span><span class="p">)</span>
+</span><span id="Parser-1873"><a href="#Parser-1873"><span class="linenos">1873</span></a>
+</span><span id="Parser-1874"><a href="#Parser-1874"><span class="linenos">1874</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-1875"><a href="#Parser-1875"><span class="linenos">1875</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-1876"><a href="#Parser-1876"><span class="linenos">1876</span></a> <span class="n">expressions</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_cte</span><span class="p">())</span>
+</span><span id="Parser-1877"><a href="#Parser-1877"><span class="linenos">1877</span></a>
+</span><span id="Parser-1878"><a href="#Parser-1878"><span class="linenos">1878</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 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">WITH</span><span class="p">):</span>
+</span><span id="Parser-1879"><a href="#Parser-1879"><span class="linenos">1879</span></a> <span class="k">break</span>
+</span><span id="Parser-1880"><a href="#Parser-1880"><span class="linenos">1880</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1881"><a href="#Parser-1881"><span class="linenos">1881</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">WITH</span><span class="p">)</span>
+</span><span id="Parser-1882"><a href="#Parser-1882"><span class="linenos">1882</span></a>
+</span><span id="Parser-1883"><a href="#Parser-1883"><span class="linenos">1883</span></a> <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-1884"><a href="#Parser-1884"><span class="linenos">1884</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</span>
+</span><span id="Parser-1885"><a href="#Parser-1885"><span class="linenos">1885</span></a> <span class="p">)</span>
</span><span id="Parser-1886"><a href="#Parser-1886"><span class="linenos">1886</span></a>
-</span><span id="Parser-1887"><a href="#Parser-1887"><span class="linenos">1887</span></a> <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-1888"><a href="#Parser-1888"><span class="linenos">1888</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
-</span><span id="Parser-1889"><a href="#Parser-1889"><span class="linenos">1889</span></a> <span class="n">this</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_statement</span><span class="p">),</span>
-</span><span id="Parser-1890"><a href="#Parser-1890"><span class="linenos">1890</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
-</span><span id="Parser-1891"><a href="#Parser-1891"><span class="linenos">1891</span></a> <span class="p">)</span>
-</span><span id="Parser-1892"><a href="#Parser-1892"><span class="linenos">1892</span></a>
-</span><span id="Parser-1893"><a href="#Parser-1893"><span class="linenos">1893</span></a> <span class="k">def</span> <span class="nf">_parse_table_alias</span><span class="p">(</span>
-</span><span id="Parser-1894"><a href="#Parser-1894"><span class="linenos">1894</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1895"><a href="#Parser-1895"><span class="linenos">1895</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-1896"><a href="#Parser-1896"><span class="linenos">1896</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-1897"><a href="#Parser-1897"><span class="linenos">1897</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-1898"><a href="#Parser-1898"><span class="linenos">1898</span></a> <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">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-1899"><a href="#Parser-1899"><span class="linenos">1899</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-1900"><a href="#Parser-1900"><span class="linenos">1900</span></a> <span class="p">)</span>
-</span><span id="Parser-1901"><a href="#Parser-1901"><span class="linenos">1901</span></a>
-</span><span id="Parser-1902"><a href="#Parser-1902"><span class="linenos">1902</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-1903"><a href="#Parser-1903"><span class="linenos">1903</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1904"><a href="#Parser-1904"><span class="linenos">1904</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_function_parameter</span><span class="p">)</span>
-</span><span id="Parser-1905"><a href="#Parser-1905"><span class="linenos">1905</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <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-1906"><a href="#Parser-1906"><span class="linenos">1906</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-1907"><a href="#Parser-1907"><span class="linenos">1907</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1887"><a href="#Parser-1887"><span class="linenos">1887</span></a> <span class="k">def</span> <span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-1888"><a href="#Parser-1888"><span class="linenos">1888</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-1889"><a href="#Parser-1889"><span class="linenos">1889</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-1890"><a href="#Parser-1890"><span class="linenos">1890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
+</span><span id="Parser-1891"><a href="#Parser-1891"><span class="linenos">1891</span></a>
+</span><span id="Parser-1892"><a href="#Parser-1892"><span class="linenos">1892</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-1893"><a href="#Parser-1893"><span class="linenos">1893</span></a>
+</span><span id="Parser-1894"><a href="#Parser-1894"><span class="linenos">1894</span></a> <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-1895"><a href="#Parser-1895"><span class="linenos">1895</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
+</span><span id="Parser-1896"><a href="#Parser-1896"><span class="linenos">1896</span></a> <span class="n">this</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_statement</span><span class="p">),</span>
+</span><span id="Parser-1897"><a href="#Parser-1897"><span class="linenos">1897</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
+</span><span id="Parser-1898"><a href="#Parser-1898"><span class="linenos">1898</span></a> <span class="p">)</span>
+</span><span id="Parser-1899"><a href="#Parser-1899"><span class="linenos">1899</span></a>
+</span><span id="Parser-1900"><a href="#Parser-1900"><span class="linenos">1900</span></a> <span class="k">def</span> <span class="nf">_parse_table_alias</span><span class="p">(</span>
+</span><span id="Parser-1901"><a href="#Parser-1901"><span class="linenos">1901</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1902"><a href="#Parser-1902"><span class="linenos">1902</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-1903"><a href="#Parser-1903"><span class="linenos">1903</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-1904"><a href="#Parser-1904"><span class="linenos">1904</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-1905"><a href="#Parser-1905"><span class="linenos">1905</span></a> <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">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-1906"><a href="#Parser-1906"><span class="linenos">1906</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-1907"><a href="#Parser-1907"><span class="linenos">1907</span></a> <span class="p">)</span>
</span><span id="Parser-1908"><a href="#Parser-1908"><span class="linenos">1908</span></a>
-</span><span id="Parser-1909"><a href="#Parser-1909"><span class="linenos">1909</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="n">columns</span><span class="p">:</span>
-</span><span id="Parser-1910"><a href="#Parser-1910"><span class="linenos">1910</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1911"><a href="#Parser-1911"><span class="linenos">1911</span></a>
-</span><span id="Parser-1912"><a href="#Parser-1912"><span class="linenos">1912</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="Parser-1913"><a href="#Parser-1913"><span class="linenos">1913</span></a>
-</span><span id="Parser-1914"><a href="#Parser-1914"><span class="linenos">1914</span></a> <span class="k">def</span> <span class="nf">_parse_subquery</span><span class="p">(</span>
-</span><span id="Parser-1915"><a href="#Parser-1915"><span class="linenos">1915</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">parse_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-1916"><a href="#Parser-1916"><span class="linenos">1916</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-1917"><a href="#Parser-1917"><span class="linenos">1917</span></a> <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-1918"><a href="#Parser-1918"><span class="linenos">1918</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
-</span><span id="Parser-1919"><a href="#Parser-1919"><span class="linenos">1919</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-1920"><a href="#Parser-1920"><span class="linenos">1920</span></a> <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-1921"><a href="#Parser-1921"><span class="linenos">1921</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">parse_alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-1922"><a href="#Parser-1922"><span class="linenos">1922</span></a> <span class="p">)</span>
-</span><span id="Parser-1923"><a href="#Parser-1923"><span class="linenos">1923</span></a>
-</span><span id="Parser-1924"><a href="#Parser-1924"><span class="linenos">1924</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</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="kc">None</span><span class="p">:</span>
-</span><span id="Parser-1925"><a href="#Parser-1925"><span class="linenos">1925</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">MODIFIABLES</span><span class="p">):</span>
-</span><span id="Parser-1926"><a href="#Parser-1926"><span class="linenos">1926</span></a> <span class="k">return</span>
-</span><span id="Parser-1927"><a href="#Parser-1927"><span class="linenos">1927</span></a>
-</span><span id="Parser-1928"><a href="#Parser-1928"><span class="linenos">1928</span></a> <span class="n">table</span> <span class="o">=</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><span id="Parser-1929"><a href="#Parser-1929"><span class="linenos">1929</span></a>
-</span><span id="Parser-1930"><a href="#Parser-1930"><span class="linenos">1930</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-1931"><a href="#Parser-1931"><span class="linenos">1931</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-1932"><a href="#Parser-1932"><span class="linenos">1932</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="Parser-1933"><a href="#Parser-1933"><span class="linenos">1933</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-1909"><a href="#Parser-1909"><span class="linenos">1909</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-1910"><a href="#Parser-1910"><span class="linenos">1910</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1911"><a href="#Parser-1911"><span class="linenos">1911</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_function_parameter</span><span class="p">)</span>
+</span><span id="Parser-1912"><a href="#Parser-1912"><span class="linenos">1912</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <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-1913"><a href="#Parser-1913"><span class="linenos">1913</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-1914"><a href="#Parser-1914"><span class="linenos">1914</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1915"><a href="#Parser-1915"><span class="linenos">1915</span></a>
+</span><span id="Parser-1916"><a href="#Parser-1916"><span class="linenos">1916</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="n">columns</span><span class="p">:</span>
+</span><span id="Parser-1917"><a href="#Parser-1917"><span class="linenos">1917</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1918"><a href="#Parser-1918"><span class="linenos">1918</span></a>
+</span><span id="Parser-1919"><a href="#Parser-1919"><span class="linenos">1919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="n">this</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="Parser-1920"><a href="#Parser-1920"><span class="linenos">1920</span></a>
+</span><span id="Parser-1921"><a href="#Parser-1921"><span class="linenos">1921</span></a> <span class="k">def</span> <span class="nf">_parse_subquery</span><span class="p">(</span>
+</span><span id="Parser-1922"><a href="#Parser-1922"><span class="linenos">1922</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">parse_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-1923"><a href="#Parser-1923"><span class="linenos">1923</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-1924"><a href="#Parser-1924"><span class="linenos">1924</span></a> <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-1925"><a href="#Parser-1925"><span class="linenos">1925</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
+</span><span id="Parser-1926"><a href="#Parser-1926"><span class="linenos">1926</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-1927"><a href="#Parser-1927"><span class="linenos">1927</span></a> <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-1928"><a href="#Parser-1928"><span class="linenos">1928</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">parse_alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-1929"><a href="#Parser-1929"><span class="linenos">1929</span></a> <span class="p">)</span>
+</span><span id="Parser-1930"><a href="#Parser-1930"><span class="linenos">1930</span></a>
+</span><span id="Parser-1931"><a href="#Parser-1931"><span class="linenos">1931</span></a> <span class="k">def</span> <span class="nf">_parse_query_modifiers</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="kc">None</span><span class="p">:</span>
+</span><span id="Parser-1932"><a href="#Parser-1932"><span class="linenos">1932</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">MODIFIABLES</span><span class="p">):</span>
+</span><span id="Parser-1933"><a href="#Parser-1933"><span class="linenos">1933</span></a> <span class="k">return</span>
</span><span id="Parser-1934"><a href="#Parser-1934"><span class="linenos">1934</span></a>
-</span><span id="Parser-1935"><a href="#Parser-1935"><span class="linenos">1935</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-1936"><a href="#Parser-1936"><span class="linenos">1936</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="Parser-1937"><a href="#Parser-1937"><span class="linenos">1937</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-1938"><a href="#Parser-1938"><span class="linenos">1938</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="Parser-1939"><a href="#Parser-1939"><span class="linenos">1939</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">lateral</span><span class="p">)</span>
-</span><span id="Parser-1940"><a href="#Parser-1940"><span class="linenos">1940</span></a>
-</span><span id="Parser-1941"><a href="#Parser-1941"><span class="linenos">1941</span></a> <span class="n">comma</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="bp">self</span><span 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-1942"><a href="#Parser-1942"><span class="linenos">1942</span></a> <span class="k">if</span> <span class="n">comma</span><span class="p">:</span>
-</span><span id="Parser-1943"><a href="#Parser-1943"><span class="linenos">1943</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="o">.</span><span class="n">append</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_table</span><span class="p">())</span>
-</span><span id="Parser-1944"><a href="#Parser-1944"><span class="linenos">1944</span></a>
-</span><span id="Parser-1945"><a href="#Parser-1945"><span class="linenos">1945</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">lateral</span> <span class="ow">or</span> <span class="n">join</span> <span class="ow">or</span> <span class="n">comma</span><span class="p">):</span>
-</span><span id="Parser-1946"><a href="#Parser-1946"><span class="linenos">1946</span></a> <span class="k">break</span>
+</span><span id="Parser-1935"><a href="#Parser-1935"><span class="linenos">1935</span></a> <span class="n">table</span> <span class="o">=</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><span id="Parser-1936"><a href="#Parser-1936"><span class="linenos">1936</span></a>
+</span><span id="Parser-1937"><a href="#Parser-1937"><span class="linenos">1937</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-1938"><a href="#Parser-1938"><span class="linenos">1938</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-1939"><a href="#Parser-1939"><span class="linenos">1939</span></a> <span class="k">if</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="Parser-1940"><a href="#Parser-1940"><span class="linenos">1940</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-1941"><a href="#Parser-1941"><span class="linenos">1941</span></a>
+</span><span id="Parser-1942"><a href="#Parser-1942"><span class="linenos">1942</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-1943"><a href="#Parser-1943"><span class="linenos">1943</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="Parser-1944"><a href="#Parser-1944"><span class="linenos">1944</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-1945"><a href="#Parser-1945"><span class="linenos">1945</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="Parser-1946"><a href="#Parser-1946"><span class="linenos">1946</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">lateral</span><span class="p">)</span>
</span><span id="Parser-1947"><a href="#Parser-1947"><span class="linenos">1947</span></a>
-</span><span id="Parser-1948"><a href="#Parser-1948"><span class="linenos">1948</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">parser</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="Parser-1949"><a href="#Parser-1949"><span class="linenos">1949</span></a> <span class="n">expression</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-1950"><a href="#Parser-1950"><span class="linenos">1950</span></a>
-</span><span id="Parser-1951"><a href="#Parser-1951"><span class="linenos">1951</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-1952"><a href="#Parser-1952"><span class="linenos">1952</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-1953"><a href="#Parser-1953"><span class="linenos">1953</span></a>
-</span><span id="Parser-1954"><a href="#Parser-1954"><span class="linenos">1954</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-1955"><a href="#Parser-1955"><span class="linenos">1955</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1956"><a href="#Parser-1956"><span class="linenos">1956</span></a> <span class="n">hints</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</span><span class="p">)</span>
-</span><span id="Parser-1957"><a href="#Parser-1957"><span class="linenos">1957</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-1958"><a href="#Parser-1958"><span class="linenos">1958</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-1959"><a href="#Parser-1959"><span class="linenos">1959</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1948"><a href="#Parser-1948"><span class="linenos">1948</span></a> <span class="n">comma</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="bp">self</span><span 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-1949"><a href="#Parser-1949"><span class="linenos">1949</span></a> <span class="k">if</span> <span class="n">comma</span><span class="p">:</span>
+</span><span id="Parser-1950"><a href="#Parser-1950"><span class="linenos">1950</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="o">.</span><span class="n">append</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_table</span><span class="p">())</span>
+</span><span id="Parser-1951"><a href="#Parser-1951"><span class="linenos">1951</span></a>
+</span><span id="Parser-1952"><a href="#Parser-1952"><span class="linenos">1952</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">lateral</span> <span class="ow">or</span> <span class="n">join</span> <span class="ow">or</span> <span class="n">comma</span><span class="p">):</span>
+</span><span id="Parser-1953"><a href="#Parser-1953"><span class="linenos">1953</span></a> <span class="k">break</span>
+</span><span id="Parser-1954"><a href="#Parser-1954"><span class="linenos">1954</span></a>
+</span><span id="Parser-1955"><a href="#Parser-1955"><span class="linenos">1955</span></a> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">parser</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="Parser-1956"><a href="#Parser-1956"><span class="linenos">1956</span></a> <span class="n">expression</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-1957"><a href="#Parser-1957"><span class="linenos">1957</span></a>
+</span><span id="Parser-1958"><a href="#Parser-1958"><span class="linenos">1958</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-1959"><a href="#Parser-1959"><span class="linenos">1959</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-1960"><a href="#Parser-1960"><span class="linenos">1960</span></a>
-</span><span id="Parser-1961"><a href="#Parser-1961"><span class="linenos">1961</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1962"><a href="#Parser-1962"><span class="linenos">1962</span></a>
-</span><span id="Parser-1963"><a href="#Parser-1963"><span class="linenos">1963</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-1964"><a href="#Parser-1964"><span class="linenos">1964</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-1965"><a href="#Parser-1965"><span class="linenos">1965</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1966"><a href="#Parser-1966"><span class="linenos">1966</span></a>
-</span><span id="Parser-1967"><a href="#Parser-1967"><span class="linenos">1967</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-1968"><a href="#Parser-1968"><span class="linenos">1968</span></a> <span class="n">unlogged</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">UNLOGGED</span><span class="p">)</span>
-</span><span id="Parser-1969"><a href="#Parser-1969"><span class="linenos">1969</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-1970"><a href="#Parser-1970"><span class="linenos">1970</span></a>
-</span><span id="Parser-1971"><a href="#Parser-1971"><span class="linenos">1971</span></a> <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-1972"><a href="#Parser-1972"><span class="linenos">1972</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-1973"><a href="#Parser-1973"><span class="linenos">1973</span></a> <span class="p">)</span>
-</span><span id="Parser-1974"><a href="#Parser-1974"><span class="linenos">1974</span></a>
-</span><span id="Parser-1975"><a href="#Parser-1975"><span class="linenos">1975</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1976"><a href="#Parser-1976"><span class="linenos">1976</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">FROM</span><span class="p">):</span>
-</span><span id="Parser-1977"><a href="#Parser-1977"><span class="linenos">1977</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1978"><a href="#Parser-1978"><span class="linenos">1978</span></a>
-</span><span id="Parser-1979"><a href="#Parser-1979"><span class="linenos">1979</span></a> <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-1980"><a href="#Parser-1980"><span class="linenos">1980</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">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_table</span><span class="p">)</span>
-</span><span id="Parser-1981"><a href="#Parser-1981"><span class="linenos">1981</span></a> <span class="p">)</span>
-</span><span id="Parser-1982"><a href="#Parser-1982"><span class="linenos">1982</span></a>
-</span><span id="Parser-1983"><a href="#Parser-1983"><span class="linenos">1983</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-1984"><a href="#Parser-1984"><span class="linenos">1984</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-1985"><a href="#Parser-1985"><span class="linenos">1985</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-1986"><a href="#Parser-1986"><span class="linenos">1986</span></a>
-</span><span id="Parser-1987"><a href="#Parser-1987"><span class="linenos">1987</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-1988"><a href="#Parser-1988"><span class="linenos">1988</span></a>
-</span><span id="Parser-1989"><a href="#Parser-1989"><span class="linenos">1989</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-1990"><a href="#Parser-1990"><span class="linenos">1990</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-1991"><a href="#Parser-1991"><span class="linenos">1991</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-1992"><a href="#Parser-1992"><span class="linenos">1992</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_expression</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-1993"><a href="#Parser-1993"><span class="linenos">1993</span></a> <span class="p">)</span>
-</span><span id="Parser-1994"><a href="#Parser-1994"><span class="linenos">1994</span></a>
-</span><span id="Parser-1995"><a href="#Parser-1995"><span class="linenos">1995</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-1996"><a href="#Parser-1996"><span class="linenos">1996</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">this</span><span class="o">=</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="Parser-1997"><a href="#Parser-1997"><span class="linenos">1997</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-1998"><a href="#Parser-1998"><span class="linenos">1998</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-1999"><a href="#Parser-1999"><span class="linenos">1999</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-2000"><a href="#Parser-2000"><span class="linenos">2000</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
-</span><span id="Parser-2001"><a href="#Parser-2001"><span class="linenos">2001</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-2002"><a href="#Parser-2002"><span class="linenos">2002</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
-</span><span id="Parser-2003"><a href="#Parser-2003"><span class="linenos">2003</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-2004"><a href="#Parser-2004"><span class="linenos">2004</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
-</span><span id="Parser-2005"><a href="#Parser-2005"><span class="linenos">2005</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">this</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2006"><a href="#Parser-2006"><span class="linenos">2006</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2007"><a href="#Parser-2007"><span class="linenos">2007</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2008"><a href="#Parser-2008"><span class="linenos">2008</span></a>
-</span><span id="Parser-2009"><a href="#Parser-2009"><span class="linenos">2009</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-2010"><a href="#Parser-2010"><span class="linenos">2010</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="Parser-2011"><a href="#Parser-2011"><span class="linenos">2011</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-2012"><a href="#Parser-2012"><span class="linenos">2012</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; PAST LAST ROW&quot;</span>
-</span><span id="Parser-2013"><a href="#Parser-2013"><span class="linenos">2013</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-2014"><a href="#Parser-2014"><span class="linenos">2014</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO NEXT ROW&quot;</span>
-</span><span id="Parser-2015"><a href="#Parser-2015"><span class="linenos">2015</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-2016"><a href="#Parser-2016"><span class="linenos">2016</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-2017"><a href="#Parser-2017"><span class="linenos">2017</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-2018"><a href="#Parser-2018"><span class="linenos">2018</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-2019"><a href="#Parser-2019"><span class="linenos">2019</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">this</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2020"><a href="#Parser-2020"><span class="linenos">2020</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2021"><a href="#Parser-2021"><span class="linenos">2021</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2022"><a href="#Parser-2022"><span class="linenos">2022</span></a>
-</span><span id="Parser-2023"><a href="#Parser-2023"><span class="linenos">2023</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-2024"><a href="#Parser-2024"><span class="linenos">2024</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-2025"><a href="#Parser-2025"><span class="linenos">2025</span></a>
-</span><span id="Parser-2026"><a href="#Parser-2026"><span class="linenos">2026</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-2027"><a href="#Parser-2027"><span class="linenos">2027</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-2028"><a href="#Parser-2028"><span class="linenos">2028</span></a>
-</span><span id="Parser-2029"><a href="#Parser-2029"><span class="linenos">2029</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Parser-2030"><a href="#Parser-2030"><span class="linenos">2030</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-2031"><a href="#Parser-2031"><span class="linenos">2031</span></a>
-</span><span id="Parser-2032"><a href="#Parser-2032"><span class="linenos">2032</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-2033"><a href="#Parser-2033"><span class="linenos">2033</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-2034"><a href="#Parser-2034"><span class="linenos">2034</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Parser-2035"><a href="#Parser-2035"><span class="linenos">2035</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-2036"><a href="#Parser-2036"><span class="linenos">2036</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
-</span><span id="Parser-2037"><a href="#Parser-2037"><span class="linenos">2037</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-2038"><a href="#Parser-2038"><span class="linenos">2038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-2039"><a href="#Parser-2039"><span class="linenos">2039</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-2040"><a href="#Parser-2040"><span class="linenos">2040</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-2041"><a href="#Parser-2041"><span class="linenos">2041</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="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">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="Parser-2042"><a href="#Parser-2042"><span class="linenos">2042</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2043"><a href="#Parser-2043"><span class="linenos">2043</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2044"><a href="#Parser-2044"><span class="linenos">2044</span></a>
-</span><span id="Parser-2045"><a href="#Parser-2045"><span class="linenos">2045</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2046"><a href="#Parser-2046"><span class="linenos">2046</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-2047"><a href="#Parser-2047"><span class="linenos">2047</span></a> <span class="k">lambda</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-2048"><a href="#Parser-2048"><span class="linenos">2048</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="Parser-2049"><a href="#Parser-2049"><span class="linenos">2049</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-2050"><a href="#Parser-2050"><span class="linenos">2050</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-2051"><a href="#Parser-2051"><span class="linenos">2051</span></a> <span class="p">)</span>
-</span><span id="Parser-2052"><a href="#Parser-2052"><span class="linenos">2052</span></a> <span class="p">)</span>
-</span><span id="Parser-2053"><a href="#Parser-2053"><span class="linenos">2053</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-2054"><a href="#Parser-2054"><span class="linenos">2054</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2055"><a href="#Parser-2055"><span class="linenos">2055</span></a> <span class="p">)</span>
-</span><span id="Parser-2056"><a href="#Parser-2056"><span class="linenos">2056</span></a>
-</span><span id="Parser-2057"><a href="#Parser-2057"><span class="linenos">2057</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-2058"><a href="#Parser-2058"><span class="linenos">2058</span></a>
-</span><span id="Parser-2059"><a href="#Parser-2059"><span class="linenos">2059</span></a> <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-2060"><a href="#Parser-2060"><span class="linenos">2060</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="Parser-2061"><a href="#Parser-2061"><span class="linenos">2061</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-2062"><a href="#Parser-2062"><span class="linenos">2062</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-2063"><a href="#Parser-2063"><span class="linenos">2063</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="Parser-2064"><a href="#Parser-2064"><span class="linenos">2064</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="Parser-2065"><a href="#Parser-2065"><span class="linenos">2065</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="Parser-2066"><a href="#Parser-2066"><span class="linenos">2066</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="Parser-2067"><a href="#Parser-2067"><span class="linenos">2067</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="Parser-2068"><a href="#Parser-2068"><span class="linenos">2068</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-2069"><a href="#Parser-2069"><span class="linenos">2069</span></a> <span class="p">)</span>
-</span><span id="Parser-2070"><a href="#Parser-2070"><span class="linenos">2070</span></a>
-</span><span id="Parser-2071"><a href="#Parser-2071"><span class="linenos">2071</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2072"><a href="#Parser-2072"><span class="linenos">2072</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><span id="Parser-2073"><a href="#Parser-2073"><span class="linenos">2073</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-2074"><a href="#Parser-2074"><span class="linenos">2074</span></a>
-</span><span id="Parser-2075"><a href="#Parser-2075"><span class="linenos">2075</span></a> <span class="k">if</span> <span class="n">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="Parser-2076"><a href="#Parser-2076"><span class="linenos">2076</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-2077"><a href="#Parser-2077"><span class="linenos">2077</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2078"><a href="#Parser-2078"><span class="linenos">2078</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">cross_apply</span>
-</span><span id="Parser-2079"><a href="#Parser-2079"><span class="linenos">2079</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-2080"><a href="#Parser-2080"><span class="linenos">2080</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-2081"><a href="#Parser-2081"><span class="linenos">2081</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-2082"><a href="#Parser-2082"><span class="linenos">2082</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-2083"><a href="#Parser-2083"><span class="linenos">2083</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2084"><a href="#Parser-2084"><span class="linenos">2084</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2085"><a href="#Parser-2085"><span class="linenos">2085</span></a>
-</span><span id="Parser-2086"><a href="#Parser-2086"><span class="linenos">2086</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-2087"><a href="#Parser-2087"><span class="linenos">2087</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_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-2088"><a href="#Parser-2088"><span class="linenos">2088</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-2089"><a href="#Parser-2089"><span class="linenos">2089</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-2090"><a href="#Parser-2090"><span class="linenos">2090</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2091"><a href="#Parser-2091"><span class="linenos">2091</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-2092"><a href="#Parser-2092"><span class="linenos">2092</span></a> <span class="p">)</span>
-</span><span id="Parser-2093"><a href="#Parser-2093"><span class="linenos">2093</span></a>
-</span><span id="Parser-2094"><a href="#Parser-2094"><span class="linenos">2094</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">Expression</span><span class="p">]</span>
-</span><span id="Parser-2095"><a href="#Parser-2095"><span class="linenos">2095</span></a>
-</span><span id="Parser-2096"><a href="#Parser-2096"><span class="linenos">2096</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="Parser-2097"><a href="#Parser-2097"><span class="linenos">2097</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-2098"><a href="#Parser-2098"><span class="linenos">2098</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-2099"><a href="#Parser-2099"><span class="linenos">2099</span></a> <span class="n">table_alias</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">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 class="p">)</span>
-</span><span id="Parser-2100"><a href="#Parser-2100"><span class="linenos">2100</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2101"><a href="#Parser-2101"><span class="linenos">2101</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-1961"><a href="#Parser-1961"><span class="linenos">1961</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-1962"><a href="#Parser-1962"><span class="linenos">1962</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-1963"><a href="#Parser-1963"><span class="linenos">1963</span></a> <span class="n">hints</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</span><span class="p">)</span>
+</span><span id="Parser-1964"><a href="#Parser-1964"><span class="linenos">1964</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-1965"><a href="#Parser-1965"><span class="linenos">1965</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-1966"><a href="#Parser-1966"><span class="linenos">1966</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-1967"><a href="#Parser-1967"><span class="linenos">1967</span></a>
+</span><span id="Parser-1968"><a href="#Parser-1968"><span class="linenos">1968</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1969"><a href="#Parser-1969"><span class="linenos">1969</span></a>
+</span><span id="Parser-1970"><a href="#Parser-1970"><span class="linenos">1970</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-1971"><a href="#Parser-1971"><span class="linenos">1971</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-1972"><a href="#Parser-1972"><span class="linenos">1972</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1973"><a href="#Parser-1973"><span class="linenos">1973</span></a>
+</span><span id="Parser-1974"><a href="#Parser-1974"><span class="linenos">1974</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-1975"><a href="#Parser-1975"><span class="linenos">1975</span></a> <span class="n">unlogged</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">UNLOGGED</span><span class="p">)</span>
+</span><span id="Parser-1976"><a href="#Parser-1976"><span class="linenos">1976</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-1977"><a href="#Parser-1977"><span class="linenos">1977</span></a>
+</span><span id="Parser-1978"><a href="#Parser-1978"><span class="linenos">1978</span></a> <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-1979"><a href="#Parser-1979"><span class="linenos">1979</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-1980"><a href="#Parser-1980"><span class="linenos">1980</span></a> <span class="p">)</span>
+</span><span id="Parser-1981"><a href="#Parser-1981"><span class="linenos">1981</span></a>
+</span><span id="Parser-1982"><a href="#Parser-1982"><span class="linenos">1982</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-1983"><a href="#Parser-1983"><span class="linenos">1983</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">FROM</span><span class="p">):</span>
+</span><span id="Parser-1984"><a href="#Parser-1984"><span class="linenos">1984</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1985"><a href="#Parser-1985"><span class="linenos">1985</span></a>
+</span><span id="Parser-1986"><a href="#Parser-1986"><span class="linenos">1986</span></a> <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-1987"><a href="#Parser-1987"><span class="linenos">1987</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">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_table</span><span class="p">)</span>
+</span><span id="Parser-1988"><a href="#Parser-1988"><span class="linenos">1988</span></a> <span class="p">)</span>
+</span><span id="Parser-1989"><a href="#Parser-1989"><span class="linenos">1989</span></a>
+</span><span id="Parser-1990"><a href="#Parser-1990"><span class="linenos">1990</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-1991"><a href="#Parser-1991"><span class="linenos">1991</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-1992"><a href="#Parser-1992"><span class="linenos">1992</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-1993"><a href="#Parser-1993"><span class="linenos">1993</span></a>
+</span><span id="Parser-1994"><a href="#Parser-1994"><span class="linenos">1994</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-1995"><a href="#Parser-1995"><span class="linenos">1995</span></a>
+</span><span id="Parser-1996"><a href="#Parser-1996"><span class="linenos">1996</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-1997"><a href="#Parser-1997"><span class="linenos">1997</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-1998"><a href="#Parser-1998"><span class="linenos">1998</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-1999"><a href="#Parser-1999"><span class="linenos">1999</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_expression</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-2000"><a href="#Parser-2000"><span class="linenos">2000</span></a> <span class="p">)</span>
+</span><span id="Parser-2001"><a href="#Parser-2001"><span class="linenos">2001</span></a>
+</span><span id="Parser-2002"><a href="#Parser-2002"><span class="linenos">2002</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-2003"><a href="#Parser-2003"><span class="linenos">2003</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">this</span><span class="o">=</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="Parser-2004"><a href="#Parser-2004"><span class="linenos">2004</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-2005"><a href="#Parser-2005"><span class="linenos">2005</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-2006"><a href="#Parser-2006"><span class="linenos">2006</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-2007"><a href="#Parser-2007"><span class="linenos">2007</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
+</span><span id="Parser-2008"><a href="#Parser-2008"><span class="linenos">2008</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-2009"><a href="#Parser-2009"><span class="linenos">2009</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
+</span><span id="Parser-2010"><a href="#Parser-2010"><span class="linenos">2010</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-2011"><a href="#Parser-2011"><span class="linenos">2011</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
+</span><span id="Parser-2012"><a href="#Parser-2012"><span class="linenos">2012</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">this</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2013"><a href="#Parser-2013"><span class="linenos">2013</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2014"><a href="#Parser-2014"><span class="linenos">2014</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2015"><a href="#Parser-2015"><span class="linenos">2015</span></a>
+</span><span id="Parser-2016"><a href="#Parser-2016"><span class="linenos">2016</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-2017"><a href="#Parser-2017"><span class="linenos">2017</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="Parser-2018"><a href="#Parser-2018"><span class="linenos">2018</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-2019"><a href="#Parser-2019"><span class="linenos">2019</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; PAST LAST ROW&quot;</span>
+</span><span id="Parser-2020"><a href="#Parser-2020"><span class="linenos">2020</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-2021"><a href="#Parser-2021"><span class="linenos">2021</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO NEXT ROW&quot;</span>
+</span><span id="Parser-2022"><a href="#Parser-2022"><span class="linenos">2022</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-2023"><a href="#Parser-2023"><span class="linenos">2023</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-2024"><a href="#Parser-2024"><span class="linenos">2024</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-2025"><a href="#Parser-2025"><span class="linenos">2025</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-2026"><a href="#Parser-2026"><span class="linenos">2026</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">this</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2027"><a href="#Parser-2027"><span class="linenos">2027</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2028"><a href="#Parser-2028"><span class="linenos">2028</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2029"><a href="#Parser-2029"><span class="linenos">2029</span></a>
+</span><span id="Parser-2030"><a href="#Parser-2030"><span class="linenos">2030</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-2031"><a href="#Parser-2031"><span class="linenos">2031</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-2032"><a href="#Parser-2032"><span class="linenos">2032</span></a>
+</span><span id="Parser-2033"><a href="#Parser-2033"><span class="linenos">2033</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-2034"><a href="#Parser-2034"><span class="linenos">2034</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-2035"><a href="#Parser-2035"><span class="linenos">2035</span></a>
+</span><span id="Parser-2036"><a href="#Parser-2036"><span class="linenos">2036</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Parser-2037"><a href="#Parser-2037"><span class="linenos">2037</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-2038"><a href="#Parser-2038"><span class="linenos">2038</span></a>
+</span><span id="Parser-2039"><a href="#Parser-2039"><span class="linenos">2039</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-2040"><a href="#Parser-2040"><span class="linenos">2040</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-2041"><a href="#Parser-2041"><span class="linenos">2041</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Parser-2042"><a href="#Parser-2042"><span class="linenos">2042</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-2043"><a href="#Parser-2043"><span class="linenos">2043</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="Parser-2044"><a href="#Parser-2044"><span class="linenos">2044</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-2045"><a href="#Parser-2045"><span class="linenos">2045</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-2046"><a href="#Parser-2046"><span class="linenos">2046</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-2047"><a href="#Parser-2047"><span class="linenos">2047</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-2048"><a href="#Parser-2048"><span class="linenos">2048</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="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">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="Parser-2049"><a href="#Parser-2049"><span class="linenos">2049</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2050"><a href="#Parser-2050"><span class="linenos">2050</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2051"><a href="#Parser-2051"><span class="linenos">2051</span></a>
+</span><span id="Parser-2052"><a href="#Parser-2052"><span class="linenos">2052</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2053"><a href="#Parser-2053"><span class="linenos">2053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-2054"><a href="#Parser-2054"><span class="linenos">2054</span></a> <span class="k">lambda</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-2055"><a href="#Parser-2055"><span class="linenos">2055</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
+</span><span id="Parser-2056"><a href="#Parser-2056"><span class="linenos">2056</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-2057"><a href="#Parser-2057"><span class="linenos">2057</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-2058"><a href="#Parser-2058"><span class="linenos">2058</span></a> <span class="p">)</span>
+</span><span id="Parser-2059"><a href="#Parser-2059"><span class="linenos">2059</span></a> <span class="p">)</span>
+</span><span id="Parser-2060"><a href="#Parser-2060"><span class="linenos">2060</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-2061"><a href="#Parser-2061"><span class="linenos">2061</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2062"><a href="#Parser-2062"><span class="linenos">2062</span></a> <span class="p">)</span>
+</span><span id="Parser-2063"><a href="#Parser-2063"><span class="linenos">2063</span></a>
+</span><span id="Parser-2064"><a href="#Parser-2064"><span class="linenos">2064</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-2065"><a href="#Parser-2065"><span class="linenos">2065</span></a>
+</span><span id="Parser-2066"><a href="#Parser-2066"><span class="linenos">2066</span></a> <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-2067"><a href="#Parser-2067"><span class="linenos">2067</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="Parser-2068"><a href="#Parser-2068"><span class="linenos">2068</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-2069"><a href="#Parser-2069"><span class="linenos">2069</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-2070"><a href="#Parser-2070"><span class="linenos">2070</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="Parser-2071"><a href="#Parser-2071"><span class="linenos">2071</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="Parser-2072"><a href="#Parser-2072"><span class="linenos">2072</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="Parser-2073"><a href="#Parser-2073"><span class="linenos">2073</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="Parser-2074"><a href="#Parser-2074"><span class="linenos">2074</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
+</span><span id="Parser-2075"><a href="#Parser-2075"><span class="linenos">2075</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-2076"><a href="#Parser-2076"><span class="linenos">2076</span></a> <span class="p">)</span>
+</span><span id="Parser-2077"><a href="#Parser-2077"><span class="linenos">2077</span></a>
+</span><span id="Parser-2078"><a href="#Parser-2078"><span class="linenos">2078</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2079"><a href="#Parser-2079"><span class="linenos">2079</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><span id="Parser-2080"><a href="#Parser-2080"><span class="linenos">2080</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-2081"><a href="#Parser-2081"><span class="linenos">2081</span></a>
+</span><span id="Parser-2082"><a href="#Parser-2082"><span class="linenos">2082</span></a> <span class="k">if</span> <span class="n">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">:</span>
+</span><span id="Parser-2083"><a href="#Parser-2083"><span class="linenos">2083</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-2084"><a href="#Parser-2084"><span class="linenos">2084</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2085"><a href="#Parser-2085"><span class="linenos">2085</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">cross_apply</span>
+</span><span id="Parser-2086"><a href="#Parser-2086"><span class="linenos">2086</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-2087"><a href="#Parser-2087"><span class="linenos">2087</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-2088"><a href="#Parser-2088"><span class="linenos">2088</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-2089"><a href="#Parser-2089"><span class="linenos">2089</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-2090"><a href="#Parser-2090"><span class="linenos">2090</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2091"><a href="#Parser-2091"><span class="linenos">2091</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2092"><a href="#Parser-2092"><span class="linenos">2092</span></a>
+</span><span id="Parser-2093"><a href="#Parser-2093"><span class="linenos">2093</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-2094"><a href="#Parser-2094"><span class="linenos">2094</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_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-2095"><a href="#Parser-2095"><span class="linenos">2095</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-2096"><a href="#Parser-2096"><span class="linenos">2096</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-2097"><a href="#Parser-2097"><span class="linenos">2097</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2098"><a href="#Parser-2098"><span class="linenos">2098</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-2099"><a href="#Parser-2099"><span class="linenos">2099</span></a> <span class="p">)</span>
+</span><span id="Parser-2100"><a href="#Parser-2100"><span class="linenos">2100</span></a>
+</span><span id="Parser-2101"><a href="#Parser-2101"><span class="linenos">2101</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">Expression</span><span class="p">]</span>
</span><span id="Parser-2102"><a href="#Parser-2102"><span class="linenos">2102</span></a>
-</span><span id="Parser-2103"><a href="#Parser-2103"><span class="linenos">2103</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-2104"><a href="#Parser-2104"><span class="linenos">2104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="Parser-2105"><a href="#Parser-2105"><span class="linenos">2105</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2106"><a href="#Parser-2106"><span class="linenos">2106</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
-</span><span id="Parser-2107"><a href="#Parser-2107"><span class="linenos">2107</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
-</span><span id="Parser-2108"><a href="#Parser-2108"><span class="linenos">2108</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-2109"><a href="#Parser-2109"><span class="linenos">2109</span></a> <span class="p">)</span>
-</span><span id="Parser-2110"><a href="#Parser-2110"><span class="linenos">2110</span></a>
-</span><span id="Parser-2111"><a href="#Parser-2111"><span class="linenos">2111</span></a> <span class="k">return</span> <span class="n">expression</span>
-</span><span id="Parser-2112"><a href="#Parser-2112"><span class="linenos">2112</span></a>
-</span><span id="Parser-2113"><a href="#Parser-2113"><span class="linenos">2113</span></a> <span class="k">def</span> <span class="nf">_parse_join_side_and_kind</span><span class="p">(</span>
-</span><span id="Parser-2114"><a href="#Parser-2114"><span class="linenos">2114</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2115"><a href="#Parser-2115"><span class="linenos">2115</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-2116"><a href="#Parser-2116"><span class="linenos">2116</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-2117"><a href="#Parser-2117"><span class="linenos">2117</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">NATURAL</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-2118"><a href="#Parser-2118"><span class="linenos">2118</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-2119"><a href="#Parser-2119"><span class="linenos">2119</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-2120"><a href="#Parser-2120"><span class="linenos">2120</span></a> <span class="p">)</span>
-</span><span id="Parser-2121"><a href="#Parser-2121"><span class="linenos">2121</span></a>
-</span><span id="Parser-2122"><a href="#Parser-2122"><span class="linenos">2122</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2123"><a href="#Parser-2123"><span class="linenos">2123</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-2124"><a href="#Parser-2124"><span class="linenos">2124</span></a> <span class="n">natural</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_side_and_kind</span><span class="p">()</span>
-</span><span id="Parser-2125"><a href="#Parser-2125"><span class="linenos">2125</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-2126"><a href="#Parser-2126"><span class="linenos">2126</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-2127"><a href="#Parser-2127"><span class="linenos">2127</span></a>
-</span><span id="Parser-2128"><a href="#Parser-2128"><span class="linenos">2128</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-2129"><a href="#Parser-2129"><span class="linenos">2129</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-2130"><a href="#Parser-2130"><span class="linenos">2130</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2131"><a href="#Parser-2131"><span class="linenos">2131</span></a> <span class="n">natural</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2132"><a href="#Parser-2132"><span class="linenos">2132</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2133"><a href="#Parser-2133"><span class="linenos">2133</span></a>
-</span><span id="Parser-2134"><a href="#Parser-2134"><span class="linenos">2134</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-2135"><a href="#Parser-2135"><span class="linenos">2135</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-2136"><a href="#Parser-2136"><span class="linenos">2136</span></a>
-</span><span id="Parser-2137"><a href="#Parser-2137"><span class="linenos">2137</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-2138"><a href="#Parser-2138"><span class="linenos">2138</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2139"><a href="#Parser-2139"><span class="linenos">2139</span></a>
-</span><span id="Parser-2140"><a href="#Parser-2140"><span class="linenos">2140</span></a> <span class="k">if</span> <span class="n">outer_apply</span><span class="p">:</span>
-</span><span id="Parser-2141"><a href="#Parser-2141"><span class="linenos">2141</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">Token</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="s2">&quot;LEFT&quot;</span><span class="p">)</span>
-</span><span id="Parser-2142"><a href="#Parser-2142"><span class="linenos">2142</span></a>
-</span><span id="Parser-2143"><a href="#Parser-2143"><span class="linenos">2143</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><span id="Parser-2144"><a href="#Parser-2144"><span class="linenos">2144</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2145"><a href="#Parser-2145"><span class="linenos">2145</span></a> <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><span id="Parser-2103"><a href="#Parser-2103"><span class="linenos">2103</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="Parser-2104"><a href="#Parser-2104"><span class="linenos">2104</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-2105"><a href="#Parser-2105"><span class="linenos">2105</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-2106"><a href="#Parser-2106"><span class="linenos">2106</span></a> <span class="n">table_alias</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">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 class="p">)</span>
+</span><span id="Parser-2107"><a href="#Parser-2107"><span class="linenos">2107</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2108"><a href="#Parser-2108"><span class="linenos">2108</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-2109"><a href="#Parser-2109"><span class="linenos">2109</span></a>
+</span><span id="Parser-2110"><a href="#Parser-2110"><span class="linenos">2110</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-2111"><a href="#Parser-2111"><span class="linenos">2111</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="Parser-2112"><a href="#Parser-2112"><span class="linenos">2112</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2113"><a href="#Parser-2113"><span class="linenos">2113</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
+</span><span id="Parser-2114"><a href="#Parser-2114"><span class="linenos">2114</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
+</span><span id="Parser-2115"><a href="#Parser-2115"><span class="linenos">2115</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-2116"><a href="#Parser-2116"><span class="linenos">2116</span></a> <span class="p">)</span>
+</span><span id="Parser-2117"><a href="#Parser-2117"><span class="linenos">2117</span></a>
+</span><span id="Parser-2118"><a href="#Parser-2118"><span class="linenos">2118</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Parser-2119"><a href="#Parser-2119"><span class="linenos">2119</span></a>
+</span><span id="Parser-2120"><a href="#Parser-2120"><span class="linenos">2120</span></a> <span class="k">def</span> <span class="nf">_parse_join_side_and_kind</span><span class="p">(</span>
+</span><span id="Parser-2121"><a href="#Parser-2121"><span class="linenos">2121</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2122"><a href="#Parser-2122"><span class="linenos">2122</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-2123"><a href="#Parser-2123"><span class="linenos">2123</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-2124"><a href="#Parser-2124"><span class="linenos">2124</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">NATURAL</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-2125"><a href="#Parser-2125"><span class="linenos">2125</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-2126"><a href="#Parser-2126"><span class="linenos">2126</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-2127"><a href="#Parser-2127"><span class="linenos">2127</span></a> <span class="p">)</span>
+</span><span id="Parser-2128"><a href="#Parser-2128"><span class="linenos">2128</span></a>
+</span><span id="Parser-2129"><a href="#Parser-2129"><span class="linenos">2129</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2130"><a href="#Parser-2130"><span class="linenos">2130</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-2131"><a href="#Parser-2131"><span class="linenos">2131</span></a> <span class="n">natural</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_side_and_kind</span><span class="p">()</span>
+</span><span id="Parser-2132"><a href="#Parser-2132"><span class="linenos">2132</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-2133"><a href="#Parser-2133"><span class="linenos">2133</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-2134"><a href="#Parser-2134"><span class="linenos">2134</span></a>
+</span><span id="Parser-2135"><a href="#Parser-2135"><span class="linenos">2135</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-2136"><a href="#Parser-2136"><span class="linenos">2136</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-2137"><a href="#Parser-2137"><span class="linenos">2137</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2138"><a href="#Parser-2138"><span class="linenos">2138</span></a> <span class="n">natural</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2139"><a href="#Parser-2139"><span class="linenos">2139</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2140"><a href="#Parser-2140"><span class="linenos">2140</span></a>
+</span><span id="Parser-2141"><a href="#Parser-2141"><span class="linenos">2141</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-2142"><a href="#Parser-2142"><span class="linenos">2142</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-2143"><a href="#Parser-2143"><span class="linenos">2143</span></a>
+</span><span id="Parser-2144"><a href="#Parser-2144"><span class="linenos">2144</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-2145"><a href="#Parser-2145"><span class="linenos">2145</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2146"><a href="#Parser-2146"><span class="linenos">2146</span></a>
-</span><span id="Parser-2147"><a href="#Parser-2147"><span class="linenos">2147</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
-</span><span id="Parser-2148"><a href="#Parser-2148"><span class="linenos">2148</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;natural&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2149"><a href="#Parser-2149"><span class="linenos">2149</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Parser-2150"><a href="#Parser-2150"><span class="linenos">2150</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-2151"><a href="#Parser-2151"><span class="linenos">2151</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-2152"><a href="#Parser-2152"><span class="linenos">2152</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-2153"><a href="#Parser-2153"><span class="linenos">2153</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="Parser-2154"><a href="#Parser-2154"><span class="linenos">2154</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-2155"><a href="#Parser-2155"><span class="linenos">2155</span></a>
-</span><span id="Parser-2156"><a href="#Parser-2156"><span class="linenos">2156</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2157"><a href="#Parser-2157"><span class="linenos">2157</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-2158"><a href="#Parser-2158"><span class="linenos">2158</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-2159"><a href="#Parser-2159"><span class="linenos">2159</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-2160"><a href="#Parser-2160"><span class="linenos">2160</span></a>
-</span><span id="Parser-2161"><a href="#Parser-2161"><span class="linenos">2161</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-2147"><a href="#Parser-2147"><span class="linenos">2147</span></a> <span class="k">if</span> <span class="n">outer_apply</span><span class="p">:</span>
+</span><span id="Parser-2148"><a href="#Parser-2148"><span class="linenos">2148</span></a> <span class="n">side</span> <span class="o">=</span> <span class="n">Token</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="s2">&quot;LEFT&quot;</span><span class="p">)</span>
+</span><span id="Parser-2149"><a href="#Parser-2149"><span class="linenos">2149</span></a>
+</span><span id="Parser-2150"><a href="#Parser-2150"><span class="linenos">2150</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><span id="Parser-2151"><a href="#Parser-2151"><span class="linenos">2151</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2152"><a href="#Parser-2152"><span class="linenos">2152</span></a> <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><span id="Parser-2153"><a href="#Parser-2153"><span class="linenos">2153</span></a>
+</span><span id="Parser-2154"><a href="#Parser-2154"><span class="linenos">2154</span></a> <span class="k">if</span> <span class="n">natural</span><span class="p">:</span>
+</span><span id="Parser-2155"><a href="#Parser-2155"><span class="linenos">2155</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;natural&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2156"><a href="#Parser-2156"><span class="linenos">2156</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Parser-2157"><a href="#Parser-2157"><span class="linenos">2157</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-2158"><a href="#Parser-2158"><span class="linenos">2158</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-2159"><a href="#Parser-2159"><span class="linenos">2159</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-2160"><a href="#Parser-2160"><span class="linenos">2160</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="Parser-2161"><a href="#Parser-2161"><span class="linenos">2161</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-2162"><a href="#Parser-2162"><span class="linenos">2162</span></a>
-</span><span id="Parser-2163"><a href="#Parser-2163"><span class="linenos">2163</span></a> <span class="k">def</span> <span class="nf">_parse_index</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-2164"><a href="#Parser-2164"><span class="linenos">2164</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-2165"><a href="#Parser-2165"><span class="linenos">2165</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-2166"><a href="#Parser-2166"><span class="linenos">2166</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-2163"><a href="#Parser-2163"><span class="linenos">2163</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2164"><a href="#Parser-2164"><span class="linenos">2164</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-2165"><a href="#Parser-2165"><span class="linenos">2165</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-2166"><a href="#Parser-2166"><span class="linenos">2166</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-2167"><a href="#Parser-2167"><span class="linenos">2167</span></a>
-</span><span id="Parser-2168"><a href="#Parser-2168"><span class="linenos">2168</span></a> <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-2169"><a href="#Parser-2169"><span class="linenos">2169</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="Parser-2170"><a href="#Parser-2170"><span class="linenos">2170</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="Parser-2171"><a href="#Parser-2171"><span class="linenos">2171</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 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
-</span><span id="Parser-2172"><a href="#Parser-2172"><span class="linenos">2172</span></a> <span class="n">columns</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-2173"><a href="#Parser-2173"><span class="linenos">2173</span></a> <span class="p">)</span>
+</span><span id="Parser-2168"><a href="#Parser-2168"><span class="linenos">2168</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-2169"><a href="#Parser-2169"><span class="linenos">2169</span></a>
+</span><span id="Parser-2170"><a href="#Parser-2170"><span class="linenos">2170</span></a> <span class="k">def</span> <span class="nf">_parse_index</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-2171"><a href="#Parser-2171"><span class="linenos">2171</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-2172"><a href="#Parser-2172"><span class="linenos">2172</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-2173"><a href="#Parser-2173"><span class="linenos">2173</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-2174"><a href="#Parser-2174"><span class="linenos">2174</span></a>
-</span><span id="Parser-2175"><a href="#Parser-2175"><span class="linenos">2175</span></a> <span class="k">def</span> <span class="nf">_parse_create_table_index</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2176"><a href="#Parser-2176"><span class="linenos">2176</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-2177"><a href="#Parser-2177"><span class="linenos">2177</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-2178"><a href="#Parser-2178"><span class="linenos">2178</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-2179"><a href="#Parser-2179"><span class="linenos">2179</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-2180"><a href="#Parser-2180"><span class="linenos">2180</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2181"><a href="#Parser-2181"><span class="linenos">2181</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-2182"><a href="#Parser-2182"><span class="linenos">2182</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2183"><a href="#Parser-2183"><span class="linenos">2183</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2184"><a href="#Parser-2184"><span class="linenos">2184</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-2185"><a href="#Parser-2185"><span class="linenos">2185</span></a> <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-2186"><a href="#Parser-2186"><span class="linenos">2186</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="Parser-2187"><a href="#Parser-2187"><span class="linenos">2187</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="Parser-2188"><a href="#Parser-2188"><span class="linenos">2188</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="Parser-2189"><a href="#Parser-2189"><span class="linenos">2189</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="Parser-2190"><a href="#Parser-2190"><span class="linenos">2190</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="Parser-2191"><a href="#Parser-2191"><span class="linenos">2191</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="Parser-2192"><a href="#Parser-2192"><span class="linenos">2192</span></a> <span class="p">)</span>
-</span><span id="Parser-2193"><a href="#Parser-2193"><span class="linenos">2193</span></a>
-</span><span id="Parser-2194"><a href="#Parser-2194"><span class="linenos">2194</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-2195"><a href="#Parser-2195"><span class="linenos">2195</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2196"><a href="#Parser-2196"><span class="linenos">2196</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2197"><a href="#Parser-2197"><span class="linenos">2197</span></a>
-</span><span id="Parser-2198"><a href="#Parser-2198"><span class="linenos">2198</span></a> <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2199"><a href="#Parser-2199"><span class="linenos">2199</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><span id="Parser-2200"><a href="#Parser-2200"><span class="linenos">2200</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-2201"><a href="#Parser-2201"><span class="linenos">2201</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-2202"><a href="#Parser-2202"><span class="linenos">2202</span></a> <span class="p">)</span>
-</span><span id="Parser-2203"><a href="#Parser-2203"><span class="linenos">2203</span></a>
-</span><span id="Parser-2204"><a href="#Parser-2204"><span class="linenos">2204</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-2205"><a href="#Parser-2205"><span class="linenos">2205</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="Parser-2206"><a href="#Parser-2206"><span class="linenos">2206</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="Parser-2207"><a href="#Parser-2207"><span class="linenos">2207</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 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_id_var</span><span class="p">())</span>
-</span><span id="Parser-2208"><a href="#Parser-2208"><span class="linenos">2208</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2209"><a href="#Parser-2209"><span class="linenos">2209</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="Parser-2210"><a href="#Parser-2210"><span class="linenos">2210</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="Parser-2211"><a href="#Parser-2211"><span class="linenos">2211</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><span id="Parser-2212"><a href="#Parser-2212"><span class="linenos">2212</span></a>
-</span><span id="Parser-2213"><a href="#Parser-2213"><span class="linenos">2213</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
-</span><span id="Parser-2214"><a href="#Parser-2214"><span class="linenos">2214</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-2215"><a href="#Parser-2215"><span class="linenos">2215</span></a>
-</span><span id="Parser-2216"><a href="#Parser-2216"><span class="linenos">2216</span></a> <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-2217"><a href="#Parser-2217"><span class="linenos">2217</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-2218"><a href="#Parser-2218"><span class="linenos">2218</span></a> <span class="p">)</span>
+</span><span id="Parser-2175"><a href="#Parser-2175"><span class="linenos">2175</span></a> <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-2176"><a href="#Parser-2176"><span class="linenos">2176</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="Parser-2177"><a href="#Parser-2177"><span class="linenos">2177</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="Parser-2178"><a href="#Parser-2178"><span class="linenos">2178</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 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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
+</span><span id="Parser-2179"><a href="#Parser-2179"><span class="linenos">2179</span></a> <span class="n">columns</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-2180"><a href="#Parser-2180"><span class="linenos">2180</span></a> <span class="p">)</span>
+</span><span id="Parser-2181"><a href="#Parser-2181"><span class="linenos">2181</span></a>
+</span><span id="Parser-2182"><a href="#Parser-2182"><span class="linenos">2182</span></a> <span class="k">def</span> <span class="nf">_parse_create_table_index</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2183"><a href="#Parser-2183"><span class="linenos">2183</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-2184"><a href="#Parser-2184"><span class="linenos">2184</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-2185"><a href="#Parser-2185"><span class="linenos">2185</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-2186"><a href="#Parser-2186"><span class="linenos">2186</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-2187"><a href="#Parser-2187"><span class="linenos">2187</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2188"><a href="#Parser-2188"><span class="linenos">2188</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-2189"><a href="#Parser-2189"><span class="linenos">2189</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2190"><a href="#Parser-2190"><span class="linenos">2190</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2191"><a href="#Parser-2191"><span class="linenos">2191</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-2192"><a href="#Parser-2192"><span class="linenos">2192</span></a> <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-2193"><a href="#Parser-2193"><span class="linenos">2193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="Parser-2194"><a href="#Parser-2194"><span class="linenos">2194</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="Parser-2195"><a href="#Parser-2195"><span class="linenos">2195</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="Parser-2196"><a href="#Parser-2196"><span class="linenos">2196</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="Parser-2197"><a href="#Parser-2197"><span class="linenos">2197</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="Parser-2198"><a href="#Parser-2198"><span class="linenos">2198</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="Parser-2199"><a href="#Parser-2199"><span class="linenos">2199</span></a> <span class="p">)</span>
+</span><span id="Parser-2200"><a href="#Parser-2200"><span class="linenos">2200</span></a>
+</span><span id="Parser-2201"><a href="#Parser-2201"><span class="linenos">2201</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-2202"><a href="#Parser-2202"><span class="linenos">2202</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2203"><a href="#Parser-2203"><span class="linenos">2203</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2204"><a href="#Parser-2204"><span class="linenos">2204</span></a>
+</span><span id="Parser-2205"><a href="#Parser-2205"><span class="linenos">2205</span></a> <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2206"><a href="#Parser-2206"><span class="linenos">2206</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><span id="Parser-2207"><a href="#Parser-2207"><span class="linenos">2207</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-2208"><a href="#Parser-2208"><span class="linenos">2208</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-2209"><a href="#Parser-2209"><span class="linenos">2209</span></a> <span class="p">)</span>
+</span><span id="Parser-2210"><a href="#Parser-2210"><span class="linenos">2210</span></a>
+</span><span id="Parser-2211"><a href="#Parser-2211"><span class="linenos">2211</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-2212"><a href="#Parser-2212"><span class="linenos">2212</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="Parser-2213"><a href="#Parser-2213"><span class="linenos">2213</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="Parser-2214"><a href="#Parser-2214"><span class="linenos">2214</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 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_id_var</span><span class="p">())</span>
+</span><span id="Parser-2215"><a href="#Parser-2215"><span class="linenos">2215</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2216"><a href="#Parser-2216"><span class="linenos">2216</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="Parser-2217"><a href="#Parser-2217"><span class="linenos">2217</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Parser-2218"><a href="#Parser-2218"><span class="linenos">2218</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><span id="Parser-2219"><a href="#Parser-2219"><span class="linenos">2219</span></a>
-</span><span id="Parser-2220"><a href="#Parser-2220"><span class="linenos">2220</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="Parser-2221"><a href="#Parser-2221"><span class="linenos">2221</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2222"><a href="#Parser-2222"><span class="linenos">2222</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-2223"><a href="#Parser-2223"><span class="linenos">2223</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-2224"><a href="#Parser-2224"><span class="linenos">2224</span></a>
-</span><span id="Parser-2225"><a href="#Parser-2225"><span class="linenos">2225</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="Parser-2226"><a href="#Parser-2226"><span class="linenos">2226</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="Parser-2227"><a href="#Parser-2227"><span class="linenos">2227</span></a>
-</span><span id="Parser-2228"><a href="#Parser-2228"><span class="linenos">2228</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-2229"><a href="#Parser-2229"><span class="linenos">2229</span></a>
-</span><span id="Parser-2230"><a href="#Parser-2230"><span class="linenos">2230</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Parser-2231"><a href="#Parser-2231"><span class="linenos">2231</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="Parser-2232"><a href="#Parser-2232"><span class="linenos">2232</span></a>
-</span><span id="Parser-2233"><a href="#Parser-2233"><span class="linenos">2233</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-2220"><a href="#Parser-2220"><span class="linenos">2220</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
+</span><span id="Parser-2221"><a href="#Parser-2221"><span class="linenos">2221</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-2222"><a href="#Parser-2222"><span class="linenos">2222</span></a>
+</span><span id="Parser-2223"><a href="#Parser-2223"><span class="linenos">2223</span></a> <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-2224"><a href="#Parser-2224"><span class="linenos">2224</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-2225"><a href="#Parser-2225"><span class="linenos">2225</span></a> <span class="p">)</span>
+</span><span id="Parser-2226"><a href="#Parser-2226"><span class="linenos">2226</span></a>
+</span><span id="Parser-2227"><a href="#Parser-2227"><span class="linenos">2227</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="Parser-2228"><a href="#Parser-2228"><span class="linenos">2228</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2229"><a href="#Parser-2229"><span class="linenos">2229</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-2230"><a href="#Parser-2230"><span class="linenos">2230</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-2231"><a href="#Parser-2231"><span class="linenos">2231</span></a>
+</span><span id="Parser-2232"><a href="#Parser-2232"><span class="linenos">2232</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="Parser-2233"><a href="#Parser-2233"><span class="linenos">2233</span></a> <span class="k">return</span> <span class="n">lateral</span>
</span><span id="Parser-2234"><a href="#Parser-2234"><span class="linenos">2234</span></a>
-</span><span id="Parser-2235"><a href="#Parser-2235"><span class="linenos">2235</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="Parser-2236"><a href="#Parser-2236"><span class="linenos">2236</span></a> <span class="k">return</span> <span class="n">values</span>
-</span><span id="Parser-2237"><a href="#Parser-2237"><span class="linenos">2237</span></a>
-</span><span id="Parser-2238"><a href="#Parser-2238"><span class="linenos">2238</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-2235"><a href="#Parser-2235"><span class="linenos">2235</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-2236"><a href="#Parser-2236"><span class="linenos">2236</span></a>
+</span><span id="Parser-2237"><a href="#Parser-2237"><span class="linenos">2237</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-2238"><a href="#Parser-2238"><span class="linenos">2238</span></a> <span class="k">return</span> <span class="n">unnest</span>
</span><span id="Parser-2239"><a href="#Parser-2239"><span class="linenos">2239</span></a>
-</span><span id="Parser-2240"><a href="#Parser-2240"><span class="linenos">2240</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="Parser-2241"><a href="#Parser-2241"><span class="linenos">2241</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-2242"><a href="#Parser-2242"><span class="linenos">2242</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-2243"><a href="#Parser-2243"><span class="linenos">2243</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="Parser-2240"><a href="#Parser-2240"><span class="linenos">2240</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-2241"><a href="#Parser-2241"><span class="linenos">2241</span></a>
+</span><span id="Parser-2242"><a href="#Parser-2242"><span class="linenos">2242</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="Parser-2243"><a href="#Parser-2243"><span class="linenos">2243</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="Parser-2244"><a href="#Parser-2244"><span class="linenos">2244</span></a>
-</span><span id="Parser-2245"><a href="#Parser-2245"><span class="linenos">2245</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_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="Parser-2245"><a href="#Parser-2245"><span class="linenos">2245</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-2246"><a href="#Parser-2246"><span class="linenos">2246</span></a>
-</span><span id="Parser-2247"><a href="#Parser-2247"><span class="linenos">2247</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="Parser-2248"><a href="#Parser-2248"><span class="linenos">2248</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-2249"><a href="#Parser-2249"><span class="linenos">2249</span></a>
-</span><span id="Parser-2250"><a href="#Parser-2250"><span class="linenos">2250</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
-</span><span id="Parser-2251"><a href="#Parser-2251"><span class="linenos">2251</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-2252"><a href="#Parser-2252"><span class="linenos">2252</span></a>
-</span><span id="Parser-2253"><a href="#Parser-2253"><span class="linenos">2253</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-2254"><a href="#Parser-2254"><span class="linenos">2254</span></a>
-</span><span id="Parser-2255"><a href="#Parser-2255"><span class="linenos">2255</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2256"><a href="#Parser-2256"><span class="linenos">2256</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-2257"><a href="#Parser-2257"><span class="linenos">2257</span></a>
-</span><span id="Parser-2258"><a href="#Parser-2258"><span class="linenos">2258</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-2259"><a href="#Parser-2259"><span class="linenos">2259</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-2260"><a href="#Parser-2260"><span class="linenos">2260</span></a>
-</span><span id="Parser-2261"><a href="#Parser-2261"><span class="linenos">2261</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-2262"><a href="#Parser-2262"><span class="linenos">2262</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
-</span><span id="Parser-2263"><a href="#Parser-2263"><span class="linenos">2263</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">,</span>
-</span><span id="Parser-2264"><a href="#Parser-2264"><span class="linenos">2264</span></a> <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_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-2265"><a href="#Parser-2265"><span class="linenos">2265</span></a> <span class="p">)</span>
-</span><span id="Parser-2266"><a href="#Parser-2266"><span class="linenos">2266</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-2247"><a href="#Parser-2247"><span class="linenos">2247</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="Parser-2248"><a href="#Parser-2248"><span class="linenos">2248</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-2249"><a href="#Parser-2249"><span class="linenos">2249</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-2250"><a href="#Parser-2250"><span class="linenos">2250</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="Parser-2251"><a href="#Parser-2251"><span class="linenos">2251</span></a>
+</span><span id="Parser-2252"><a href="#Parser-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">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="Parser-2253"><a href="#Parser-2253"><span class="linenos">2253</span></a>
+</span><span id="Parser-2254"><a href="#Parser-2254"><span class="linenos">2254</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="Parser-2255"><a href="#Parser-2255"><span class="linenos">2255</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-2256"><a href="#Parser-2256"><span class="linenos">2256</span></a>
+</span><span id="Parser-2257"><a href="#Parser-2257"><span class="linenos">2257</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
+</span><span id="Parser-2258"><a href="#Parser-2258"><span class="linenos">2258</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-2259"><a href="#Parser-2259"><span class="linenos">2259</span></a>
+</span><span id="Parser-2260"><a href="#Parser-2260"><span class="linenos">2260</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-2261"><a href="#Parser-2261"><span class="linenos">2261</span></a>
+</span><span id="Parser-2262"><a href="#Parser-2262"><span class="linenos">2262</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2263"><a href="#Parser-2263"><span class="linenos">2263</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-2264"><a href="#Parser-2264"><span class="linenos">2264</span></a>
+</span><span id="Parser-2265"><a href="#Parser-2265"><span class="linenos">2265</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-2266"><a href="#Parser-2266"><span class="linenos">2266</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-2267"><a href="#Parser-2267"><span class="linenos">2267</span></a>
-</span><span id="Parser-2268"><a href="#Parser-2268"><span class="linenos">2268</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
-</span><span id="Parser-2269"><a href="#Parser-2269"><span class="linenos">2269</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-2270"><a href="#Parser-2270"><span class="linenos">2270</span></a>
-</span><span id="Parser-2271"><a href="#Parser-2271"><span class="linenos">2271</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="Parser-2272"><a href="#Parser-2272"><span class="linenos">2272</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-2273"><a href="#Parser-2273"><span class="linenos">2273</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
+</span><span id="Parser-2268"><a href="#Parser-2268"><span class="linenos">2268</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-2269"><a href="#Parser-2269"><span class="linenos">2269</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span>
+</span><span id="Parser-2270"><a href="#Parser-2270"><span class="linenos">2270</span></a> <span class="s2">&quot;hints&quot;</span><span class="p">,</span>
+</span><span id="Parser-2271"><a href="#Parser-2271"><span class="linenos">2271</span></a> <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_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-2272"><a href="#Parser-2272"><span class="linenos">2272</span></a> <span class="p">)</span>
+</span><span id="Parser-2273"><a href="#Parser-2273"><span class="linenos">2273</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-2274"><a href="#Parser-2274"><span class="linenos">2274</span></a>
-</span><span id="Parser-2275"><a href="#Parser-2275"><span class="linenos">2275</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2276"><a href="#Parser-2276"><span class="linenos">2276</span></a>
-</span><span id="Parser-2277"><a href="#Parser-2277"><span class="linenos">2277</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2278"><a href="#Parser-2278"><span class="linenos">2278</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-2279"><a href="#Parser-2279"><span class="linenos">2279</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2280"><a href="#Parser-2280"><span class="linenos">2280</span></a>
-</span><span id="Parser-2281"><a href="#Parser-2281"><span class="linenos">2281</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_column</span><span class="p">)</span>
-</span><span id="Parser-2282"><a href="#Parser-2282"><span class="linenos">2282</span></a> <span class="n">ordinality</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-2283"><a href="#Parser-2283"><span class="linenos">2283</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-2284"><a href="#Parser-2284"><span class="linenos">2284</span></a>
-</span><span id="Parser-2285"><a href="#Parser-2285"><span class="linenos">2285</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">unnest_column_only</span><span class="p">:</span>
-</span><span id="Parser-2286"><a href="#Parser-2286"><span class="linenos">2286</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-2287"><a href="#Parser-2287"><span class="linenos">2287</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-2288"><a href="#Parser-2288"><span class="linenos">2288</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-2289"><a href="#Parser-2289"><span class="linenos">2289</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-2290"><a href="#Parser-2290"><span class="linenos">2290</span></a>
-</span><span id="Parser-2291"><a href="#Parser-2291"><span class="linenos">2291</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2292"><a href="#Parser-2292"><span class="linenos">2292</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">OFFSET</span><span class="p">):</span>
-</span><span id="Parser-2293"><a href="#Parser-2293"><span class="linenos">2293</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-2294"><a href="#Parser-2294"><span class="linenos">2294</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 class="ow">or</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="s2">&quot;offset&quot;</span><span class="p">)</span>
-</span><span id="Parser-2295"><a href="#Parser-2295"><span class="linenos">2295</span></a>
-</span><span id="Parser-2296"><a href="#Parser-2296"><span class="linenos">2296</span></a> <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-2297"><a href="#Parser-2297"><span class="linenos">2297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span>
-</span><span id="Parser-2298"><a href="#Parser-2298"><span class="linenos">2298</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-2299"><a href="#Parser-2299"><span class="linenos">2299</span></a> <span class="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span>
-</span><span id="Parser-2300"><a href="#Parser-2300"><span class="linenos">2300</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
-</span><span id="Parser-2301"><a href="#Parser-2301"><span class="linenos">2301</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
-</span><span id="Parser-2302"><a href="#Parser-2302"><span class="linenos">2302</span></a> <span class="p">)</span>
-</span><span id="Parser-2303"><a href="#Parser-2303"><span class="linenos">2303</span></a>
-</span><span id="Parser-2304"><a href="#Parser-2304"><span class="linenos">2304</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2305"><a href="#Parser-2305"><span class="linenos">2305</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-2306"><a href="#Parser-2306"><span class="linenos">2306</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-2307"><a href="#Parser-2307"><span class="linenos">2307</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2308"><a href="#Parser-2308"><span class="linenos">2308</span></a>
-</span><span id="Parser-2309"><a href="#Parser-2309"><span class="linenos">2309</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-2275"><a href="#Parser-2275"><span class="linenos">2275</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span><span class="p">:</span>
+</span><span id="Parser-2276"><a href="#Parser-2276"><span class="linenos">2276</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-2277"><a href="#Parser-2277"><span class="linenos">2277</span></a>
+</span><span id="Parser-2278"><a href="#Parser-2278"><span class="linenos">2278</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="Parser-2279"><a href="#Parser-2279"><span class="linenos">2279</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-2280"><a href="#Parser-2280"><span class="linenos">2280</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
+</span><span id="Parser-2281"><a href="#Parser-2281"><span class="linenos">2281</span></a>
+</span><span id="Parser-2282"><a href="#Parser-2282"><span class="linenos">2282</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2283"><a href="#Parser-2283"><span class="linenos">2283</span></a>
+</span><span id="Parser-2284"><a href="#Parser-2284"><span class="linenos">2284</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2285"><a href="#Parser-2285"><span class="linenos">2285</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-2286"><a href="#Parser-2286"><span class="linenos">2286</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2287"><a href="#Parser-2287"><span class="linenos">2287</span></a>
+</span><span id="Parser-2288"><a href="#Parser-2288"><span class="linenos">2288</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_type</span><span class="p">)</span>
+</span><span id="Parser-2289"><a href="#Parser-2289"><span class="linenos">2289</span></a> <span class="n">ordinality</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-2290"><a href="#Parser-2290"><span class="linenos">2290</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-2291"><a href="#Parser-2291"><span class="linenos">2291</span></a>
+</span><span id="Parser-2292"><a href="#Parser-2292"><span class="linenos">2292</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">unnest_column_only</span><span class="p">:</span>
+</span><span id="Parser-2293"><a href="#Parser-2293"><span class="linenos">2293</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-2294"><a href="#Parser-2294"><span class="linenos">2294</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-2295"><a href="#Parser-2295"><span class="linenos">2295</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-2296"><a href="#Parser-2296"><span class="linenos">2296</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-2297"><a href="#Parser-2297"><span class="linenos">2297</span></a>
+</span><span id="Parser-2298"><a href="#Parser-2298"><span class="linenos">2298</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2299"><a href="#Parser-2299"><span class="linenos">2299</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">OFFSET</span><span class="p">):</span>
+</span><span id="Parser-2300"><a href="#Parser-2300"><span class="linenos">2300</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-2301"><a href="#Parser-2301"><span class="linenos">2301</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 class="ow">or</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="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="Parser-2302"><a href="#Parser-2302"><span class="linenos">2302</span></a>
+</span><span id="Parser-2303"><a href="#Parser-2303"><span class="linenos">2303</span></a> <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-2304"><a href="#Parser-2304"><span class="linenos">2304</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span>
+</span><span id="Parser-2305"><a href="#Parser-2305"><span class="linenos">2305</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-2306"><a href="#Parser-2306"><span class="linenos">2306</span></a> <span class="n">ordinality</span><span class="o">=</span><span class="n">ordinality</span><span class="p">,</span>
+</span><span id="Parser-2307"><a href="#Parser-2307"><span class="linenos">2307</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
+</span><span id="Parser-2308"><a href="#Parser-2308"><span class="linenos">2308</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="Parser-2309"><a href="#Parser-2309"><span class="linenos">2309</span></a> <span class="p">)</span>
</span><span id="Parser-2310"><a href="#Parser-2310"><span class="linenos">2310</span></a>
-</span><span id="Parser-2311"><a href="#Parser-2311"><span class="linenos">2311</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="Parser-2312"><a href="#Parser-2312"><span class="linenos">2312</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-2313"><a href="#Parser-2313"><span class="linenos">2313</span></a>
-</span><span id="Parser-2314"><a href="#Parser-2314"><span class="linenos">2314</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-2311"><a href="#Parser-2311"><span class="linenos">2311</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2312"><a href="#Parser-2312"><span class="linenos">2312</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-2313"><a href="#Parser-2313"><span class="linenos">2313</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-2314"><a href="#Parser-2314"><span class="linenos">2314</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2315"><a href="#Parser-2315"><span class="linenos">2315</span></a>
-</span><span id="Parser-2316"><a href="#Parser-2316"><span class="linenos">2316</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2317"><a href="#Parser-2317"><span class="linenos">2317</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-2318"><a href="#Parser-2318"><span class="linenos">2318</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-2319"><a href="#Parser-2319"><span class="linenos">2319</span></a> <span class="p">):</span>
-</span><span id="Parser-2320"><a href="#Parser-2320"><span class="linenos">2320</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2321"><a href="#Parser-2321"><span class="linenos">2321</span></a>
-</span><span id="Parser-2322"><a href="#Parser-2322"><span class="linenos">2322</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2323"><a href="#Parser-2323"><span class="linenos">2323</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2324"><a href="#Parser-2324"><span class="linenos">2324</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2325"><a href="#Parser-2325"><span class="linenos">2325</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2326"><a href="#Parser-2326"><span class="linenos">2326</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2327"><a href="#Parser-2327"><span class="linenos">2327</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2328"><a href="#Parser-2328"><span class="linenos">2328</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2329"><a href="#Parser-2329"><span class="linenos">2329</span></a>
-</span><span id="Parser-2330"><a href="#Parser-2330"><span class="linenos">2330</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span> <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">TABLE_SAMPLE</span> <span class="k">else</span> <span class="s2">&quot;USING SAMPLE&quot;</span>
-</span><span id="Parser-2331"><a href="#Parser-2331"><span class="linenos">2331</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><span id="Parser-2332"><a href="#Parser-2332"><span class="linenos">2332</span></a>
-</span><span id="Parser-2333"><a href="#Parser-2333"><span class="linenos">2333</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_PAREN</span><span class="p">)</span>
-</span><span id="Parser-2334"><a href="#Parser-2334"><span class="linenos">2334</span></a>
-</span><span id="Parser-2335"><a href="#Parser-2335"><span class="linenos">2335</span></a> <span class="n">num</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-2316"><a href="#Parser-2316"><span class="linenos">2316</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-2317"><a href="#Parser-2317"><span class="linenos">2317</span></a>
+</span><span id="Parser-2318"><a href="#Parser-2318"><span class="linenos">2318</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="Parser-2319"><a href="#Parser-2319"><span class="linenos">2319</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-2320"><a href="#Parser-2320"><span class="linenos">2320</span></a>
+</span><span id="Parser-2321"><a href="#Parser-2321"><span class="linenos">2321</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-2322"><a href="#Parser-2322"><span class="linenos">2322</span></a>
+</span><span id="Parser-2323"><a href="#Parser-2323"><span class="linenos">2323</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2324"><a href="#Parser-2324"><span class="linenos">2324</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-2325"><a href="#Parser-2325"><span class="linenos">2325</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-2326"><a href="#Parser-2326"><span class="linenos">2326</span></a> <span class="p">):</span>
+</span><span id="Parser-2327"><a href="#Parser-2327"><span class="linenos">2327</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2328"><a href="#Parser-2328"><span class="linenos">2328</span></a>
+</span><span id="Parser-2329"><a href="#Parser-2329"><span class="linenos">2329</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2330"><a href="#Parser-2330"><span class="linenos">2330</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2331"><a href="#Parser-2331"><span class="linenos">2331</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2332"><a href="#Parser-2332"><span class="linenos">2332</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2333"><a href="#Parser-2333"><span class="linenos">2333</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2334"><a href="#Parser-2334"><span class="linenos">2334</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2335"><a href="#Parser-2335"><span class="linenos">2335</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2336"><a href="#Parser-2336"><span class="linenos">2336</span></a>
-</span><span id="Parser-2337"><a href="#Parser-2337"><span class="linenos">2337</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">):</span>
-</span><span id="Parser-2338"><a href="#Parser-2338"><span class="linenos">2338</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-2339"><a href="#Parser-2339"><span class="linenos">2339</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">OUT_OF</span><span class="p">)</span>
-</span><span id="Parser-2340"><a href="#Parser-2340"><span class="linenos">2340</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-2341"><a href="#Parser-2341"><span class="linenos">2341</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-2342"><a href="#Parser-2342"><span class="linenos">2342</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-2343"><a href="#Parser-2343"><span class="linenos">2343</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-2344"><a href="#Parser-2344"><span class="linenos">2344</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-2345"><a href="#Parser-2345"><span class="linenos">2345</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><span id="Parser-2346"><a href="#Parser-2346"><span class="linenos">2346</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-2347"><a href="#Parser-2347"><span class="linenos">2347</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2348"><a href="#Parser-2348"><span class="linenos">2348</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-2349"><a href="#Parser-2349"><span class="linenos">2349</span></a>
-</span><span id="Parser-2350"><a href="#Parser-2350"><span class="linenos">2350</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-2351"><a href="#Parser-2351"><span class="linenos">2351</span></a>
-</span><span id="Parser-2352"><a href="#Parser-2352"><span class="linenos">2352</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2353"><a href="#Parser-2353"><span class="linenos">2353</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><span id="Parser-2354"><a href="#Parser-2354"><span class="linenos">2354</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-2355"><a href="#Parser-2355"><span class="linenos">2355</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-2356"><a href="#Parser-2356"><span class="linenos">2356</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-2357"><a href="#Parser-2357"><span class="linenos">2357</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-2337"><a href="#Parser-2337"><span class="linenos">2337</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2338"><a href="#Parser-2338"><span class="linenos">2338</span></a> <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">_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">TABLE_SAMPLE</span> <span class="k">else</span> <span class="s2">&quot;USING SAMPLE&quot;</span>
+</span><span id="Parser-2339"><a href="#Parser-2339"><span class="linenos">2339</span></a> <span class="p">)</span>
+</span><span id="Parser-2340"><a href="#Parser-2340"><span class="linenos">2340</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><span id="Parser-2341"><a href="#Parser-2341"><span class="linenos">2341</span></a>
+</span><span id="Parser-2342"><a href="#Parser-2342"><span class="linenos">2342</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_PAREN</span><span class="p">)</span>
+</span><span id="Parser-2343"><a href="#Parser-2343"><span class="linenos">2343</span></a>
+</span><span id="Parser-2344"><a href="#Parser-2344"><span class="linenos">2344</span></a> <span class="n">num</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-2345"><a href="#Parser-2345"><span class="linenos">2345</span></a>
+</span><span id="Parser-2346"><a href="#Parser-2346"><span class="linenos">2346</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">):</span>
+</span><span id="Parser-2347"><a href="#Parser-2347"><span class="linenos">2347</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-2348"><a href="#Parser-2348"><span class="linenos">2348</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">OUT_OF</span><span class="p">)</span>
+</span><span id="Parser-2349"><a href="#Parser-2349"><span class="linenos">2349</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-2350"><a href="#Parser-2350"><span class="linenos">2350</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-2351"><a href="#Parser-2351"><span class="linenos">2351</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-2352"><a href="#Parser-2352"><span class="linenos">2352</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-2353"><a href="#Parser-2353"><span class="linenos">2353</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-2354"><a href="#Parser-2354"><span class="linenos">2354</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><span id="Parser-2355"><a href="#Parser-2355"><span class="linenos">2355</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-2356"><a href="#Parser-2356"><span class="linenos">2356</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2357"><a href="#Parser-2357"><span class="linenos">2357</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="Parser-2358"><a href="#Parser-2358"><span class="linenos">2358</span></a>
-</span><span id="Parser-2359"><a href="#Parser-2359"><span class="linenos">2359</span></a> <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-2360"><a href="#Parser-2360"><span class="linenos">2360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="Parser-2361"><a href="#Parser-2361"><span class="linenos">2361</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Parser-2362"><a href="#Parser-2362"><span class="linenos">2362</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-2363"><a href="#Parser-2363"><span class="linenos">2363</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-2364"><a href="#Parser-2364"><span class="linenos">2364</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-2365"><a href="#Parser-2365"><span class="linenos">2365</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-2366"><a href="#Parser-2366"><span class="linenos">2366</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="Parser-2367"><a href="#Parser-2367"><span class="linenos">2367</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="Parser-2368"><a href="#Parser-2368"><span class="linenos">2368</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="Parser-2369"><a href="#Parser-2369"><span class="linenos">2369</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-2370"><a href="#Parser-2370"><span class="linenos">2370</span></a> <span class="p">)</span>
-</span><span id="Parser-2371"><a href="#Parser-2371"><span class="linenos">2371</span></a>
-</span><span id="Parser-2372"><a href="#Parser-2372"><span class="linenos">2372</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">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="Parser-2373"><a href="#Parser-2373"><span class="linenos">2373</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><span id="Parser-2374"><a href="#Parser-2374"><span class="linenos">2374</span></a>
-</span><span id="Parser-2375"><a href="#Parser-2375"><span class="linenos">2375</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2376"><a href="#Parser-2376"><span class="linenos">2376</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-2377"><a href="#Parser-2377"><span class="linenos">2377</span></a>
-</span><span id="Parser-2378"><a href="#Parser-2378"><span class="linenos">2378</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2379"><a href="#Parser-2379"><span class="linenos">2379</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2380"><a href="#Parser-2380"><span class="linenos">2380</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-2381"><a href="#Parser-2381"><span class="linenos">2381</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2382"><a href="#Parser-2382"><span class="linenos">2382</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2383"><a href="#Parser-2383"><span class="linenos">2383</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2384"><a href="#Parser-2384"><span class="linenos">2384</span></a>
-</span><span id="Parser-2385"><a href="#Parser-2385"><span class="linenos">2385</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2386"><a href="#Parser-2386"><span class="linenos">2386</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2387"><a href="#Parser-2387"><span class="linenos">2387</span></a>
-</span><span id="Parser-2388"><a href="#Parser-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">_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-2389"><a href="#Parser-2389"><span class="linenos">2389</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-2390"><a href="#Parser-2390"><span class="linenos">2390</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2391"><a href="#Parser-2391"><span class="linenos">2391</span></a>
-</span><span id="Parser-2392"><a href="#Parser-2392"><span class="linenos">2392</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="Parser-2393"><a href="#Parser-2393"><span class="linenos">2393</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-2394"><a href="#Parser-2394"><span class="linenos">2394</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2395"><a href="#Parser-2395"><span class="linenos">2395</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-2359"><a href="#Parser-2359"><span class="linenos">2359</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-2360"><a href="#Parser-2360"><span class="linenos">2360</span></a>
+</span><span id="Parser-2361"><a href="#Parser-2361"><span class="linenos">2361</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2362"><a href="#Parser-2362"><span class="linenos">2362</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><span id="Parser-2363"><a href="#Parser-2363"><span class="linenos">2363</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-2364"><a href="#Parser-2364"><span class="linenos">2364</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-2365"><a href="#Parser-2365"><span class="linenos">2365</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-2366"><a href="#Parser-2366"><span class="linenos">2366</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-2367"><a href="#Parser-2367"><span class="linenos">2367</span></a>
+</span><span id="Parser-2368"><a href="#Parser-2368"><span class="linenos">2368</span></a> <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-2369"><a href="#Parser-2369"><span class="linenos">2369</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="Parser-2370"><a href="#Parser-2370"><span class="linenos">2370</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Parser-2371"><a href="#Parser-2371"><span class="linenos">2371</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-2372"><a href="#Parser-2372"><span class="linenos">2372</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-2373"><a href="#Parser-2373"><span class="linenos">2373</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-2374"><a href="#Parser-2374"><span class="linenos">2374</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-2375"><a href="#Parser-2375"><span class="linenos">2375</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="Parser-2376"><a href="#Parser-2376"><span class="linenos">2376</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="Parser-2377"><a href="#Parser-2377"><span class="linenos">2377</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="Parser-2378"><a href="#Parser-2378"><span class="linenos">2378</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-2379"><a href="#Parser-2379"><span class="linenos">2379</span></a> <span class="p">)</span>
+</span><span id="Parser-2380"><a href="#Parser-2380"><span class="linenos">2380</span></a>
+</span><span id="Parser-2381"><a href="#Parser-2381"><span class="linenos">2381</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">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="Parser-2382"><a href="#Parser-2382"><span class="linenos">2382</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><span id="Parser-2383"><a href="#Parser-2383"><span class="linenos">2383</span></a>
+</span><span id="Parser-2384"><a href="#Parser-2384"><span class="linenos">2384</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2385"><a href="#Parser-2385"><span class="linenos">2385</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-2386"><a href="#Parser-2386"><span class="linenos">2386</span></a>
+</span><span id="Parser-2387"><a href="#Parser-2387"><span class="linenos">2387</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2388"><a href="#Parser-2388"><span class="linenos">2388</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2389"><a href="#Parser-2389"><span class="linenos">2389</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-2390"><a href="#Parser-2390"><span class="linenos">2390</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2391"><a href="#Parser-2391"><span class="linenos">2391</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2392"><a href="#Parser-2392"><span class="linenos">2392</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2393"><a href="#Parser-2393"><span class="linenos">2393</span></a>
+</span><span id="Parser-2394"><a href="#Parser-2394"><span class="linenos">2394</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2395"><a href="#Parser-2395"><span class="linenos">2395</span></a> <span class="n">field</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2396"><a href="#Parser-2396"><span class="linenos">2396</span></a>
-</span><span id="Parser-2397"><a href="#Parser-2397"><span class="linenos">2397</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-2398"><a href="#Parser-2398"><span class="linenos">2398</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-2399"><a href="#Parser-2399"><span class="linenos">2399</span></a>
-</span><span id="Parser-2400"><a href="#Parser-2400"><span class="linenos">2400</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-2401"><a href="#Parser-2401"><span class="linenos">2401</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-2402"><a href="#Parser-2402"><span class="linenos">2402</span></a>
-</span><span id="Parser-2403"><a href="#Parser-2403"><span class="linenos">2403</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-2404"><a href="#Parser-2404"><span class="linenos">2404</span></a>
-</span><span id="Parser-2405"><a href="#Parser-2405"><span class="linenos">2405</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-2406"><a href="#Parser-2406"><span class="linenos">2406</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-2407"><a href="#Parser-2407"><span class="linenos">2407</span></a>
-</span><span id="Parser-2408"><a href="#Parser-2408"><span class="linenos">2408</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Parser-2409"><a href="#Parser-2409"><span class="linenos">2409</span></a>
-</span><span id="Parser-2410"><a href="#Parser-2410"><span class="linenos">2410</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-2397"><a href="#Parser-2397"><span class="linenos">2397</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-2398"><a href="#Parser-2398"><span class="linenos">2398</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-2399"><a href="#Parser-2399"><span class="linenos">2399</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2400"><a href="#Parser-2400"><span class="linenos">2400</span></a>
+</span><span id="Parser-2401"><a href="#Parser-2401"><span class="linenos">2401</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="Parser-2402"><a href="#Parser-2402"><span class="linenos">2402</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-2403"><a href="#Parser-2403"><span class="linenos">2403</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2404"><a href="#Parser-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">_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-2405"><a href="#Parser-2405"><span class="linenos">2405</span></a>
+</span><span id="Parser-2406"><a href="#Parser-2406"><span class="linenos">2406</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-2407"><a href="#Parser-2407"><span class="linenos">2407</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-2408"><a href="#Parser-2408"><span class="linenos">2408</span></a>
+</span><span id="Parser-2409"><a href="#Parser-2409"><span class="linenos">2409</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-2410"><a href="#Parser-2410"><span class="linenos">2410</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-2411"><a href="#Parser-2411"><span class="linenos">2411</span></a>
-</span><span id="Parser-2412"><a href="#Parser-2412"><span class="linenos">2412</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 class="n">exp</span><span class="o">.</span><span class="n">Pivot</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">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">)</span>
+</span><span id="Parser-2412"><a href="#Parser-2412"><span class="linenos">2412</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-2413"><a href="#Parser-2413"><span class="linenos">2413</span></a>
-</span><span id="Parser-2414"><a href="#Parser-2414"><span class="linenos">2414</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-2415"><a href="#Parser-2415"><span class="linenos">2415</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-2414"><a href="#Parser-2414"><span class="linenos">2414</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-2415"><a href="#Parser-2415"><span class="linenos">2415</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-2416"><a href="#Parser-2416"><span class="linenos">2416</span></a>
-</span><span id="Parser-2417"><a href="#Parser-2417"><span class="linenos">2417</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-2418"><a href="#Parser-2418"><span class="linenos">2418</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-2419"><a href="#Parser-2419"><span class="linenos">2419</span></a>
-</span><span id="Parser-2420"><a href="#Parser-2420"><span class="linenos">2420</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-2421"><a href="#Parser-2421"><span class="linenos">2421</span></a> <span class="k">for</span> <span class="n">col</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-2422"><a href="#Parser-2422"><span class="linenos">2422</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-2423"><a href="#Parser-2423"><span class="linenos">2423</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-2424"><a href="#Parser-2424"><span class="linenos">2424</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="Parser-2425"><a href="#Parser-2425"><span class="linenos">2425</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2426"><a href="#Parser-2426"><span class="linenos">2426</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="Parser-2427"><a href="#Parser-2427"><span class="linenos">2427</span></a>
-</span><span id="Parser-2428"><a href="#Parser-2428"><span class="linenos">2428</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 class="n">quoted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTED_PIVOT_COLUMNS</span><span class="p">))</span>
-</span><span id="Parser-2429"><a href="#Parser-2429"><span class="linenos">2429</span></a>
-</span><span id="Parser-2430"><a href="#Parser-2430"><span class="linenos">2430</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-2431"><a href="#Parser-2431"><span class="linenos">2431</span></a>
-</span><span id="Parser-2432"><a href="#Parser-2432"><span class="linenos">2432</span></a> <span class="k">return</span> <span class="n">pivot</span>
-</span><span id="Parser-2433"><a href="#Parser-2433"><span class="linenos">2433</span></a>
-</span><span id="Parser-2434"><a href="#Parser-2434"><span class="linenos">2434</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">pivot_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">-&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-2435"><a href="#Parser-2435"><span class="linenos">2435</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">pivot_columns</span><span class="p">]</span>
+</span><span id="Parser-2417"><a href="#Parser-2417"><span class="linenos">2417</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Parser-2418"><a href="#Parser-2418"><span class="linenos">2418</span></a>
+</span><span id="Parser-2419"><a href="#Parser-2419"><span class="linenos">2419</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-2420"><a href="#Parser-2420"><span class="linenos">2420</span></a>
+</span><span id="Parser-2421"><a href="#Parser-2421"><span class="linenos">2421</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 class="n">exp</span><span class="o">.</span><span class="n">Pivot</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">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">)</span>
+</span><span id="Parser-2422"><a href="#Parser-2422"><span class="linenos">2422</span></a>
+</span><span id="Parser-2423"><a href="#Parser-2423"><span class="linenos">2423</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-2424"><a href="#Parser-2424"><span class="linenos">2424</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-2425"><a href="#Parser-2425"><span class="linenos">2425</span></a>
+</span><span id="Parser-2426"><a href="#Parser-2426"><span class="linenos">2426</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-2427"><a href="#Parser-2427"><span class="linenos">2427</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-2428"><a href="#Parser-2428"><span class="linenos">2428</span></a>
+</span><span id="Parser-2429"><a href="#Parser-2429"><span class="linenos">2429</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-2430"><a href="#Parser-2430"><span class="linenos">2430</span></a> <span class="k">for</span> <span class="n">col</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-2431"><a href="#Parser-2431"><span class="linenos">2431</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-2432"><a href="#Parser-2432"><span class="linenos">2432</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-2433"><a href="#Parser-2433"><span class="linenos">2433</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="Parser-2434"><a href="#Parser-2434"><span class="linenos">2434</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2435"><a href="#Parser-2435"><span class="linenos">2435</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">col</span><span class="o">.</span><span class="n">alias_or_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">col</span><span class="o">.</span><span class="n">alias_or_name</span>
</span><span id="Parser-2436"><a href="#Parser-2436"><span class="linenos">2436</span></a>
-</span><span id="Parser-2437"><a href="#Parser-2437"><span class="linenos">2437</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2438"><a href="#Parser-2438"><span class="linenos">2438</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-2439"><a href="#Parser-2439"><span class="linenos">2439</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2437"><a href="#Parser-2437"><span class="linenos">2437</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 class="n">quoted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">QUOTED_PIVOT_COLUMNS</span><span class="p">))</span>
+</span><span id="Parser-2438"><a href="#Parser-2438"><span class="linenos">2438</span></a>
+</span><span id="Parser-2439"><a href="#Parser-2439"><span class="linenos">2439</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-2440"><a href="#Parser-2440"><span class="linenos">2440</span></a>
-</span><span id="Parser-2441"><a href="#Parser-2441"><span class="linenos">2441</span></a> <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-2442"><a href="#Parser-2442"><span class="linenos">2442</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-2443"><a href="#Parser-2443"><span class="linenos">2443</span></a> <span class="p">)</span>
-</span><span id="Parser-2444"><a href="#Parser-2444"><span class="linenos">2444</span></a>
-</span><span id="Parser-2445"><a href="#Parser-2445"><span class="linenos">2445</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2446"><a href="#Parser-2446"><span class="linenos">2446</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-2447"><a href="#Parser-2447"><span class="linenos">2447</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2448"><a href="#Parser-2448"><span class="linenos">2448</span></a>
-</span><span id="Parser-2449"><a href="#Parser-2449"><span class="linenos">2449</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-2450"><a href="#Parser-2450"><span class="linenos">2450</span></a>
-</span><span id="Parser-2451"><a href="#Parser-2451"><span class="linenos">2451</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-2452"><a href="#Parser-2452"><span class="linenos">2452</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-2453"><a href="#Parser-2453"><span class="linenos">2453</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-2454"><a href="#Parser-2454"><span class="linenos">2454</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-2455"><a href="#Parser-2455"><span class="linenos">2455</span></a>
-</span><span id="Parser-2456"><a href="#Parser-2456"><span class="linenos">2456</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-2457"><a href="#Parser-2457"><span class="linenos">2457</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="Parser-2458"><a href="#Parser-2458"><span class="linenos">2458</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-2441"><a href="#Parser-2441"><span class="linenos">2441</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="Parser-2442"><a href="#Parser-2442"><span class="linenos">2442</span></a>
+</span><span id="Parser-2443"><a href="#Parser-2443"><span class="linenos">2443</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">pivot_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">-&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-2444"><a href="#Parser-2444"><span class="linenos">2444</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">pivot_columns</span><span class="p">]</span>
+</span><span id="Parser-2445"><a href="#Parser-2445"><span class="linenos">2445</span></a>
+</span><span id="Parser-2446"><a href="#Parser-2446"><span class="linenos">2446</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2447"><a href="#Parser-2447"><span class="linenos">2447</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-2448"><a href="#Parser-2448"><span class="linenos">2448</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2449"><a href="#Parser-2449"><span class="linenos">2449</span></a>
+</span><span id="Parser-2450"><a href="#Parser-2450"><span class="linenos">2450</span></a> <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-2451"><a href="#Parser-2451"><span class="linenos">2451</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-2452"><a href="#Parser-2452"><span class="linenos">2452</span></a> <span class="p">)</span>
+</span><span id="Parser-2453"><a href="#Parser-2453"><span class="linenos">2453</span></a>
+</span><span id="Parser-2454"><a href="#Parser-2454"><span class="linenos">2454</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2455"><a href="#Parser-2455"><span class="linenos">2455</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-2456"><a href="#Parser-2456"><span class="linenos">2456</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2457"><a href="#Parser-2457"><span class="linenos">2457</span></a>
+</span><span id="Parser-2458"><a href="#Parser-2458"><span class="linenos">2458</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-2459"><a href="#Parser-2459"><span class="linenos">2459</span></a>
-</span><span id="Parser-2460"><a href="#Parser-2460"><span class="linenos">2460</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2461"><a href="#Parser-2461"><span class="linenos">2461</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2462"><a href="#Parser-2462"><span class="linenos">2462</span></a>
-</span><span id="Parser-2463"><a href="#Parser-2463"><span class="linenos">2463</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-2464"><a href="#Parser-2464"><span class="linenos">2464</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2465"><a href="#Parser-2465"><span class="linenos">2465</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-2466"><a href="#Parser-2466"><span class="linenos">2466</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-2467"><a href="#Parser-2467"><span class="linenos">2467</span></a>
-</span><span id="Parser-2468"><a href="#Parser-2468"><span class="linenos">2468</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2469"><a href="#Parser-2469"><span class="linenos">2469</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-2470"><a href="#Parser-2470"><span class="linenos">2470</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-2460"><a href="#Parser-2460"><span class="linenos">2460</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-2461"><a href="#Parser-2461"><span class="linenos">2461</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-2462"><a href="#Parser-2462"><span class="linenos">2462</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-2463"><a href="#Parser-2463"><span class="linenos">2463</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-2464"><a href="#Parser-2464"><span class="linenos">2464</span></a>
+</span><span id="Parser-2465"><a href="#Parser-2465"><span class="linenos">2465</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-2466"><a href="#Parser-2466"><span class="linenos">2466</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="Parser-2467"><a href="#Parser-2467"><span class="linenos">2467</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-2468"><a href="#Parser-2468"><span class="linenos">2468</span></a>
+</span><span id="Parser-2469"><a href="#Parser-2469"><span class="linenos">2469</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a>
-</span><span id="Parser-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">expressions</span> <span class="ow">or</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="p">):</span>
-</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span 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-2472"><a href="#Parser-2472"><span class="linenos">2472</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-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2474"><a href="#Parser-2474"><span class="linenos">2474</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-2475"><a href="#Parser-2475"><span class="linenos">2475</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-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a>
-</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2478"><a href="#Parser-2478"><span class="linenos">2478</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-2479"><a href="#Parser-2479"><span class="linenos">2479</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2478"><a href="#Parser-2478"><span class="linenos">2478</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-2479"><a href="#Parser-2479"><span class="linenos">2479</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-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">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-2482"><a href="#Parser-2482"><span class="linenos">2482</span></a>
-</span><span id="Parser-2483"><a href="#Parser-2483"><span class="linenos">2483</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-2484"><a href="#Parser-2484"><span class="linenos">2484</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2485"><a href="#Parser-2485"><span class="linenos">2485</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-2486"><a href="#Parser-2486"><span class="linenos">2486</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-2487"><a href="#Parser-2487"><span class="linenos">2487</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a>
-</span><span id="Parser-2489"><a href="#Parser-2489"><span class="linenos">2489</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-2490"><a href="#Parser-2490"><span class="linenos">2490</span></a>
-</span><span id="Parser-2491"><a href="#Parser-2491"><span class="linenos">2491</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2492"><a href="#Parser-2492"><span class="linenos">2492</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-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</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-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2500"><a href="#Parser-2500"><span class="linenos">2500</span></a>
-</span><span id="Parser-2501"><a href="#Parser-2501"><span class="linenos">2501</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="Parser-2502"><a href="#Parser-2502"><span class="linenos">2502</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-2503"><a href="#Parser-2503"><span class="linenos">2503</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-2504"><a href="#Parser-2504"><span class="linenos">2504</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-2505"><a href="#Parser-2505"><span class="linenos">2505</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</span></a>
-</span><span id="Parser-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <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-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span 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_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-2509"><a href="#Parser-2509"><span class="linenos">2509</span></a> <span class="p">)</span>
-</span><span id="Parser-2510"><a href="#Parser-2510"><span class="linenos">2510</span></a>
-</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span>
-</span><span id="Parser-2512"><a href="#Parser-2512"><span class="linenos">2512</span></a> <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">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">exp</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="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2514"><a href="#Parser-2514"><span class="linenos">2514</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_type</span><span class="p">):</span>
-</span><span id="Parser-2515"><a href="#Parser-2515"><span class="linenos">2515</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2516"><a href="#Parser-2516"><span class="linenos">2516</span></a> <span class="k">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-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a>
-</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</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="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-2519"><a href="#Parser-2519"><span class="linenos">2519</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-2520"><a href="#Parser-2520"><span class="linenos">2520</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">ASC</span><span class="p">)</span>
-</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a> <span class="n">is_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><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">)</span>
-</span><span id="Parser-2523"><a href="#Parser-2523"><span class="linenos">2523</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">)</span>
-</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="n">is_desc</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
-</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</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-2527"><a href="#Parser-2527"><span class="linenos">2527</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-2528"><a href="#Parser-2528"><span class="linenos">2528</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="bp">self</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-2532"><a href="#Parser-2532"><span class="linenos">2532</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">null_ordering</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a> <span class="p">)</span>
-</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</span></a> <span class="ow">and</span> <span class="bp">self</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-2535"><a href="#Parser-2535"><span class="linenos">2535</span></a> <span class="p">):</span>
-</span><span id="Parser-2536"><a href="#Parser-2536"><span class="linenos">2536</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2537"><a href="#Parser-2537"><span class="linenos">2537</span></a>
-</span><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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><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">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
-</span><span id="Parser-2541"><a href="#Parser-2541"><span class="linenos">2541</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-2542"><a href="#Parser-2542"><span class="linenos">2542</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-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2544"><a href="#Parser-2544"><span class="linenos">2544</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-2545"><a href="#Parser-2545"><span class="linenos">2545</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-2546"><a href="#Parser-2546"><span class="linenos">2546</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="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a> <span class="p">)</span>
+</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="p">(</span><span class="n">expressions</span> <span class="ow">or</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="p">):</span>
+</span><span id="Parser-2482"><a href="#Parser-2482"><span class="linenos">2482</span></a> <span class="k">break</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">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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-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</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-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a> <span class="k">return</span> <span class="kc">None</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">_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-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="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-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2494"><a href="#Parser-2494"><span class="linenos">2494</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-2495"><a href="#Parser-2495"><span class="linenos">2495</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-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 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-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="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-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_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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2501"><a href="#Parser-2501"><span class="linenos">2501</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-2502"><a href="#Parser-2502"><span class="linenos">2502</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2504"><a href="#Parser-2504"><span class="linenos">2504</span></a>
+</span><span id="Parser-2505"><a href="#Parser-2505"><span class="linenos">2505</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</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-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_order</span><span class="p">(</span>
+</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</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-2512"><a href="#Parser-2512"><span class="linenos">2512</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-2513"><a href="#Parser-2513"><span class="linenos">2513</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-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a> <span class="k">return</span> <span class="n">this</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="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-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span 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_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-2518"><a href="#Parser-2518"><span class="linenos">2518</span></a> <span class="p">)</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">def</span> <span class="nf">_parse_sort</span><span class="p">(</span>
+</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a> <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">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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</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-2523"><a href="#Parser-2523"><span class="linenos">2523</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_type</span><span class="p">):</span>
+</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a> <span class="k">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-2526"><a href="#Parser-2526"><span class="linenos">2526</span></a>
+</span><span id="Parser-2527"><a href="#Parser-2527"><span class="linenos">2527</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="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-2528"><a href="#Parser-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">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</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">ASC</span><span class="p">)</span>
+</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</span></a> <span class="n">is_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><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">)</span>
+</span><span id="Parser-2532"><a href="#Parser-2532"><span class="linenos">2532</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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">)</span>
+</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="n">is_desc</span> <span class="ow">or</span> <span class="kc">False</span>
+</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">desc</span>
+</span><span id="Parser-2535"><a href="#Parser-2535"><span class="linenos">2535</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-2536"><a href="#Parser-2536"><span class="linenos">2536</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-2537"><a href="#Parser-2537"><span class="linenos">2537</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="Parser-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</span></a> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="bp">self</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-2541"><a href="#Parser-2541"><span class="linenos">2541</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">null_ordering</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="Parser-2542"><a href="#Parser-2542"><span class="linenos">2542</span></a> <span class="p">)</span>
+</span><span id="Parser-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a> <span class="ow">and</span> <span class="bp">self</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-2544"><a href="#Parser-2544"><span class="linenos">2544</span></a> <span class="p">):</span>
+</span><span id="Parser-2545"><a href="#Parser-2545"><span class="linenos">2545</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2546"><a href="#Parser-2546"><span class="linenos">2546</span></a>
+</span><span id="Parser-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</span></a>
-</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</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-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a>
-</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a> <span class="k">return</span> <span class="n">limit_exp</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="k">if</span> <span class="bp">self</span><span 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-2555"><a href="#Parser-2555"><span class="linenos">2555</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-2556"><a href="#Parser-2556"><span class="linenos">2556</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="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
+</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</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-2551"><a href="#Parser-2551"><span class="linenos">2551</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-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2553"><a href="#Parser-2553"><span class="linenos">2553</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-2554"><a href="#Parser-2554"><span class="linenos">2554</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-2555"><a href="#Parser-2555"><span class="linenos">2555</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="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-2556"><a href="#Parser-2556"><span class="linenos">2556</span></a> <span class="p">)</span>
</span><span id="Parser-2557"><a href="#Parser-2557"><span class="linenos">2557</span></a>
-</span><span id="Parser-2558"><a href="#Parser-2558"><span class="linenos">2558</span></a> <span class="n">count</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-2559"><a href="#Parser-2559"><span class="linenos">2559</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-2558"><a href="#Parser-2558"><span class="linenos">2558</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
+</span><span id="Parser-2559"><a href="#Parser-2559"><span class="linenos">2559</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-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a>
-</span><span id="Parser-2561"><a href="#Parser-2561"><span class="linenos">2561</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-2561"><a href="#Parser-2561"><span class="linenos">2561</span></a> <span class="k">return</span> <span class="n">limit_exp</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">only</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">ONLY</span><span class="p">)</span>
-</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</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-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">only</span> <span class="ow">and</span> <span class="n">with_ties</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;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</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="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-2570"><a href="#Parser-2570"><span class="linenos">2570</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="Parser-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="Parser-2573"><a href="#Parser-2573"><span class="linenos">2573</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-2574"><a href="#Parser-2574"><span class="linenos">2574</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-2575"><a href="#Parser-2575"><span class="linenos">2575</span></a> <span class="p">)</span>
-</span><span id="Parser-2576"><a href="#Parser-2576"><span class="linenos">2576</span></a>
-</span><span id="Parser-2577"><a href="#Parser-2577"><span class="linenos">2577</span></a> <span class="k">return</span> <span class="n">this</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="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-2580"><a href="#Parser-2580"><span class="linenos">2580</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">OFFSET</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-2581"><a href="#Parser-2581"><span class="linenos">2581</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a>
-</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</span></a> <span class="n">count</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-2584"><a href="#Parser-2584"><span class="linenos">2584</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-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_lock</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2588"><a href="#Parser-2588"><span class="linenos">2588</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-2589"><a href="#Parser-2589"><span class="linenos">2589</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2590"><a href="#Parser-2590"><span class="linenos">2590</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;SHARE&quot;</span><span class="p">):</span>
-</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">False</span><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">return</span> <span class="kc">None</span>
-</span><span id="Parser-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a>
-</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</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-2596"><a href="#Parser-2596"><span class="linenos">2596</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">SET_OPERATIONS</span><span class="p">):</span>
-</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a> <span class="k">return</span> <span class="n">this</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="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-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a>
-</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</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-2602"><a href="#Parser-2602"><span class="linenos">2602</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
-</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</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-2604"><a href="#Parser-2604"><span class="linenos">2604</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
-</span><span id="Parser-2605"><a href="#Parser-2605"><span class="linenos">2605</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
+</span><span id="Parser-2563"><a href="#Parser-2563"><span class="linenos">2563</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2564"><a href="#Parser-2564"><span class="linenos">2564</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-2565"><a href="#Parser-2565"><span class="linenos">2565</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="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
+</span><span id="Parser-2566"><a href="#Parser-2566"><span class="linenos">2566</span></a>
+</span><span id="Parser-2567"><a href="#Parser-2567"><span class="linenos">2567</span></a> <span class="n">count</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-2568"><a href="#Parser-2568"><span class="linenos">2568</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-2569"><a href="#Parser-2569"><span class="linenos">2569</span></a>
+</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">_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-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="n">only</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">ONLY</span><span class="p">)</span>
+</span><span id="Parser-2573"><a href="#Parser-2573"><span class="linenos">2573</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-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="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-2576"><a href="#Parser-2576"><span class="linenos">2576</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-2577"><a href="#Parser-2577"><span class="linenos">2577</span></a>
+</span><span id="Parser-2578"><a href="#Parser-2578"><span class="linenos">2578</span></a> <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-2579"><a href="#Parser-2579"><span class="linenos">2579</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="Parser-2580"><a href="#Parser-2580"><span class="linenos">2580</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="Parser-2581"><a href="#Parser-2581"><span class="linenos">2581</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</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-2584"><a href="#Parser-2584"><span class="linenos">2584</span></a> <span class="p">)</span>
+</span><span id="Parser-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a>
+</span><span id="Parser-2586"><a href="#Parser-2586"><span class="linenos">2586</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</span></a>
+</span><span id="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</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-2589"><a href="#Parser-2589"><span class="linenos">2589</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">OFFSET</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-2590"><a href="#Parser-2590"><span class="linenos">2590</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</span></a>
+</span><span id="Parser-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a> <span class="n">count</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-2593"><a href="#Parser-2593"><span class="linenos">2593</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-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a>
+</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="k">def</span> <span class="nf">_parse_lock</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2597"><a href="#Parser-2597"><span class="linenos">2597</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-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</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;SHARE&quot;</span><span class="p">):</span>
+</span><span id="Parser-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</span></a>
+</span><span id="Parser-2602"><a href="#Parser-2602"><span class="linenos">2602</span></a> <span class="k">return</span> <span class="kc">None</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">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-2605"><a href="#Parser-2605"><span class="linenos">2605</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">SET_OPERATIONS</span><span class="p">):</span>
+</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a>
-</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</span></a> <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-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a> <span class="n">expression</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="n">this</span><span class="p">,</span>
-</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</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-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a> <span class="n">expression</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="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-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="p">)</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">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-2616"><a href="#Parser-2616"><span class="linenos">2616</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-2617"><a href="#Parser-2617"><span class="linenos">2617</span></a>
-</span><span id="Parser-2618"><a href="#Parser-2618"><span class="linenos">2618</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-2619"><a href="#Parser-2619"><span class="linenos">2619</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-2620"><a href="#Parser-2620"><span class="linenos">2620</span></a>
-</span><span id="Parser-2621"><a href="#Parser-2621"><span class="linenos">2621</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-2622"><a href="#Parser-2622"><span class="linenos">2622</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-2608"><a href="#Parser-2608"><span class="linenos">2608</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-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a>
+</span><span id="Parser-2610"><a href="#Parser-2610"><span class="linenos">2610</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-2611"><a href="#Parser-2611"><span class="linenos">2611</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
+</span><span id="Parser-2612"><a href="#Parser-2612"><span class="linenos">2612</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-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
+</span><span id="Parser-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
+</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a>
+</span><span id="Parser-2617"><a href="#Parser-2617"><span class="linenos">2617</span></a> <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-2618"><a href="#Parser-2618"><span class="linenos">2618</span></a> <span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2620"><a href="#Parser-2620"><span class="linenos">2620</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-2621"><a href="#Parser-2621"><span class="linenos">2621</span></a> <span class="n">expression</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="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-2622"><a href="#Parser-2622"><span class="linenos">2622</span></a> <span class="p">)</span>
</span><span id="Parser-2623"><a href="#Parser-2623"><span class="linenos">2623</span></a>
-</span><span id="Parser-2624"><a href="#Parser-2624"><span class="linenos">2624</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-2625"><a href="#Parser-2625"><span class="linenos">2625</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-2624"><a href="#Parser-2624"><span class="linenos">2624</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-2625"><a href="#Parser-2625"><span class="linenos">2625</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-2626"><a href="#Parser-2626"><span class="linenos">2626</span></a>
-</span><span id="Parser-2627"><a href="#Parser-2627"><span class="linenos">2627</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2628"><a href="#Parser-2628"><span class="linenos">2628</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-2629"><a href="#Parser-2629"><span class="linenos">2629</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-2630"><a href="#Parser-2630"><span class="linenos">2630</span></a>
-</span><span id="Parser-2631"><a href="#Parser-2631"><span class="linenos">2631</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-2632"><a href="#Parser-2632"><span class="linenos">2632</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-2633"><a href="#Parser-2633"><span class="linenos">2633</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-2634"><a href="#Parser-2634"><span class="linenos">2634</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2627"><a href="#Parser-2627"><span class="linenos">2627</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-2628"><a href="#Parser-2628"><span class="linenos">2628</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-2629"><a href="#Parser-2629"><span class="linenos">2629</span></a>
+</span><span id="Parser-2630"><a href="#Parser-2630"><span class="linenos">2630</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-2631"><a href="#Parser-2631"><span class="linenos">2631</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-2632"><a href="#Parser-2632"><span class="linenos">2632</span></a>
+</span><span id="Parser-2633"><a href="#Parser-2633"><span class="linenos">2633</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-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">_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-2635"><a href="#Parser-2635"><span class="linenos">2635</span></a>
-</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">expression</span>
-</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</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-2638"><a href="#Parser-2638"><span class="linenos">2638</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-2636"><a href="#Parser-2636"><span class="linenos">2636</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2637"><a href="#Parser-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">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</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-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="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="Parser-2642"><a href="#Parser-2642"><span class="linenos">2642</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2643"><a href="#Parser-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">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-2644"><a href="#Parser-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">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-2645"><a href="#Parser-2645"><span class="linenos">2645</span></a>
-</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
-</span><span id="Parser-2647"><a href="#Parser-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">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-2640"><a href="#Parser-2640"><span class="linenos">2640</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-2641"><a href="#Parser-2641"><span class="linenos">2641</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-2642"><a href="#Parser-2642"><span class="linenos">2642</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-2643"><a href="#Parser-2643"><span class="linenos">2643</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2644"><a href="#Parser-2644"><span class="linenos">2644</span></a>
+</span><span id="Parser-2645"><a href="#Parser-2645"><span class="linenos">2645</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</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-2647"><a href="#Parser-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">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-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">if</span> <span class="bp">self</span><span 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-2650"><a href="#Parser-2650"><span class="linenos">2650</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-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">return</span> <span class="n">this</span>
-</span><span id="Parser-2653"><a href="#Parser-2653"><span class="linenos">2653</span></a>
-</span><span id="Parser-2654"><a href="#Parser-2654"><span class="linenos">2654</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-2655"><a href="#Parser-2655"><span class="linenos">2655</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-2656"><a href="#Parser-2656"><span class="linenos">2656</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-2657"><a href="#Parser-2657"><span class="linenos">2657</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_FROM</span><span class="p">):</span>
-</span><span id="Parser-2658"><a href="#Parser-2658"><span class="linenos">2658</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-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a> <span class="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_expression</span><span class="p">())</span>
+</span><span id="Parser-2649"><a href="#Parser-2649"><span class="linenos">2649</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="Parser-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2652"><a href="#Parser-2652"><span class="linenos">2652</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-2653"><a href="#Parser-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">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-2654"><a href="#Parser-2654"><span class="linenos">2654</span></a>
+</span><span id="Parser-2655"><a href="#Parser-2655"><span class="linenos">2655</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
+</span><span id="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</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-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="k">if</span> <span class="bp">self</span><span 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-2659"><a href="#Parser-2659"><span class="linenos">2659</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-2660"><a href="#Parser-2660"><span class="linenos">2660</span></a>
-</span><span id="Parser-2661"><a href="#Parser-2661"><span class="linenos">2661</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-2662"><a href="#Parser-2662"><span class="linenos">2662</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-2663"><a href="#Parser-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="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2665"><a href="#Parser-2665"><span class="linenos">2665</span></a>
-</span><span id="Parser-2666"><a href="#Parser-2666"><span class="linenos">2666</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-2667"><a href="#Parser-2667"><span class="linenos">2667</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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="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-2670"><a href="#Parser-2670"><span class="linenos">2670</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-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Parser-2672"><a href="#Parser-2672"><span class="linenos">2672</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-2673"><a href="#Parser-2673"><span class="linenos">2673</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">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-2674"><a href="#Parser-2674"><span class="linenos">2674</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_select_or_expression</span><span class="p">)</span>
-</span><span id="Parser-2675"><a href="#Parser-2675"><span class="linenos">2675</span></a>
-</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</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-2677"><a href="#Parser-2677"><span class="linenos">2677</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-2678"><a href="#Parser-2678"><span class="linenos">2678</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2679"><a href="#Parser-2679"><span class="linenos">2679</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-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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</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-2661"><a href="#Parser-2661"><span class="linenos">2661</span></a> <span class="k">return</span> <span class="n">this</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">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-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 class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-2665"><a href="#Parser-2665"><span class="linenos">2665</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-2666"><a href="#Parser-2666"><span class="linenos">2666</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_FROM</span><span class="p">):</span>
+</span><span id="Parser-2667"><a href="#Parser-2667"><span class="linenos">2667</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-2668"><a href="#Parser-2668"><span class="linenos">2668</span></a> <span class="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_expression</span><span class="p">())</span>
+</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</span></a>
+</span><span id="Parser-2670"><a href="#Parser-2670"><span class="linenos">2670</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-2671"><a href="#Parser-2671"><span class="linenos">2671</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-2672"><a href="#Parser-2672"><span class="linenos">2672</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-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-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">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-2676"><a href="#Parser-2676"><span class="linenos">2676</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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="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-2679"><a href="#Parser-2679"><span class="linenos">2679</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-2680"><a href="#Parser-2680"><span class="linenos">2680</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-2681"><a href="#Parser-2681"><span class="linenos">2681</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-2682"><a href="#Parser-2682"><span class="linenos">2682</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">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</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_select_or_expression</span><span class="p">)</span>
</span><span id="Parser-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a>
-</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2686"><a href="#Parser-2686"><span class="linenos">2686</span></a>
-</span><span id="Parser-2687"><a href="#Parser-2687"><span class="linenos">2687</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">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-2688"><a href="#Parser-2688"><span class="linenos">2688</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-2689"><a href="#Parser-2689"><span class="linenos">2689</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-2690"><a href="#Parser-2690"><span class="linenos">2690</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-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2692"><a href="#Parser-2692"><span class="linenos">2692</span></a>
-</span><span id="Parser-2693"><a href="#Parser-2693"><span class="linenos">2693</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-2694"><a href="#Parser-2694"><span class="linenos">2694</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-2695"><a href="#Parser-2695"><span class="linenos">2695</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2696"><a href="#Parser-2696"><span class="linenos">2696</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2697"><a href="#Parser-2697"><span class="linenos">2697</span></a>
-</span><span id="Parser-2698"><a href="#Parser-2698"><span class="linenos">2698</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2699"><a href="#Parser-2699"><span class="linenos">2699</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><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</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-2686"><a href="#Parser-2686"><span class="linenos">2686</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-2687"><a href="#Parser-2687"><span class="linenos">2687</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2688"><a href="#Parser-2688"><span class="linenos">2688</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-2689"><a href="#Parser-2689"><span class="linenos">2689</span></a>
+</span><span id="Parser-2690"><a href="#Parser-2690"><span class="linenos">2690</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-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2692"><a href="#Parser-2692"><span class="linenos">2692</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-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">return</span> <span class="n">this</span>
+</span><span id="Parser-2695"><a href="#Parser-2695"><span class="linenos">2695</span></a>
+</span><span id="Parser-2696"><a href="#Parser-2696"><span class="linenos">2696</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">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-2697"><a href="#Parser-2697"><span class="linenos">2697</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-2698"><a href="#Parser-2698"><span class="linenos">2698</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-2699"><a href="#Parser-2699"><span class="linenos">2699</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-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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 class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-2703"><a href="#Parser-2703"><span class="linenos">2703</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
-</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a>
-</span><span id="Parser-2705"><a href="#Parser-2705"><span class="linenos">2705</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-2706"><a href="#Parser-2706"><span class="linenos">2706</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="Parser-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a> <span class="k">if</span> <span class="n">this</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><span id="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</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-2702"><a href="#Parser-2702"><span class="linenos">2702</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-2703"><a href="#Parser-2703"><span class="linenos">2703</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-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a> <span class="k">return</span> <span class="n">this</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">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-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_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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="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><span id="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a>
-</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</span></a> <span class="c1"># Try to not clutter Snowflake&#39;s multi-part intervals like INTERVAL &#39;1 day, 1 year&#39;</span>
-</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</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-2713"><a href="#Parser-2713"><span class="linenos">2713</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</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="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">seq_get</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-2715"><a href="#Parser-2715"><span class="linenos">2715</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">seq_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</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">return</span> <span class="bp">self</span><span 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-2718"><a href="#Parser-2718"><span class="linenos">2718</span></a>
-</span><span id="Parser-2719"><a href="#Parser-2719"><span class="linenos">2719</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-2720"><a href="#Parser-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">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-2721"><a href="#Parser-2721"><span class="linenos">2721</span></a>
-</span><span id="Parser-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</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-2724"><a href="#Parser-2724"><span class="linenos">2724</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-2725"><a href="#Parser-2725"><span class="linenos">2725</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-2726"><a href="#Parser-2726"><span class="linenos">2726</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</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-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="p">)</span>
-</span><span id="Parser-2729"><a href="#Parser-2729"><span class="linenos">2729</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-2730"><a href="#Parser-2730"><span class="linenos">2730</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-2731"><a href="#Parser-2731"><span class="linenos">2731</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-2732"><a href="#Parser-2732"><span class="linenos">2732</span></a> <span class="p">)</span>
-</span><span id="Parser-2733"><a href="#Parser-2733"><span class="linenos">2733</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-2734"><a href="#Parser-2734"><span class="linenos">2734</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-2735"><a href="#Parser-2735"><span class="linenos">2735</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-2736"><a href="#Parser-2736"><span class="linenos">2736</span></a> <span class="p">)</span>
-</span><span id="Parser-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</span></a> <span class="k">break</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="k">return</span> <span class="n">this</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">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-2743"><a href="#Parser-2743"><span class="linenos">2743</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-2744"><a href="#Parser-2744"><span class="linenos">2744</span></a>
-</span><span id="Parser-2745"><a href="#Parser-2745"><span class="linenos">2745</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-2746"><a href="#Parser-2746"><span class="linenos">2746</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">FACTOR</span><span class="p">)</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">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-2749"><a href="#Parser-2749"><span class="linenos">2749</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-2750"><a href="#Parser-2750"><span class="linenos">2750</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-2751"><a href="#Parser-2751"><span class="linenos">2751</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-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="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a> <span class="n">interval</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><span id="Parser-2755"><a href="#Parser-2755"><span class="linenos">2755</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
-</span><span id="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a> <span class="k">return</span> <span class="n">interval</span>
-</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</span></a>
-</span><span id="Parser-2758"><a href="#Parser-2758"><span class="linenos">2758</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-2759"><a href="#Parser-2759"><span class="linenos">2759</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><span id="Parser-2760"><a href="#Parser-2760"><span class="linenos">2760</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-2711"><a href="#Parser-2711"><span class="linenos">2711</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 class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-2713"><a href="#Parser-2713"><span class="linenos">2713</span></a>
+</span><span id="Parser-2714"><a href="#Parser-2714"><span class="linenos">2714</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-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="Parser-2716"><a href="#Parser-2716"><span class="linenos">2716</span></a> <span class="k">if</span> <span class="n">this</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><span id="Parser-2717"><a href="#Parser-2717"><span class="linenos">2717</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="Parser-2718"><a href="#Parser-2718"><span class="linenos">2718</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-2719"><a href="#Parser-2719"><span class="linenos">2719</span></a>
+</span><span id="Parser-2720"><a href="#Parser-2720"><span class="linenos">2720</span></a> <span class="c1"># Try to not clutter Snowflake&#39;s multi-part intervals like INTERVAL &#39;1 day, 1 year&#39;</span>
+</span><span id="Parser-2721"><a href="#Parser-2721"><span class="linenos">2721</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-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</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">seq_get</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-2724"><a href="#Parser-2724"><span class="linenos">2724</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">seq_get</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</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="k">return</span> <span class="bp">self</span><span 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-2727"><a href="#Parser-2727"><span class="linenos">2727</span></a>
+</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</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-2729"><a href="#Parser-2729"><span class="linenos">2729</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-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a>
+</span><span id="Parser-2731"><a href="#Parser-2731"><span class="linenos">2731</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</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-2733"><a href="#Parser-2733"><span class="linenos">2733</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-2734"><a href="#Parser-2734"><span class="linenos">2734</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-2735"><a href="#Parser-2735"><span class="linenos">2735</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2736"><a href="#Parser-2736"><span class="linenos">2736</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-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="p">)</span>
+</span><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</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-2739"><a href="#Parser-2739"><span class="linenos">2739</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-2740"><a href="#Parser-2740"><span class="linenos">2740</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-2741"><a href="#Parser-2741"><span class="linenos">2741</span></a> <span class="p">)</span>
+</span><span id="Parser-2742"><a href="#Parser-2742"><span class="linenos">2742</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-2743"><a href="#Parser-2743"><span class="linenos">2743</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-2744"><a href="#Parser-2744"><span class="linenos">2744</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-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a> <span class="p">)</span>
+</span><span id="Parser-2746"><a href="#Parser-2746"><span class="linenos">2746</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2747"><a href="#Parser-2747"><span class="linenos">2747</span></a> <span class="k">break</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="n">this</span>
+</span><span id="Parser-2750"><a href="#Parser-2750"><span class="linenos">2750</span></a>
+</span><span id="Parser-2751"><a href="#Parser-2751"><span class="linenos">2751</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-2752"><a href="#Parser-2752"><span class="linenos">2752</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-2753"><a href="#Parser-2753"><span class="linenos">2753</span></a>
+</span><span id="Parser-2754"><a href="#Parser-2754"><span class="linenos">2754</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-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">_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">FACTOR</span><span class="p">)</span>
+</span><span id="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a>
+</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</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-2758"><a href="#Parser-2758"><span class="linenos">2758</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-2759"><a href="#Parser-2759"><span class="linenos">2759</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-2760"><a href="#Parser-2760"><span class="linenos">2760</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-2761"><a href="#Parser-2761"><span class="linenos">2761</span></a>
-</span><span id="Parser-2762"><a href="#Parser-2762"><span class="linenos">2762</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="Parser-2763"><a href="#Parser-2763"><span class="linenos">2763</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-2764"><a href="#Parser-2764"><span class="linenos">2764</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-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</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-2767"><a href="#Parser-2767"><span class="linenos">2767</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2768"><a href="#Parser-2768"><span class="linenos">2768</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">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="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</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-2770"><a href="#Parser-2770"><span class="linenos">2770</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-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a> <span class="k">return</span> <span class="n">data_type</span>
-</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</span></a>
-</span><span id="Parser-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a>
-</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2776"><a href="#Parser-2776"><span class="linenos">2776</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-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a>
-</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</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-2779"><a href="#Parser-2779"><span class="linenos">2779</span></a>
-</span><span id="Parser-2780"><a href="#Parser-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">_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-2781"><a href="#Parser-2781"><span class="linenos">2781</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</span></a>
-</span><span id="Parser-2783"><a href="#Parser-2783"><span class="linenos">2783</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-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="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-2786"><a href="#Parser-2786"><span class="linenos">2786</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="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="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-2789"><a href="#Parser-2789"><span class="linenos">2789</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span>
-</span><span id="Parser-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</span></a>
-</span><span id="Parser-2793"><a href="#Parser-2793"><span class="linenos">2793</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2794"><a href="#Parser-2794"><span class="linenos">2794</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-2795"><a href="#Parser-2795"><span class="linenos">2795</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_kwargs</span><span class="p">)</span>
-</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</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_types</span><span class="p">)</span>
-</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</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-2800"><a href="#Parser-2800"><span class="linenos">2800</span></a>
-</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</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-2802"><a href="#Parser-2802"><span class="linenos">2802</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-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</span></a>
-</span><span id="Parser-2805"><a href="#Parser-2805"><span class="linenos">2805</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-2806"><a href="#Parser-2806"><span class="linenos">2806</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</span></a>
-</span><span id="Parser-2808"><a href="#Parser-2808"><span class="linenos">2808</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">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-2809"><a href="#Parser-2809"><span class="linenos">2809</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-2810"><a href="#Parser-2810"><span class="linenos">2810</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><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</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 class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)],</span>
-</span><span id="Parser-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-2813"><a href="#Parser-2813"><span class="linenos">2813</span></a> <span class="p">)</span>
-</span><span id="Parser-2814"><a href="#Parser-2814"><span class="linenos">2814</span></a>
-</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</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-2816"><a href="#Parser-2816"><span class="linenos">2816</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-2817"><a href="#Parser-2817"><span class="linenos">2817</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><span id="Parser-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a> <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="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="p">)</span>
-</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a>
-</span><span id="Parser-2822"><a href="#Parser-2822"><span class="linenos">2822</span></a> <span class="k">return</span> <span class="n">this</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">if</span> <span class="bp">self</span><span 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_BRACKET</span><span class="p">):</span>
-</span><span id="Parser-2825"><a href="#Parser-2825"><span class="linenos">2825</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-2826"><a href="#Parser-2826"><span class="linenos">2826</span></a> <span class="k">return</span> <span class="kc">None</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="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">t</span><span class="o">.</span><span class="n">Optional</span><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-2829"><a href="#Parser-2829"><span class="linenos">2829</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-2830"><a href="#Parser-2830"><span class="linenos">2830</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</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_kwargs</span><span class="p">)</span>
-</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</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_types</span><span class="p">)</span>
-</span><span id="Parser-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a>
-</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</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-2836"><a href="#Parser-2836"><span class="linenos">2836</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-2837"><a href="#Parser-2837"><span class="linenos">2837</span></a>
-</span><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</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-2839"><a href="#Parser-2839"><span class="linenos">2839</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-2840"><a href="#Parser-2840"><span class="linenos">2840</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-2841"><a href="#Parser-2841"><span class="linenos">2841</span></a>
-</span><span id="Parser-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a> <span class="n">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="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</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-2844"><a href="#Parser-2844"><span class="linenos">2844</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span>
-</span><span id="Parser-2845"><a href="#Parser-2845"><span class="linenos">2845</span></a> <span class="n">value</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">TIMESTAMPTZ</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-2846"><a href="#Parser-2846"><span class="linenos">2846</span></a> <span class="k">elif</span> <span class="p">(</span>
-</span><span id="Parser-2847"><a href="#Parser-2847"><span class="linenos">2847</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">WITH_LOCAL_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span>
-</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a> <span class="p">):</span>
-</span><span id="Parser-2849"><a href="#Parser-2849"><span class="linenos">2849</span></a> <span class="n">value</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-2850"><a href="#Parser-2850"><span class="linenos">2850</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">WITHOUT_TIME_ZONE</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">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">:</span>
-</span><span id="Parser-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="n">value</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">TIME</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-2853"><a href="#Parser-2853"><span class="linenos">2853</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="n">value</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">TIMESTAMP</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-2855"><a href="#Parser-2855"><span class="linenos">2855</span></a>
-</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span>
-</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a>
-</span><span id="Parser-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a> <span class="n">value</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">TIMESTAMP</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-2860"><a href="#Parser-2860"><span class="linenos">2860</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-2861"><a href="#Parser-2861"><span class="linenos">2861</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-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a>
-</span><span id="Parser-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Parser-2864"><a href="#Parser-2864"><span class="linenos">2864</span></a> <span class="n">value</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="n">exp</span><span 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="Parser-2865"><a href="#Parser-2865"><span class="linenos">2865</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a> <span class="n">value</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-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a>
-</span><span id="Parser-2868"><a href="#Parser-2868"><span class="linenos">2868</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-2869"><a href="#Parser-2869"><span class="linenos">2869</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-2870"><a href="#Parser-2870"><span class="linenos">2870</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-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="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</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-2874"><a href="#Parser-2874"><span class="linenos">2874</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2762"><a href="#Parser-2762"><span class="linenos">2762</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2763"><a href="#Parser-2763"><span class="linenos">2763</span></a> <span class="n">interval</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><span id="Parser-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="Parser-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a> <span class="k">return</span> <span class="n">interval</span>
+</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</span></a>
+</span><span id="Parser-2767"><a href="#Parser-2767"><span class="linenos">2767</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-2768"><a href="#Parser-2768"><span class="linenos">2768</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><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</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-2770"><a href="#Parser-2770"><span class="linenos">2770</span></a>
+</span><span id="Parser-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</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-2773"><a href="#Parser-2773"><span class="linenos">2773</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-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</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-2776"><a href="#Parser-2776"><span class="linenos">2776</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2777"><a href="#Parser-2777"><span class="linenos">2777</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">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="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</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-2779"><a href="#Parser-2779"><span class="linenos">2779</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-2780"><a href="#Parser-2780"><span class="linenos">2780</span></a> <span class="k">return</span> <span class="n">data_type</span>
+</span><span id="Parser-2781"><a href="#Parser-2781"><span class="linenos">2781</span></a>
+</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2783"><a href="#Parser-2783"><span class="linenos">2783</span></a>
+</span><span id="Parser-2784"><a href="#Parser-2784"><span class="linenos">2784</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span><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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2785"><a href="#Parser-2785"><span class="linenos">2785</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-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="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-2788"><a href="#Parser-2788"><span class="linenos">2788</span></a>
+</span><span id="Parser-2789"><a href="#Parser-2789"><span class="linenos">2789</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-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a>
+</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</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-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">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-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a> <span class="k">return</span> <span class="bp">self</span><span 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="p">)</span>
+</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a>
+</span><span id="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</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-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span>
+</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</span></a> <span class="n">expressions</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">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</span></a>
+</span><span id="Parser-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</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_kwargs</span><span class="p">)</span>
+</span><span id="Parser-2805"><a href="#Parser-2805"><span class="linenos">2805</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="Parser-2806"><a href="#Parser-2806"><span class="linenos">2806</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_types</span><span class="p">)</span>
+</span><span id="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2808"><a href="#Parser-2808"><span class="linenos">2808</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-2809"><a href="#Parser-2809"><span class="linenos">2809</span></a>
+</span><span id="Parser-2810"><a href="#Parser-2810"><span class="linenos">2810</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-2811"><a href="#Parser-2811"><span class="linenos">2811</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-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="k">return</span> <span class="kc">None</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="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</span></a>
+</span><span id="Parser-2816"><a href="#Parser-2816"><span class="linenos">2816</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">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-2817"><a href="#Parser-2817"><span class="linenos">2817</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-2818"><a href="#Parser-2818"><span class="linenos">2818</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><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</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 class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)],</span>
+</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a> <span class="p">)</span>
+</span><span id="Parser-2822"><a href="#Parser-2822"><span class="linenos">2822</span></a>
+</span><span id="Parser-2823"><a href="#Parser-2823"><span class="linenos">2823</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-2824"><a href="#Parser-2824"><span class="linenos">2824</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-2825"><a href="#Parser-2825"><span class="linenos">2825</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><span id="Parser-2826"><a href="#Parser-2826"><span class="linenos">2826</span></a> <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="Parser-2827"><a href="#Parser-2827"><span class="linenos">2827</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-2828"><a href="#Parser-2828"><span class="linenos">2828</span></a> <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="n">this</span>
+</span><span id="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</span></a>
+</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_BRACKET</span><span class="p">):</span>
+</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</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-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</span></a>
+</span><span id="Parser-2836"><a href="#Parser-2836"><span class="linenos">2836</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">t</span><span class="o">.</span><span class="n">Optional</span><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-2837"><a href="#Parser-2837"><span class="linenos">2837</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-2838"><a href="#Parser-2838"><span class="linenos">2838</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-2839"><a href="#Parser-2839"><span class="linenos">2839</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_kwargs</span><span class="p">)</span>
+</span><span id="Parser-2840"><a href="#Parser-2840"><span class="linenos">2840</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2841"><a href="#Parser-2841"><span class="linenos">2841</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_types</span><span class="p">)</span>
+</span><span id="Parser-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a>
+</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</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-2844"><a href="#Parser-2844"><span class="linenos">2844</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-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="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-2847"><a href="#Parser-2847"><span class="linenos">2847</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-2848"><a href="#Parser-2848"><span class="linenos">2848</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-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">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="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</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-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">if</span> <span class="bp">self</span><span 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_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">:</span>
+</span><span id="Parser-2853"><a href="#Parser-2853"><span class="linenos">2853</span></a> <span class="n">value</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">TIMESTAMPTZ</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-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="k">elif</span> <span class="p">(</span>
+</span><span id="Parser-2855"><a href="#Parser-2855"><span class="linenos">2855</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">WITH_LOCAL_TIME_ZONE</span><span class="p">)</span> <span class="ow">or</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span>
+</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="p">):</span>
+</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="n">value</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-2858"><a href="#Parser-2858"><span class="linenos">2858</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">WITHOUT_TIME_ZONE</span><span class="p">):</span>
+</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</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">TIME</span><span class="p">:</span>
+</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="n">value</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">TIME</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-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a> <span class="n">value</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">TIMESTAMP</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-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="n">maybe_func</span> <span class="o">=</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span>
+</span><span id="Parser-2865"><a href="#Parser-2865"><span class="linenos">2865</span></a>
+</span><span id="Parser-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a> <span class="n">value</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">TIMESTAMP</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-2868"><a href="#Parser-2868"><span class="linenos">2868</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-2869"><a href="#Parser-2869"><span class="linenos">2869</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-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a>
+</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Parser-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a> <span class="n">value</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="n">exp</span><span 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="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2874"><a href="#Parser-2874"><span class="linenos">2874</span></a> <span class="n">value</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-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a>
-</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</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-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="n">value</span><span class="p">:</span>
-</span><span id="Parser-2879"><a href="#Parser-2879"><span class="linenos">2879</span></a> <span class="k">return</span> <span class="n">value</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="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</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="o">.</span><span class="n">upper</span><span class="p">()],</span>
-</span><span id="Parser-2883"><a href="#Parser-2883"><span class="linenos">2883</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-2884"><a href="#Parser-2884"><span class="linenos">2884</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="Parser-2885"><a href="#Parser-2885"><span class="linenos">2885</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="Parser-2886"><a href="#Parser-2886"><span class="linenos">2886</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a> <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">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="Parser-2877"><a href="#Parser-2877"><span class="linenos">2877</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-2878"><a href="#Parser-2878"><span class="linenos">2878</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-2879"><a href="#Parser-2879"><span class="linenos">2879</span></a>
+</span><span id="Parser-2880"><a href="#Parser-2880"><span class="linenos">2880</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-2881"><a href="#Parser-2881"><span class="linenos">2881</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-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="k">return</span> <span class="kc">None</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="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-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="n">value</span><span class="p">:</span>
+</span><span id="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a> <span class="k">return</span> <span class="n">value</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">def</span> <span class="nf">_parse_struct_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2890"><a href="#Parser-2890"><span class="linenos">2890</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-2891"><a href="#Parser-2891"><span class="linenos">2891</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-2892"><a href="#Parser-2892"><span class="linenos">2892</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-2893"><a href="#Parser-2893"><span class="linenos">2893</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><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="n">data_type</span><span class="p">:</span>
-</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</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-2897"><a href="#Parser-2897"><span class="linenos">2897</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-2898"><a href="#Parser-2898"><span class="linenos">2898</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span 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">data_type</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">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-2901"><a href="#Parser-2901"><span class="linenos">2901</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">AT_TIME_ZONE</span><span class="p">):</span>
-</span><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-2904"><a href="#Parser-2904"><span class="linenos">2904</span></a>
-</span><span id="Parser-2905"><a href="#Parser-2905"><span class="linenos">2905</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-2906"><a href="#Parser-2906"><span class="linenos">2906</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-2907"><a href="#Parser-2907"><span class="linenos">2907</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-2908"><a href="#Parser-2908"><span class="linenos">2908</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-2909"><a href="#Parser-2909"><span class="linenos">2909</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-2910"><a href="#Parser-2910"><span class="linenos">2910</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-2911"><a href="#Parser-2911"><span class="linenos">2911</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-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</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">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="o">.</span><span class="n">upper</span><span class="p">()],</span>
+</span><span id="Parser-2891"><a href="#Parser-2891"><span class="linenos">2891</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-2892"><a href="#Parser-2892"><span class="linenos">2892</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="Parser-2893"><a href="#Parser-2893"><span class="linenos">2893</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="Parser-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</span></a> <span class="p">)</span>
+</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</span></a>
+</span><span id="Parser-2897"><a href="#Parser-2897"><span class="linenos">2897</span></a> <span class="k">def</span> <span class="nf">_parse_struct_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-2898"><a href="#Parser-2898"><span class="linenos">2898</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-2899"><a href="#Parser-2899"><span class="linenos">2899</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-2900"><a href="#Parser-2900"><span class="linenos">2900</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-2901"><a href="#Parser-2901"><span class="linenos">2901</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><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a>
+</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="Parser-2904"><a href="#Parser-2904"><span class="linenos">2904</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-2905"><a href="#Parser-2905"><span class="linenos">2905</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-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StructKwarg</span><span 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">data_type</span><span class="p">)</span>
+</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</span></a>
+</span><span id="Parser-2908"><a href="#Parser-2908"><span class="linenos">2908</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-2909"><a href="#Parser-2909"><span class="linenos">2909</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">AT_TIME_ZONE</span><span class="p">):</span>
+</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 class="k">return</span> <span class="bp">self</span><span 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-2912"><a href="#Parser-2912"><span class="linenos">2912</span></a>
-</span><span id="Parser-2913"><a href="#Parser-2913"><span class="linenos">2913</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-2914"><a href="#Parser-2914"><span class="linenos">2914</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-2915"><a href="#Parser-2915"><span class="linenos">2915</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-2916"><a href="#Parser-2916"><span class="linenos">2916</span></a>
-</span><span id="Parser-2917"><a href="#Parser-2917"><span class="linenos">2917</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-2918"><a href="#Parser-2918"><span class="linenos">2918</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-2919"><a href="#Parser-2919"><span class="linenos">2919</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-2920"><a href="#Parser-2920"><span class="linenos">2920</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-2921"><a href="#Parser-2921"><span class="linenos">2921</span></a> <span class="k">elif</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="Parser-2922"><a href="#Parser-2922"><span class="linenos">2922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-2923"><a href="#Parser-2923"><span class="linenos">2923</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-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a> <span class="n">field</span> <span class="o">=</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">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-2926"><a href="#Parser-2926"><span class="linenos">2926</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-2927"><a href="#Parser-2927"><span class="linenos">2927</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-2928"><a href="#Parser-2928"><span class="linenos">2928</span></a> <span class="p">)</span>
-</span><span id="Parser-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="n">field</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 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="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-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a>
-</span><span id="Parser-2932"><a href="#Parser-2932"><span class="linenos">2932</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-2933"><a href="#Parser-2933"><span class="linenos">2933</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="Parser-2934"><a href="#Parser-2934"><span class="linenos">2934</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="Parser-2935"><a href="#Parser-2935"><span class="linenos">2935</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="Parser-2936"><a href="#Parser-2936"><span class="linenos">2936</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-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a>
-</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="Parser-2939"><a href="#Parser-2939"><span class="linenos">2939</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-2940"><a href="#Parser-2940"><span class="linenos">2940</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-2941"><a href="#Parser-2941"><span class="linenos">2941</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-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="Parser-2943"><a href="#Parser-2943"><span class="linenos">2943</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="Parser-2944"><a href="#Parser-2944"><span class="linenos">2944</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-2945"><a href="#Parser-2945"><span class="linenos">2945</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-2946"><a href="#Parser-2946"><span class="linenos">2946</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-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="p">)</span>
-</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2949"><a href="#Parser-2949"><span class="linenos">2949</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-2950"><a href="#Parser-2950"><span class="linenos">2950</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-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">return</span> <span class="n">this</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="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-2955"><a href="#Parser-2955"><span class="linenos">2955</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-2956"><a href="#Parser-2956"><span class="linenos">2956</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-2957"><a href="#Parser-2957"><span class="linenos">2957</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-2958"><a href="#Parser-2958"><span class="linenos">2958</span></a>
-</span><span id="Parser-2959"><a href="#Parser-2959"><span class="linenos">2959</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-2960"><a href="#Parser-2960"><span class="linenos">2960</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-2961"><a href="#Parser-2961"><span class="linenos">2961</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-2962"><a href="#Parser-2962"><span class="linenos">2962</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-2963"><a href="#Parser-2963"><span class="linenos">2963</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-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">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-2965"><a href="#Parser-2965"><span class="linenos">2965</span></a> <span class="k">return</span> <span class="n">primary</span>
-</span><span id="Parser-2966"><a href="#Parser-2966"><span class="linenos">2966</span></a>
-</span><span id="Parser-2967"><a href="#Parser-2967"><span class="linenos">2967</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-2968"><a href="#Parser-2968"><span class="linenos">2968</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-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">if</span> <span class="bp">self</span><span 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-2971"><a href="#Parser-2971"><span class="linenos">2971</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-2972"><a href="#Parser-2972"><span class="linenos">2972</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-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">query</span><span class="p">:</span>
-</span><span id="Parser-2975"><a href="#Parser-2975"><span class="linenos">2975</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-2976"><a href="#Parser-2976"><span class="linenos">2976</span></a> <span class="k">else</span><span class="p">:</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><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</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_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-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="n">this</span> <span class="o">=</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-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a> <span class="bp">self</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="Parser-2983"><a href="#Parser-2983"><span class="linenos">2983</span></a>
-</span><span id="Parser-2984"><a href="#Parser-2984"><span class="linenos">2984</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-2985"><a href="#Parser-2985"><span class="linenos">2985</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-2986"><a href="#Parser-2986"><span class="linenos">2986</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-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a> <span class="p">)</span>
-</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</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-2989"><a href="#Parser-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">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-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</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-2913"><a href="#Parser-2913"><span class="linenos">2913</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-2914"><a href="#Parser-2914"><span class="linenos">2914</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-2915"><a href="#Parser-2915"><span class="linenos">2915</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-2916"><a href="#Parser-2916"><span class="linenos">2916</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-2917"><a href="#Parser-2917"><span class="linenos">2917</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-2918"><a href="#Parser-2918"><span class="linenos">2918</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-2919"><a href="#Parser-2919"><span class="linenos">2919</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-2920"><a href="#Parser-2920"><span class="linenos">2920</span></a>
+</span><span id="Parser-2921"><a href="#Parser-2921"><span class="linenos">2921</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-2922"><a href="#Parser-2922"><span class="linenos">2922</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-2923"><a href="#Parser-2923"><span class="linenos">2923</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-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a>
+</span><span id="Parser-2925"><a href="#Parser-2925"><span class="linenos">2925</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-2926"><a href="#Parser-2926"><span class="linenos">2926</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-2927"><a href="#Parser-2927"><span class="linenos">2927</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-2928"><a href="#Parser-2928"><span class="linenos">2928</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-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="k">elif</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</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-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2933"><a href="#Parser-2933"><span class="linenos">2933</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-2934"><a href="#Parser-2934"><span class="linenos">2934</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-2935"><a href="#Parser-2935"><span class="linenos">2935</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-2936"><a href="#Parser-2936"><span class="linenos">2936</span></a> <span class="p">)</span>
+</span><span id="Parser-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2939"><a href="#Parser-2939"><span class="linenos">2939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-2940"><a href="#Parser-2940"><span class="linenos">2940</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="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</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><span id="Parser-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a> <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="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-2945"><a href="#Parser-2945"><span class="linenos">2945</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="Parser-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
+</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</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-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="k">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</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-2952"><a href="#Parser-2952"><span class="linenos">2952</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-2953"><a href="#Parser-2953"><span class="linenos">2953</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-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="Parser-2956"><a href="#Parser-2956"><span class="linenos">2956</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-2957"><a href="#Parser-2957"><span class="linenos">2957</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-2958"><a href="#Parser-2958"><span class="linenos">2958</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-2959"><a href="#Parser-2959"><span class="linenos">2959</span></a> <span class="p">)</span>
+</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</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-2962"><a href="#Parser-2962"><span class="linenos">2962</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-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="n">this</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_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-2967"><a href="#Parser-2967"><span class="linenos">2967</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-2968"><a href="#Parser-2968"><span class="linenos">2968</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-2969"><a href="#Parser-2969"><span class="linenos">2969</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-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="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-2972"><a href="#Parser-2972"><span class="linenos">2972</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-2973"><a href="#Parser-2973"><span class="linenos">2973</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-2974"><a href="#Parser-2974"><span class="linenos">2974</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-2975"><a href="#Parser-2975"><span class="linenos">2975</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-2976"><a href="#Parser-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 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-2977"><a href="#Parser-2977"><span class="linenos">2977</span></a> <span class="k">return</span> <span class="n">primary</span>
+</span><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</span></a>
+</span><span id="Parser-2979"><a href="#Parser-2979"><span class="linenos">2979</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-2980"><a href="#Parser-2980"><span class="linenos">2980</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-2981"><a href="#Parser-2981"><span class="linenos">2981</span></a>
+</span><span id="Parser-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-2983"><a href="#Parser-2983"><span class="linenos">2983</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-2984"><a href="#Parser-2984"><span class="linenos">2984</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-2985"><a href="#Parser-2985"><span class="linenos">2985</span></a>
+</span><span id="Parser-2986"><a href="#Parser-2986"><span class="linenos">2986</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Parser-2987"><a href="#Parser-2987"><span class="linenos">2987</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-2988"><a href="#Parser-2988"><span class="linenos">2988</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</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-2990"><a href="#Parser-2990"><span class="linenos">2990</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_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-2991"><a href="#Parser-2991"><span class="linenos">2991</span></a> <span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <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">_prev_comments</span><span class="p">)</span>
+</span><span id="Parser-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a> <span class="n">this</span> <span class="o">=</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-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="bp">self</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="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</span></a>
-</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">comments</span><span class="p">:</span>
-</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Parser-2998"><a href="#Parser-2998"><span class="linenos">2998</span></a>
-</span><span id="Parser-2999"><a href="#Parser-2999"><span class="linenos">2999</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a>
-</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="k">return</span> <span class="kc">None</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">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</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-3006"><a href="#Parser-3006"><span class="linenos">3006</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-3007"><a href="#Parser-3007"><span class="linenos">3007</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-3008"><a href="#Parser-3008"><span class="linenos">3008</span></a> <span class="k">return</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_primary</span><span class="p">()</span>
-</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</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-3011"><a href="#Parser-3011"><span class="linenos">3011</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-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">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="bp">self</span><span class="p">,</span> <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><span id="Parser-3016"><a href="#Parser-3016"><span class="linenos">3016</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-3017"><a href="#Parser-3017"><span class="linenos">3017</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-3018"><a href="#Parser-3018"><span class="linenos">3018</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3019"><a href="#Parser-3019"><span class="linenos">3019</span></a>
-</span><span id="Parser-3020"><a href="#Parser-3020"><span class="linenos">3020</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-3021"><a href="#Parser-3021"><span class="linenos">3021</span></a>
-</span><span id="Parser-3022"><a href="#Parser-3022"><span class="linenos">3022</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">NO_PAREN_FUNCTION_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-3023"><a href="#Parser-3023"><span class="linenos">3023</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_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><span id="Parser-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a>
-</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</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-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a> <span class="k">if</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-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</span></a> <span 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-3029"><a href="#Parser-3029"><span class="linenos">3029</span></a>
+</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</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-2997"><a href="#Parser-2997"><span class="linenos">2997</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-2998"><a href="#Parser-2998"><span class="linenos">2998</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-2999"><a href="#Parser-2999"><span class="linenos">2999</span></a> <span class="p">)</span>
+</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</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-3001"><a href="#Parser-3001"><span class="linenos">3001</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-3002"><a href="#Parser-3002"><span class="linenos">3002</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3003"><a href="#Parser-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">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-3004"><a href="#Parser-3004"><span class="linenos">3004</span></a>
+</span><span id="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</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-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <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">_prev_comments</span><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="n">this</span> <span class="ow">and</span> <span class="n">comments</span><span class="p">:</span>
+</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</span></a>
+</span><span id="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</span></a>
+</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3014"><a href="#Parser-3014"><span class="linenos">3014</span></a>
+</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="k">def</span> <span class="nf">_parse_field</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="p">,</span>
+</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</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-3018"><a href="#Parser-3018"><span class="linenos">3018</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-3019"><a href="#Parser-3019"><span class="linenos">3019</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-3020"><a href="#Parser-3020"><span class="linenos">3020</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-3021"><a href="#Parser-3021"><span class="linenos">3021</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-3022"><a href="#Parser-3022"><span class="linenos">3022</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-3023"><a href="#Parser-3023"><span class="linenos">3023</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-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a> <span class="p">)</span>
+</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</span></a>
+</span><span id="Parser-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a> <span class="k">def</span> <span class="nf">_parse_function</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="p">,</span> <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 class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</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-3029"><a href="#Parser-3029"><span class="linenos">3029</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-3030"><a href="#Parser-3030"><span class="linenos">3030</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3031"><a href="#Parser-3031"><span class="linenos">3031</span></a>
-</span><span id="Parser-3032"><a href="#Parser-3032"><span class="linenos">3032</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-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3034"><a href="#Parser-3034"><span class="linenos">3034</span></a>
-</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</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-3036"><a href="#Parser-3036"><span class="linenos">3036</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-3037"><a href="#Parser-3037"><span class="linenos">3037</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-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a>
-</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</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-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a>
-</span><span id="Parser-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</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-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</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-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">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-3047"><a href="#Parser-3047"><span class="linenos">3047</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-3048"><a href="#Parser-3048"><span class="linenos">3048</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-3049"><a href="#Parser-3049"><span class="linenos">3049</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3032"><a href="#Parser-3032"><span class="linenos">3032</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-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a>
+</span><span id="Parser-3034"><a href="#Parser-3034"><span class="linenos">3034</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">NO_PAREN_FUNCTION_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_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><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">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-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="k">if</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-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a> <span 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-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a>
+</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a>
+</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</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-3045"><a href="#Parser-3045"><span class="linenos">3045</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3046"><a href="#Parser-3046"><span class="linenos">3046</span></a>
+</span><span id="Parser-3047"><a href="#Parser-3047"><span class="linenos">3047</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-3048"><a href="#Parser-3048"><span class="linenos">3048</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-3049"><a href="#Parser-3049"><span class="linenos">3049</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-3050"><a href="#Parser-3050"><span class="linenos">3050</span></a>
-</span><span id="Parser-3051"><a href="#Parser-3051"><span class="linenos">3051</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-3052"><a href="#Parser-3052"><span class="linenos">3052</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-3053"><a href="#Parser-3053"><span class="linenos">3053</span></a>
-</span><span id="Parser-3054"><a href="#Parser-3054"><span class="linenos">3054</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-3055"><a href="#Parser-3055"><span class="linenos">3055</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_lambda</span><span class="p">)</span>
-</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</span></a>
-</span><span id="Parser-3057"><a href="#Parser-3057"><span class="linenos">3057</span></a> <span class="k">if</span> <span class="n">function</span><span class="p">:</span>
-</span><span id="Parser-3058"><a href="#Parser-3058"><span class="linenos">3058</span></a> <span class="c1"># Clickhouse supports function calls like foo(x, y)(z), so for these we need to also parse the</span>
-</span><span id="Parser-3059"><a href="#Parser-3059"><span class="linenos">3059</span></a> <span class="c1"># second parameter list (i.e. &quot;(z)&quot;) and the corresponding function will receive both arg lists.</span>
-</span><span id="Parser-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a> <span class="k">if</span> <span class="n">count_params</span><span class="p">(</span><span class="n">function</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a> <span class="n">params</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</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="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</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="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="n">this</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">params</span><span class="p">)</span>
-</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</span></a> <span class="k">else</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="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3051"><a href="#Parser-3051"><span class="linenos">3051</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-3052"><a href="#Parser-3052"><span class="linenos">3052</span></a>
+</span><span id="Parser-3053"><a href="#Parser-3053"><span class="linenos">3053</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-3054"><a href="#Parser-3054"><span class="linenos">3054</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-3055"><a href="#Parser-3055"><span class="linenos">3055</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</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-3057"><a href="#Parser-3057"><span class="linenos">3057</span></a>
+</span><span id="Parser-3058"><a href="#Parser-3058"><span class="linenos">3058</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-3059"><a href="#Parser-3059"><span class="linenos">3059</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-3060"><a href="#Parser-3060"><span class="linenos">3060</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-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</span></a>
+</span><span id="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</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-3064"><a href="#Parser-3064"><span class="linenos">3064</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-3065"><a href="#Parser-3065"><span class="linenos">3065</span></a>
+</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</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-3067"><a href="#Parser-3067"><span class="linenos">3067</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_lambda</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">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</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-3072"><a href="#Parser-3072"><span class="linenos">3072</span></a>
-</span><span id="Parser-3073"><a href="#Parser-3073"><span class="linenos">3073</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-3074"><a href="#Parser-3074"><span class="linenos">3074</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-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="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-3077"><a href="#Parser-3077"><span class="linenos">3077</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-3078"><a href="#Parser-3078"><span class="linenos">3078</span></a>
-</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="Parser-3080"><a href="#Parser-3080"><span class="linenos">3080</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-3081"><a href="#Parser-3081"><span class="linenos">3081</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-3082"><a href="#Parser-3082"><span class="linenos">3082</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-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">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-3085"><a href="#Parser-3085"><span class="linenos">3085</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-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="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-3088"><a href="#Parser-3088"><span class="linenos">3088</span></a> <span class="k">return</span> <span class="n">this</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="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-3091"><a href="#Parser-3091"><span class="linenos">3091</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-3092"><a href="#Parser-3092"><span class="linenos">3092</span></a> <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-3093"><a href="#Parser-3093"><span class="linenos">3093</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-3094"><a href="#Parser-3094"><span class="linenos">3094</span></a> <span class="p">)</span>
+</span><span id="Parser-3069"><a href="#Parser-3069"><span class="linenos">3069</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-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a> <span class="c1"># Clickhouse supports function calls like foo(x, y)(z), so for these we need to also parse the</span>
+</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="c1"># second parameter list (i.e. &quot;(z)&quot;) and the corresponding function will receive both arg lists.</span>
+</span><span id="Parser-3072"><a href="#Parser-3072"><span class="linenos">3072</span></a> <span class="k">if</span> <span class="n">count_params</span><span class="p">(</span><span class="n">function</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Parser-3073"><a href="#Parser-3073"><span class="linenos">3073</span></a> <span class="n">params</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3074"><a href="#Parser-3074"><span class="linenos">3074</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="Parser-3075"><a href="#Parser-3075"><span class="linenos">3075</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="Parser-3076"><a href="#Parser-3076"><span class="linenos">3076</span></a>
+</span><span id="Parser-3077"><a href="#Parser-3077"><span class="linenos">3077</span></a> <span class="n">this</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">params</span><span class="p">)</span>
+</span><span id="Parser-3078"><a href="#Parser-3078"><span class="linenos">3078</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</span></a> <span class="n">this</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-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="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3083"><a href="#Parser-3083"><span class="linenos">3083</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-3084"><a href="#Parser-3084"><span class="linenos">3084</span></a>
+</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">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3086"><a href="#Parser-3086"><span class="linenos">3086</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-3087"><a href="#Parser-3087"><span class="linenos">3087</span></a>
+</span><span id="Parser-3088"><a href="#Parser-3088"><span class="linenos">3088</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-3089"><a href="#Parser-3089"><span class="linenos">3089</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-3090"><a href="#Parser-3090"><span class="linenos">3090</span></a>
+</span><span id="Parser-3091"><a href="#Parser-3091"><span class="linenos">3091</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="Parser-3092"><a href="#Parser-3092"><span class="linenos">3092</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-3093"><a href="#Parser-3093"><span class="linenos">3093</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-3094"><a href="#Parser-3094"><span class="linenos">3094</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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3097"><a href="#Parser-3097"><span class="linenos">3097</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-3098"><a href="#Parser-3098"><span class="linenos">3098</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
-</span><span id="Parser-3099"><a href="#Parser-3099"><span class="linenos">3099</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="k">return</span> <span class="bp">self</span><span 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-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="k">def</span> <span class="nf">_parse_national</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">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">token</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
-</span><span id="Parser-3105"><a href="#Parser-3105"><span class="linenos">3105</span></a>
-</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3107"><a href="#Parser-3107"><span class="linenos">3107</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3108"><a href="#Parser-3108"><span class="linenos">3108</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-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a>
-</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</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-3111"><a href="#Parser-3111"><span class="linenos">3111</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-3112"><a href="#Parser-3112"><span class="linenos">3112</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-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">return</span> <span class="bp">self</span><span 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-3115"><a href="#Parser-3115"><span class="linenos">3115</span></a>
-</span><span id="Parser-3116"><a href="#Parser-3116"><span class="linenos">3116</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3117"><a href="#Parser-3117"><span class="linenos">3117</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-3118"><a href="#Parser-3118"><span class="linenos">3118</span></a>
-</span><span id="Parser-3119"><a href="#Parser-3119"><span class="linenos">3119</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3120"><a href="#Parser-3120"><span class="linenos">3120</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_id_var</span><span class="p">)</span>
+</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</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-3097"><a href="#Parser-3097"><span class="linenos">3097</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-3098"><a href="#Parser-3098"><span class="linenos">3098</span></a>
+</span><span id="Parser-3099"><a href="#Parser-3099"><span class="linenos">3099</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-3100"><a href="#Parser-3100"><span class="linenos">3100</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a>
+</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</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-3103"><a href="#Parser-3103"><span class="linenos">3103</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-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a> <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-3105"><a href="#Parser-3105"><span class="linenos">3105</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-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a> <span class="p">)</span>
+</span><span id="Parser-3107"><a href="#Parser-3107"><span class="linenos">3107</span></a>
+</span><span id="Parser-3108"><a href="#Parser-3108"><span class="linenos">3108</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3109"><a href="#Parser-3109"><span class="linenos">3109</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-3110"><a href="#Parser-3110"><span class="linenos">3110</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
+</span><span id="Parser-3111"><a href="#Parser-3111"><span class="linenos">3111</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3112"><a href="#Parser-3112"><span class="linenos">3112</span></a>
+</span><span id="Parser-3113"><a href="#Parser-3113"><span class="linenos">3113</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_national</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3116"><a href="#Parser-3116"><span class="linenos">3116</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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">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">token</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+</span><span id="Parser-3117"><a href="#Parser-3117"><span class="linenos">3117</span></a>
+</span><span id="Parser-3118"><a href="#Parser-3118"><span class="linenos">3118</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3119"><a href="#Parser-3119"><span class="linenos">3119</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3120"><a href="#Parser-3120"><span class="linenos">3120</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-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="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-3123"><a href="#Parser-3123"><span class="linenos">3123</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-3124"><a href="#Parser-3124"><span class="linenos">3124</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3125"><a href="#Parser-3125"><span class="linenos">3125</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-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a>
-</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</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-3128"><a href="#Parser-3128"><span class="linenos">3128</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-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="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-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="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-3122"><a href="#Parser-3122"><span class="linenos">3122</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-3123"><a href="#Parser-3123"><span class="linenos">3123</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-3124"><a href="#Parser-3124"><span class="linenos">3124</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-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="k">return</span> <span class="bp">self</span><span 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-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="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3129"><a href="#Parser-3129"><span class="linenos">3129</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-3130"><a href="#Parser-3130"><span class="linenos">3130</span></a>
+</span><span id="Parser-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3132"><a href="#Parser-3132"><span class="linenos">3132</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_id_var</span><span class="p">)</span>
</span><span id="Parser-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a>
-</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3135"><a href="#Parser-3135"><span class="linenos">3135</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-3136"><a href="#Parser-3136"><span class="linenos">3136</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-3137"><a href="#Parser-3137"><span class="linenos">3137</span></a> <span class="p">)</span>
-</span><span id="Parser-3138"><a href="#Parser-3138"><span class="linenos">3138</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</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><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="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">EQ</span><span class="p">):</span>
-</span><span id="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-3143"><a href="#Parser-3143"><span class="linenos">3143</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">left</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-3144"><a href="#Parser-3144"><span class="linenos">3144</span></a> <span class="n">left</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">)))</span>
+</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</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-3135"><a href="#Parser-3135"><span class="linenos">3135</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-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3137"><a href="#Parser-3137"><span class="linenos">3137</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-3138"><a href="#Parser-3138"><span class="linenos">3138</span></a>
+</span><span id="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</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-3140"><a href="#Parser-3140"><span class="linenos">3140</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-3141"><a href="#Parser-3141"><span class="linenos">3141</span></a>
+</span><span id="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</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-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">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-3145"><a href="#Parser-3145"><span class="linenos">3145</span></a>
-</span><span id="Parser-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">):</span>
-</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</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">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-3148"><a href="#Parser-3148"><span class="linenos">3148</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3149"><a href="#Parser-3149"><span class="linenos">3149</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">RESPECT_NULLS</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="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="n">this</span><span class="p">))</span>
+</span><span id="Parser-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3147"><a href="#Parser-3147"><span class="linenos">3147</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-3148"><a href="#Parser-3148"><span class="linenos">3148</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-3149"><a href="#Parser-3149"><span class="linenos">3149</span></a> <span class="p">)</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">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><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">_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-3154"><a href="#Parser-3154"><span class="linenos">3154</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-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">try</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="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-3158"><a href="#Parser-3158"><span class="linenos">3158</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3159"><a href="#Parser-3159"><span class="linenos">3159</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
-</span><span id="Parser-3160"><a href="#Parser-3160"><span class="linenos">3160</span></a> <span class="k">pass</span>
-</span><span id="Parser-3161"><a href="#Parser-3161"><span class="linenos">3161</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="Parser-3162"><a href="#Parser-3162"><span class="linenos">3162</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-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">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-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</span></a>
-</span><span id="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</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><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <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><span id="Parser-3169"><a href="#Parser-3169"><span class="linenos">3169</span></a> <span class="ow">or</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-3170"><a href="#Parser-3170"><span class="linenos">3170</span></a> <span class="p">)</span>
-</span><span id="Parser-3171"><a href="#Parser-3171"><span class="linenos">3171</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-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3153"><a href="#Parser-3153"><span class="linenos">3153</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">EQ</span><span class="p">):</span>
+</span><span id="Parser-3154"><a href="#Parser-3154"><span class="linenos">3154</span></a> <span class="n">left</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-3155"><a href="#Parser-3155"><span class="linenos">3155</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">left</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-3156"><a href="#Parser-3156"><span class="linenos">3156</span></a> <span class="n">left</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">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">)))</span>
+</span><span id="Parser-3157"><a href="#Parser-3157"><span class="linenos">3157</span></a>
+</span><span id="Parser-3158"><a href="#Parser-3158"><span class="linenos">3158</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-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">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-3161"><a href="#Parser-3161"><span class="linenos">3161</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-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a>
+</span><span id="Parser-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</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-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</span></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
+</span><span id="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</span></a> <span class="k">pass</span>
+</span><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="Parser-3169"><a href="#Parser-3169"><span class="linenos">3169</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-3170"><a href="#Parser-3170"><span class="linenos">3170</span></a>
+</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="bp">self</span><span 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-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a> <span class="k">return</span> <span class="n">this</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="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-3175"><a href="#Parser-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">_parse_types</span><span class="p">()</span>
-</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</span></a>
-</span><span id="Parser-3177"><a href="#Parser-3177"><span class="linenos">3177</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-3178"><a href="#Parser-3178"><span class="linenos">3178</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a>
-</span><span id="Parser-3180"><a href="#Parser-3180"><span class="linenos">3180</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</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-3183"><a href="#Parser-3183"><span class="linenos">3183</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-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="k">break</span>
-</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</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-3174"><a href="#Parser-3174"><span class="linenos">3174</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><span id="Parser-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a> <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><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</span></a> <span class="ow">or</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-3177"><a href="#Parser-3177"><span class="linenos">3177</span></a> <span class="p">)</span>
+</span><span id="Parser-3178"><a href="#Parser-3178"><span class="linenos">3178</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-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3180"><a href="#Parser-3180"><span class="linenos">3180</span></a>
+</span><span id="Parser-3181"><a href="#Parser-3181"><span class="linenos">3181</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-3182"><a href="#Parser-3182"><span class="linenos">3182</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-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="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-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3186"><a href="#Parser-3186"><span class="linenos">3186</span></a>
-</span><span id="Parser-3187"><a href="#Parser-3187"><span class="linenos">3187</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-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</span></a>
-</span><span id="Parser-3190"><a href="#Parser-3190"><span class="linenos">3190</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_auto_increment</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-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</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</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-3197"><a href="#Parser-3197"><span class="linenos">3197</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-3198"><a href="#Parser-3198"><span class="linenos">3198</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-3199"><a href="#Parser-3199"><span class="linenos">3199</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-3200"><a href="#Parser-3200"><span class="linenos">3200</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-3201"><a href="#Parser-3201"><span class="linenos">3201</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-3202"><a href="#Parser-3202"><span class="linenos">3202</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-3203"><a href="#Parser-3203"><span class="linenos">3203</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-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">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-3206"><a href="#Parser-3206"><span class="linenos">3206</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-3207"><a href="#Parser-3207"><span class="linenos">3207</span></a>
-</span><span id="Parser-3208"><a href="#Parser-3208"><span class="linenos">3208</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-3209"><a href="#Parser-3209"><span class="linenos">3209</span></a>
-</span><span id="Parser-3210"><a href="#Parser-3210"><span class="linenos">3210</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3211"><a href="#Parser-3211"><span class="linenos">3211</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3212"><a href="#Parser-3212"><span class="linenos">3212</span></a> <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-3213"><a href="#Parser-3213"><span class="linenos">3213</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-3214"><a href="#Parser-3214"><span class="linenos">3214</span></a> <span class="p">)</span>
-</span><span id="Parser-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a>
-</span><span id="Parser-3216"><a href="#Parser-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">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-3217"><a href="#Parser-3217"><span class="linenos">3217</span></a>
-</span><span id="Parser-3218"><a href="#Parser-3218"><span class="linenos">3218</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</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-3219"><a href="#Parser-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">BY_DEFAULT</span><span class="p">):</span>
-</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</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">False</span><span class="p">)</span>
-</span><span id="Parser-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a> <span class="k">else</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_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="Parser-3223"><a href="#Parser-3223"><span class="linenos">3223</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-3187"><a href="#Parser-3187"><span class="linenos">3187</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</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-3190"><a href="#Parser-3190"><span class="linenos">3190</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-3191"><a href="#Parser-3191"><span class="linenos">3191</span></a> <span class="k">break</span>
+</span><span id="Parser-3192"><a href="#Parser-3192"><span class="linenos">3192</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-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a>
+</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</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-3195"><a href="#Parser-3195"><span class="linenos">3195</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3196"><a href="#Parser-3196"><span class="linenos">3196</span></a>
+</span><span id="Parser-3197"><a href="#Parser-3197"><span class="linenos">3197</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3198"><a href="#Parser-3198"><span class="linenos">3198</span></a>
+</span><span id="Parser-3199"><a href="#Parser-3199"><span class="linenos">3199</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</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-3200"><a href="#Parser-3200"><span class="linenos">3200</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3201"><a href="#Parser-3201"><span class="linenos">3201</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3202"><a href="#Parser-3202"><span class="linenos">3202</span></a>
+</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3204"><a href="#Parser-3204"><span class="linenos">3204</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-3205"><a href="#Parser-3205"><span class="linenos">3205</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-3206"><a href="#Parser-3206"><span class="linenos">3206</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-3207"><a href="#Parser-3207"><span class="linenos">3207</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-3208"><a href="#Parser-3208"><span class="linenos">3208</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-3209"><a href="#Parser-3209"><span class="linenos">3209</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-3210"><a href="#Parser-3210"><span class="linenos">3210</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-3211"><a href="#Parser-3211"><span class="linenos">3211</span></a>
+</span><span id="Parser-3212"><a href="#Parser-3212"><span class="linenos">3212</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-3213"><a href="#Parser-3213"><span class="linenos">3213</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-3214"><a href="#Parser-3214"><span class="linenos">3214</span></a>
+</span><span id="Parser-3215"><a href="#Parser-3215"><span class="linenos">3215</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-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">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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3218"><a href="#Parser-3218"><span class="linenos">3218</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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">expression</span><span class="p">(</span>
+</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</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-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a> <span class="p">)</span>
+</span><span id="Parser-3222"><a href="#Parser-3222"><span class="linenos">3222</span></a>
+</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">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-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="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;IDENTITY&quot;</span><span class="p">)</span>
-</span><span id="Parser-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3227"><a href="#Parser-3227"><span class="linenos">3227</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;START&quot;</span><span class="p">,</span> <span class="s2">&quot;WITH&quot;</span><span class="p">):</span>
-</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</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-3229"><a href="#Parser-3229"><span class="linenos">3229</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-3230"><a href="#Parser-3230"><span class="linenos">3230</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-3231"><a href="#Parser-3231"><span class="linenos">3231</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-3232"><a href="#Parser-3232"><span class="linenos">3232</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-3233"><a href="#Parser-3233"><span class="linenos">3233</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-3234"><a href="#Parser-3234"><span class="linenos">3234</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-3235"><a href="#Parser-3235"><span class="linenos">3235</span></a>
-</span><span id="Parser-3236"><a href="#Parser-3236"><span class="linenos">3236</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-3237"><a href="#Parser-3237"><span class="linenos">3237</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-3238"><a href="#Parser-3238"><span class="linenos">3238</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-3239"><a href="#Parser-3239"><span class="linenos">3239</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-3240"><a href="#Parser-3240"><span class="linenos">3240</span></a>
-</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</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-3225"><a href="#Parser-3225"><span class="linenos">3225</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</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-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BY_DEFAULT</span><span class="p">):</span>
+</span><span id="Parser-3227"><a href="#Parser-3227"><span class="linenos">3227</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">False</span><span class="p">)</span>
+</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</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-3230"><a href="#Parser-3230"><span class="linenos">3230</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-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="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;IDENTITY&quot;</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="bp">self</span><span 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-3234"><a href="#Parser-3234"><span class="linenos">3234</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;START&quot;</span><span class="p">,</span> <span class="s2">&quot;WITH&quot;</span><span class="p">):</span>
+</span><span id="Parser-3235"><a href="#Parser-3235"><span class="linenos">3235</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-3236"><a href="#Parser-3236"><span class="linenos">3236</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-3237"><a href="#Parser-3237"><span class="linenos">3237</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-3238"><a href="#Parser-3238"><span class="linenos">3238</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-3239"><a href="#Parser-3239"><span class="linenos">3239</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-3240"><a href="#Parser-3240"><span class="linenos">3240</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-3241"><a href="#Parser-3241"><span class="linenos">3241</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-3242"><a href="#Parser-3242"><span class="linenos">3242</span></a>
-</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</span></a> <span class="k">return</span> <span class="n">this</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="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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3246"><a href="#Parser-3246"><span class="linenos">3246</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-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">def</span> <span class="nf">_parse_not_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-3250"><a href="#Parser-3250"><span class="linenos">3250</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-3251"><a href="#Parser-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 class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span>
-</span><span id="Parser-3252"><a href="#Parser-3252"><span class="linenos">3252</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-3253"><a href="#Parser-3253"><span class="linenos">3253</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3254"><a href="#Parser-3254"><span class="linenos">3254</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</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-3244"><a href="#Parser-3244"><span class="linenos">3244</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-3245"><a href="#Parser-3245"><span class="linenos">3245</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-3246"><a href="#Parser-3246"><span class="linenos">3246</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-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a>
+</span><span id="Parser-3248"><a href="#Parser-3248"><span class="linenos">3248</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-3249"><a href="#Parser-3249"><span class="linenos">3249</span></a>
+</span><span id="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a> <span class="k">return</span> <span class="n">this</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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3253"><a href="#Parser-3253"><span class="linenos">3253</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-3254"><a href="#Parser-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">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-3255"><a href="#Parser-3255"><span class="linenos">3255</span></a>
-</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</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-3257"><a href="#Parser-3257"><span class="linenos">3257</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3258"><a href="#Parser-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">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-3259"><a href="#Parser-3259"><span class="linenos">3259</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3260"><a href="#Parser-3260"><span class="linenos">3260</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3261"><a href="#Parser-3261"><span class="linenos">3261</span></a>
-</span><span id="Parser-3262"><a href="#Parser-3262"><span class="linenos">3262</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-3263"><a href="#Parser-3263"><span class="linenos">3263</span></a> <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-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3266"><a href="#Parser-3266"><span class="linenos">3266</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-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a> <span class="p">)</span>
+</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a> <span class="k">def</span> <span class="nf">_parse_not_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-3257"><a href="#Parser-3257"><span class="linenos">3257</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-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 class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</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;CASESPECIFIC&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">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-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_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-3264"><a href="#Parser-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</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-3265"><a href="#Parser-3265"><span class="linenos">3265</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-3266"><a href="#Parser-3266"><span class="linenos">3266</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a> <span class="n">this</span> <span class="o">=</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">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="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-3272"><a href="#Parser-3272"><span class="linenos">3272</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-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">_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-3274"><a href="#Parser-3274"><span class="linenos">3274</span></a>
-</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</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="p">[]</span>
+</span><span id="Parser-3269"><a href="#Parser-3269"><span class="linenos">3269</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-3270"><a href="#Parser-3270"><span class="linenos">3270</span></a> <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-3271"><a href="#Parser-3271"><span class="linenos">3271</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-3272"><a href="#Parser-3272"><span class="linenos">3272</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3273"><a href="#Parser-3273"><span class="linenos">3273</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-3274"><a href="#Parser-3274"><span class="linenos">3274</span></a> <span class="p">)</span>
+</span><span id="Parser-3275"><a href="#Parser-3275"><span class="linenos">3275</span></a>
+</span><span id="Parser-3276"><a href="#Parser-3276"><span class="linenos">3276</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3277"><a href="#Parser-3277"><span class="linenos">3277</span></a>
-</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3279"><a href="#Parser-3279"><span class="linenos">3279</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-3280"><a href="#Parser-3280"><span class="linenos">3280</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-3281"><a href="#Parser-3281"><span class="linenos">3281</span></a> <span class="k">break</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="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
-</span><span id="Parser-3283"><a href="#Parser-3283"><span class="linenos">3283</span></a>
-</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</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-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_unnamed_constraint</span><span class="p">(</span>
-</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</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-3288"><a href="#Parser-3288"><span class="linenos">3288</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-3289"><a href="#Parser-3289"><span class="linenos">3289</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_texts</span><span class="p">(</span><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 class="p">):</span>
-</span><span id="Parser-3290"><a href="#Parser-3290"><span class="linenos">3290</span></a> <span class="k">return</span> <span class="kc">None</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">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-3293"><a href="#Parser-3293"><span class="linenos">3293</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-3294"><a href="#Parser-3294"><span class="linenos">3294</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-3295"><a href="#Parser-3295"><span class="linenos">3295</span></a>
-</span><span id="Parser-3296"><a href="#Parser-3296"><span class="linenos">3296</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-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">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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-3300"><a href="#Parser-3300"><span class="linenos">3300</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unique</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_id_vars</span><span class="p">())</span>
+</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</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-3279"><a href="#Parser-3279"><span class="linenos">3279</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-3280"><a href="#Parser-3280"><span class="linenos">3280</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-3281"><a href="#Parser-3281"><span class="linenos">3281</span></a>
+</span><span id="Parser-3282"><a href="#Parser-3282"><span class="linenos">3282</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-3283"><a href="#Parser-3283"><span class="linenos">3283</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3284"><a href="#Parser-3284"><span class="linenos">3284</span></a>
+</span><span id="Parser-3285"><a href="#Parser-3285"><span class="linenos">3285</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3286"><a href="#Parser-3286"><span class="linenos">3286</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-3287"><a href="#Parser-3287"><span class="linenos">3287</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-3288"><a href="#Parser-3288"><span class="linenos">3288</span></a> <span class="k">break</span>
+</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</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-3290"><a href="#Parser-3290"><span class="linenos">3290</span></a>
+</span><span id="Parser-3291"><a href="#Parser-3291"><span class="linenos">3291</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a>
+</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="Parser-3294"><a href="#Parser-3294"><span class="linenos">3294</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-3295"><a href="#Parser-3295"><span class="linenos">3295</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-3296"><a href="#Parser-3296"><span class="linenos">3296</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_texts</span><span class="p">(</span><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 class="p">):</span>
+</span><span id="Parser-3297"><a href="#Parser-3297"><span class="linenos">3297</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a>
+</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</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-3300"><a href="#Parser-3300"><span class="linenos">3300</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-3301"><a href="#Parser-3301"><span class="linenos">3301</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-3302"><a href="#Parser-3302"><span class="linenos">3302</span></a>
-</span><span id="Parser-3303"><a href="#Parser-3303"><span class="linenos">3303</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-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</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-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a> <span class="k">break</span>
-</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</span></a>
-</span><span id="Parser-3309"><a href="#Parser-3309"><span class="linenos">3309</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</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-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a>
-</span><span id="Parser-3313"><a href="#Parser-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</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
-</span><span id="Parser-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</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">CASCADE</span><span class="p">):</span>
-</span><span id="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="Parser-3317"><a href="#Parser-3317"><span class="linenos">3317</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-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</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-3320"><a href="#Parser-3320"><span class="linenos">3320</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</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-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="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-3325"><a href="#Parser-3325"><span class="linenos">3325</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-3326"><a href="#Parser-3326"><span class="linenos">3326</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-3327"><a href="#Parser-3327"><span class="linenos">3327</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-3328"><a href="#Parser-3328"><span class="linenos">3328</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-3329"><a href="#Parser-3329"><span class="linenos">3329</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-3330"><a href="#Parser-3330"><span class="linenos">3330</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-3331"><a href="#Parser-3331"><span class="linenos">3331</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-3332"><a href="#Parser-3332"><span class="linenos">3332</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-3333"><a href="#Parser-3333"><span class="linenos">3333</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-3334"><a href="#Parser-3334"><span class="linenos">3334</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-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="k">break</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">return</span> <span class="n">options</span>
-</span><span id="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</span></a>
-</span><span id="Parser-3340"><a href="#Parser-3340"><span class="linenos">3340</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="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-3341"><a href="#Parser-3341"><span class="linenos">3341</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-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a> <span class="k">return</span> <span class="kc">None</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">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</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-3303"><a href="#Parser-3303"><span class="linenos">3303</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-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a>
+</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unique</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_id_vars</span><span class="p">())</span>
+</span><span id="Parser-3309"><a href="#Parser-3309"><span class="linenos">3309</span></a>
+</span><span id="Parser-3310"><a href="#Parser-3310"><span class="linenos">3310</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-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</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-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="k">break</span>
+</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</span></a>
+</span><span id="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3317"><a href="#Parser-3317"><span class="linenos">3317</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</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-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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
+</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</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">CASCADE</span><span class="p">):</span>
+</span><span id="Parser-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</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-3325"><a href="#Parser-3325"><span class="linenos">3325</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</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-3327"><a href="#Parser-3327"><span class="linenos">3327</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="Parser-3328"><a href="#Parser-3328"><span class="linenos">3328</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3329"><a href="#Parser-3329"><span class="linenos">3329</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-3330"><a href="#Parser-3330"><span class="linenos">3330</span></a>
+</span><span id="Parser-3331"><a href="#Parser-3331"><span class="linenos">3331</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-3332"><a href="#Parser-3332"><span class="linenos">3332</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-3333"><a href="#Parser-3333"><span class="linenos">3333</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-3334"><a href="#Parser-3334"><span class="linenos">3334</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-3335"><a href="#Parser-3335"><span class="linenos">3335</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-3336"><a href="#Parser-3336"><span class="linenos">3336</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-3337"><a href="#Parser-3337"><span class="linenos">3337</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-3338"><a href="#Parser-3338"><span class="linenos">3338</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-3339"><a href="#Parser-3339"><span class="linenos">3339</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-3340"><a href="#Parser-3340"><span class="linenos">3340</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-3341"><a href="#Parser-3341"><span class="linenos">3341</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-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3343"><a href="#Parser-3343"><span class="linenos">3343</span></a> <span class="k">break</span>
+</span><span id="Parser-3344"><a href="#Parser-3344"><span class="linenos">3344</span></a>
+</span><span id="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</span></a> <span class="k">return</span> <span class="n">options</span>
</span><span id="Parser-3346"><a href="#Parser-3346"><span class="linenos">3346</span></a>
-</span><span id="Parser-3347"><a href="#Parser-3347"><span class="linenos">3347</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3348"><a href="#Parser-3348"><span class="linenos">3348</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-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="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-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3352"><a href="#Parser-3352"><span class="linenos">3352</span></a>
-</span><span id="Parser-3353"><a href="#Parser-3353"><span class="linenos">3353</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3354"><a href="#Parser-3354"><span class="linenos">3354</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-3355"><a href="#Parser-3355"><span class="linenos">3355</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-3356"><a href="#Parser-3356"><span class="linenos">3356</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-3357"><a href="#Parser-3357"><span class="linenos">3357</span></a>
-</span><span id="Parser-3358"><a href="#Parser-3358"><span class="linenos">3358</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-3359"><a href="#Parser-3359"><span class="linenos">3359</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-3360"><a href="#Parser-3360"><span class="linenos">3360</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-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="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-3363"><a href="#Parser-3363"><span class="linenos">3363</span></a>
-</span><span id="Parser-3364"><a href="#Parser-3364"><span class="linenos">3364</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
-</span><span id="Parser-3365"><a href="#Parser-3365"><span class="linenos">3365</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-3366"><a href="#Parser-3366"><span class="linenos">3366</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-3367"><a href="#Parser-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">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-3368"><a href="#Parser-3368"><span class="linenos">3368</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-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</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-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="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-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">return</span> <span class="bp">self</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="n">exp</span><span class="o">.</span><span class="n">ForeignKey</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">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a> <span class="p">)</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="k">def</span> <span class="nf">_parse_primary_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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3380"><a href="#Parser-3380"><span class="linenos">3380</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</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-3382"><a href="#Parser-3382"><span class="linenos">3382</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-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a> <span class="p">)</span>
-</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</span></a>
-</span><span id="Parser-3385"><a href="#Parser-3385"><span class="linenos">3385</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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-3386"><a href="#Parser-3386"><span class="linenos">3386</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3387"><a href="#Parser-3387"><span class="linenos">3387</span></a>
-</span><span id="Parser-3388"><a href="#Parser-3388"><span class="linenos">3388</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-3389"><a href="#Parser-3389"><span class="linenos">3389</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-3390"><a href="#Parser-3390"><span class="linenos">3390</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3347"><a href="#Parser-3347"><span class="linenos">3347</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="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-3348"><a href="#Parser-3348"><span class="linenos">3348</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-3349"><a href="#Parser-3349"><span class="linenos">3349</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3350"><a href="#Parser-3350"><span class="linenos">3350</span></a>
+</span><span id="Parser-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</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="k">if</span> <span class="bp">self</span><span 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-3355"><a href="#Parser-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_wrapped_id_vars</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="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-3358"><a href="#Parser-3358"><span class="linenos">3358</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3359"><a href="#Parser-3359"><span class="linenos">3359</span></a>
+</span><span id="Parser-3360"><a href="#Parser-3360"><span class="linenos">3360</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3361"><a href="#Parser-3361"><span class="linenos">3361</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-3362"><a href="#Parser-3362"><span class="linenos">3362</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-3363"><a href="#Parser-3363"><span class="linenos">3363</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</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">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-3366"><a href="#Parser-3366"><span class="linenos">3366</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-3367"><a href="#Parser-3367"><span class="linenos">3367</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-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a>
+</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</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-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a>
+</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">):</span>
+</span><span id="Parser-3372"><a href="#Parser-3372"><span class="linenos">3372</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-3373"><a href="#Parser-3373"><span class="linenos">3373</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-3374"><a href="#Parser-3374"><span class="linenos">3374</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-3375"><a href="#Parser-3375"><span class="linenos">3375</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-3376"><a href="#Parser-3376"><span class="linenos">3376</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-3378"><a href="#Parser-3378"><span class="linenos">3378</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-3379"><a href="#Parser-3379"><span class="linenos">3379</span></a>
+</span><span id="Parser-3380"><a href="#Parser-3380"><span class="linenos">3380</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-3381"><a href="#Parser-3381"><span class="linenos">3381</span></a>
+</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</span></a> <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-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</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">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</span></a> <span class="p">)</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_primary_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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3387"><a href="#Parser-3387"><span class="linenos">3387</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-3388"><a href="#Parser-3388"><span class="linenos">3388</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-3389"><a href="#Parser-3389"><span class="linenos">3389</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-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><span id="Parser-3392"><a href="#Parser-3392"><span class="linenos">3392</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-3393"><a href="#Parser-3393"><span class="linenos">3393</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-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3395"><a href="#Parser-3395"><span class="linenos">3395</span></a>
-</span><span id="Parser-3396"><a href="#Parser-3396"><span class="linenos">3396</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-3397"><a href="#Parser-3397"><span class="linenos">3397</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3392"><a href="#Parser-3392"><span class="linenos">3392</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">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</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 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-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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-3396"><a href="#Parser-3396"><span class="linenos">3396</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-3397"><a href="#Parser-3397"><span class="linenos">3397</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="k">if</span> <span class="bp">self</span><span 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-3400"><a href="#Parser-3400"><span class="linenos">3400</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">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">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-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</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_slice</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-3403"><a href="#Parser-3403"><span class="linenos">3403</span></a>
-</span><span id="Parser-3404"><a href="#Parser-3404"><span class="linenos">3404</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</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-3406"><a href="#Parser-3406"><span class="linenos">3406</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-3407"><a href="#Parser-3407"><span class="linenos">3407</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-3408"><a href="#Parser-3408"><span class="linenos">3408</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-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="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">index_offset</span><span class="p">)</span>
-</span><span id="Parser-3411"><a href="#Parser-3411"><span class="linenos">3411</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-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">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-3414"><a href="#Parser-3414"><span class="linenos">3414</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-3415"><a href="#Parser-3415"><span class="linenos">3415</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-3416"><a href="#Parser-3416"><span class="linenos">3416</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-3417"><a href="#Parser-3417"><span class="linenos">3417</span></a>
-</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</span></a> <span class="n">this</span><span class="o">.</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><span id="Parser-3419"><a href="#Parser-3419"><span class="linenos">3419</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-3420"><a href="#Parser-3420"><span class="linenos">3420</span></a>
-</span><span id="Parser-3421"><a href="#Parser-3421"><span class="linenos">3421</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-3422"><a href="#Parser-3422"><span class="linenos">3422</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3423"><a href="#Parser-3423"><span class="linenos">3423</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3424"><a href="#Parser-3424"><span class="linenos">3424</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3425"><a href="#Parser-3425"><span class="linenos">3425</span></a>
-</span><span id="Parser-3426"><a href="#Parser-3426"><span class="linenos">3426</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-3427"><a href="#Parser-3427"><span class="linenos">3427</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3428"><a href="#Parser-3428"><span class="linenos">3428</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</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="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-3431"><a href="#Parser-3431"><span class="linenos">3431</span></a>
-</span><span id="Parser-3432"><a href="#Parser-3432"><span class="linenos">3432</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-3433"><a href="#Parser-3433"><span class="linenos">3433</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-3434"><a href="#Parser-3434"><span class="linenos">3434</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-3435"><a href="#Parser-3435"><span class="linenos">3435</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-3436"><a href="#Parser-3436"><span class="linenos">3436</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-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="bp">self</span><span 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-3439"><a href="#Parser-3439"><span class="linenos">3439</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-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="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-3442"><a href="#Parser-3442"><span class="linenos">3442</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-3443"><a href="#Parser-3443"><span class="linenos">3443</span></a>
-</span><span id="Parser-3444"><a href="#Parser-3444"><span class="linenos">3444</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-3445"><a href="#Parser-3445"><span class="linenos">3445</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">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-3446"><a href="#Parser-3446"><span class="linenos">3446</span></a> <span class="p">)</span>
+</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</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-3400"><a href="#Parser-3400"><span class="linenos">3400</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-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</span></a>
+</span><span id="Parser-3403"><a href="#Parser-3403"><span class="linenos">3403</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-3404"><a href="#Parser-3404"><span class="linenos">3404</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3405"><a href="#Parser-3405"><span class="linenos">3405</span></a>
+</span><span id="Parser-3406"><a href="#Parser-3406"><span class="linenos">3406</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3407"><a href="#Parser-3407"><span class="linenos">3407</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">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">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-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</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_slice</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-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="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="Parser-3412"><a href="#Parser-3412"><span class="linenos">3412</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-3413"><a href="#Parser-3413"><span class="linenos">3413</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-3414"><a href="#Parser-3414"><span class="linenos">3414</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-3415"><a href="#Parser-3415"><span class="linenos">3415</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-3416"><a href="#Parser-3416"><span class="linenos">3416</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3417"><a href="#Parser-3417"><span class="linenos">3417</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">index_offset</span><span class="p">)</span>
+</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</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-3419"><a href="#Parser-3419"><span class="linenos">3419</span></a>
+</span><span id="Parser-3420"><a href="#Parser-3420"><span class="linenos">3420</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-3421"><a href="#Parser-3421"><span class="linenos">3421</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-3422"><a href="#Parser-3422"><span class="linenos">3422</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-3423"><a href="#Parser-3423"><span class="linenos">3423</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-3424"><a href="#Parser-3424"><span class="linenos">3424</span></a>
+</span><span id="Parser-3425"><a href="#Parser-3425"><span class="linenos">3425</span></a> <span class="n">this</span><span class="o">.</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><span id="Parser-3426"><a href="#Parser-3426"><span class="linenos">3426</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-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">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-3429"><a href="#Parser-3429"><span class="linenos">3429</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3430"><a href="#Parser-3430"><span class="linenos">3430</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3431"><a href="#Parser-3431"><span class="linenos">3431</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3432"><a href="#Parser-3432"><span class="linenos">3432</span></a>
+</span><span id="Parser-3433"><a href="#Parser-3433"><span class="linenos">3433</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-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3435"><a href="#Parser-3435"><span class="linenos">3435</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a>
+</span><span id="Parser-3437"><a href="#Parser-3437"><span class="linenos">3437</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-3438"><a href="#Parser-3438"><span class="linenos">3438</span></a>
+</span><span id="Parser-3439"><a href="#Parser-3439"><span class="linenos">3439</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-3440"><a href="#Parser-3440"><span class="linenos">3440</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-3441"><a href="#Parser-3441"><span class="linenos">3441</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-3442"><a href="#Parser-3442"><span class="linenos">3442</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-3443"><a href="#Parser-3443"><span class="linenos">3443</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-3444"><a href="#Parser-3444"><span class="linenos">3444</span></a>
+</span><span id="Parser-3445"><a href="#Parser-3445"><span class="linenos">3445</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3446"><a href="#Parser-3446"><span class="linenos">3446</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-3447"><a href="#Parser-3447"><span class="linenos">3447</span></a>
-</span><span id="Parser-3448"><a href="#Parser-3448"><span class="linenos">3448</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-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3450"><a href="#Parser-3450"><span class="linenos">3450</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-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a> <span class="n">this</span> <span class="o">=</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><span id="Parser-3452"><a href="#Parser-3452"><span class="linenos">3452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-3453"><a href="#Parser-3453"><span class="linenos">3453</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-3454"><a href="#Parser-3454"><span class="linenos">3454</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3455"><a href="#Parser-3455"><span class="linenos">3455</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-3456"><a href="#Parser-3456"><span class="linenos">3456</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-3457"><a href="#Parser-3457"><span class="linenos">3457</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-3458"><a href="#Parser-3458"><span class="linenos">3458</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-3459"><a href="#Parser-3459"><span class="linenos">3459</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-3460"><a href="#Parser-3460"><span class="linenos">3460</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-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a>
-</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</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-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">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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3465"><a href="#Parser-3465"><span class="linenos">3465</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-3466"><a href="#Parser-3466"><span class="linenos">3466</span></a>
-</span><span id="Parser-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3468"><a href="#Parser-3468"><span class="linenos">3468</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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-3471"><a href="#Parser-3471"><span class="linenos">3471</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-3472"><a href="#Parser-3472"><span class="linenos">3472</span></a>
-</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">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-3448"><a href="#Parser-3448"><span class="linenos">3448</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-3449"><a href="#Parser-3449"><span class="linenos">3449</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-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a>
+</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</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-3452"><a href="#Parser-3452"><span class="linenos">3452</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">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-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_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-3456"><a href="#Parser-3456"><span class="linenos">3456</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3457"><a href="#Parser-3457"><span class="linenos">3457</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-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="n">this</span> <span class="o">=</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><span id="Parser-3459"><a href="#Parser-3459"><span class="linenos">3459</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3460"><a href="#Parser-3460"><span class="linenos">3460</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-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</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-3463"><a href="#Parser-3463"><span class="linenos">3463</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-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="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="Parser-3466"><a href="#Parser-3466"><span class="linenos">3466</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-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span 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-3470"><a href="#Parser-3470"><span class="linenos">3470</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-3471"><a href="#Parser-3471"><span class="linenos">3471</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-3472"><a href="#Parser-3472"><span class="linenos">3472</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-3473"><a href="#Parser-3473"><span class="linenos">3473</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-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_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="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-3476"><a href="#Parser-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">_parse_conjunction</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">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-3479"><a href="#Parser-3479"><span class="linenos">3479</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-3480"><a href="#Parser-3480"><span class="linenos">3480</span></a>
-</span><span id="Parser-3481"><a href="#Parser-3481"><span class="linenos">3481</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-3475"><a href="#Parser-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_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</span></a>
+</span><span id="Parser-3477"><a href="#Parser-3477"><span class="linenos">3477</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">Expression</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">_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-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="bp">self</span><span 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-3481"><a href="#Parser-3481"><span class="linenos">3481</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="Parser-3484"><a href="#Parser-3484"><span class="linenos">3484</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-3485"><a href="#Parser-3485"><span class="linenos">3485</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-3486"><a href="#Parser-3486"><span class="linenos">3486</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3487"><a href="#Parser-3487"><span class="linenos">3487</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-3488"><a href="#Parser-3488"><span class="linenos">3488</span></a>
-</span><span id="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="Parser-3483"><a href="#Parser-3483"><span class="linenos">3483</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-3484"><a href="#Parser-3484"><span class="linenos">3484</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-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="bp">self</span><span 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-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_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="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-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">_parse_conjunction</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="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-3492"><a href="#Parser-3492"><span class="linenos">3492</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><span id="Parser-3491"><a href="#Parser-3491"><span class="linenos">3491</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-3492"><a href="#Parser-3492"><span class="linenos">3492</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-3493"><a href="#Parser-3493"><span class="linenos">3493</span></a>
-</span><span id="Parser-3494"><a href="#Parser-3494"><span class="linenos">3494</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3495"><a href="#Parser-3495"><span class="linenos">3495</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-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">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="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-3497"><a href="#Parser-3497"><span class="linenos">3497</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3498"><a href="#Parser-3498"><span class="linenos">3498</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-3499"><a href="#Parser-3499"><span class="linenos">3499</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">0</span><span class="p">)</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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3502"><a href="#Parser-3502"><span class="linenos">3502</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-3503"><a href="#Parser-3503"><span class="linenos">3503</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="Parser-3504"><a href="#Parser-3504"><span class="linenos">3504</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">expression</span><span class="p">)</span>
-</span><span id="Parser-3505"><a href="#Parser-3505"><span class="linenos">3505</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3494"><a href="#Parser-3494"><span class="linenos">3494</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-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="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="Parser-3497"><a href="#Parser-3497"><span class="linenos">3497</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-3498"><a href="#Parser-3498"><span class="linenos">3498</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-3499"><a href="#Parser-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">CHARACTER_SET</span><span class="p">):</span>
+</span><span id="Parser-3500"><a href="#Parser-3500"><span class="linenos">3500</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-3501"><a href="#Parser-3501"><span class="linenos">3501</span></a>
+</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="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_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-3505"><a href="#Parser-3505"><span class="linenos">3505</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><span id="Parser-3506"><a href="#Parser-3506"><span class="linenos">3506</span></a>
-</span><span id="Parser-3507"><a href="#Parser-3507"><span class="linenos">3507</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-3508"><a href="#Parser-3508"><span class="linenos">3508</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-3509"><a href="#Parser-3509"><span class="linenos">3509</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-3510"><a href="#Parser-3510"><span class="linenos">3510</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">WITHIN_GROUP</span><span class="p">):</span>
-</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</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-3512"><a href="#Parser-3512"><span class="linenos">3512</span></a> <span class="n">this</span> <span class="o">=</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><span id="Parser-3513"><a href="#Parser-3513"><span class="linenos">3513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-3514"><a href="#Parser-3514"><span class="linenos">3514</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3515"><a href="#Parser-3515"><span class="linenos">3515</span></a>
-</span><span id="Parser-3516"><a href="#Parser-3516"><span class="linenos">3516</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-3517"><a href="#Parser-3517"><span class="linenos">3517</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">expression</span><span class="p">)</span>
-</span><span id="Parser-3518"><a href="#Parser-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">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-3507"><a href="#Parser-3507"><span class="linenos">3507</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3508"><a href="#Parser-3508"><span class="linenos">3508</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-3509"><a href="#Parser-3509"><span class="linenos">3509</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 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="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-3510"><a href="#Parser-3510"><span class="linenos">3510</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</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-3512"><a href="#Parser-3512"><span class="linenos">3512</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">0</span><span class="p">)</span>
+</span><span id="Parser-3513"><a href="#Parser-3513"><span class="linenos">3513</span></a>
+</span><span id="Parser-3514"><a href="#Parser-3514"><span class="linenos">3514</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-3515"><a href="#Parser-3515"><span class="linenos">3515</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-3516"><a href="#Parser-3516"><span class="linenos">3516</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</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">expression</span><span class="p">)</span>
+</span><span id="Parser-3518"><a href="#Parser-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">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-3519"><a href="#Parser-3519"><span class="linenos">3519</span></a>
-</span><span id="Parser-3520"><a href="#Parser-3520"><span class="linenos">3520</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</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><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">_parse_bitwise</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">if</span> <span class="bp">self</span><span 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-3525"><a href="#Parser-3525"><span class="linenos">3525</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</span><span class="p">())</span>
-</span><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</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-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="n">to</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="k">else</span><span class="p">:</span>
-</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3530"><a href="#Parser-3530"><span class="linenos">3530</span></a>
-</span><span id="Parser-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a> <span class="c1"># Swap the argument order if needed to produce the correct AST</span>
-</span><span id="Parser-3532"><a href="#Parser-3532"><span class="linenos">3532</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONVERT_TYPE_FIRST</span><span class="p">:</span>
-</span><span id="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</span></a> <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">this</span>
-</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a>
-</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">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
+</span><span id="Parser-3520"><a href="#Parser-3520"><span class="linenos">3520</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-3521"><a href="#Parser-3521"><span class="linenos">3521</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-3522"><a href="#Parser-3522"><span class="linenos">3522</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-3523"><a href="#Parser-3523"><span class="linenos">3523</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">WITHIN_GROUP</span><span class="p">):</span>
+</span><span id="Parser-3524"><a href="#Parser-3524"><span class="linenos">3524</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-3525"><a href="#Parser-3525"><span class="linenos">3525</span></a> <span class="n">this</span> <span class="o">=</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><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="k">return</span> <span class="n">this</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="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-3530"><a href="#Parser-3530"><span class="linenos">3530</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">expression</span><span class="p">)</span>
+</span><span id="Parser-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3532"><a href="#Parser-3532"><span class="linenos">3532</span></a>
+</span><span id="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</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><span id="Parser-3535"><a href="#Parser-3535"><span class="linenos">3535</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-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_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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3538"><a href="#Parser-3538"><span class="linenos">3538</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</span></a><span class="sd"> There are generally two variants of the DECODE function:</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="sd"> - DECODE(bin, charset)</span>
-</span><span id="Parser-3542"><a href="#Parser-3542"><span class="linenos">3542</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
+</span><span id="Parser-3537"><a href="#Parser-3537"><span class="linenos">3537</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3538"><a href="#Parser-3538"><span class="linenos">3538</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</span><span class="p">())</span>
+</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</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-3540"><a href="#Parser-3540"><span class="linenos">3540</span></a> <span class="n">to</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-3541"><a href="#Parser-3541"><span class="linenos">3541</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3542"><a href="#Parser-3542"><span class="linenos">3542</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3543"><a href="#Parser-3543"><span class="linenos">3543</span></a>
-</span><span id="Parser-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="Parser-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-3548"><a href="#Parser-3548"><span class="linenos">3548</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-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a> <span class="c1"># Swap the argument order if needed to produce the correct AST</span>
+</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONVERT_TYPE_FIRST</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="p">,</span> <span class="n">to</span> <span class="o">=</span> <span class="n">to</span><span class="p">,</span> <span class="n">this</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">)</span>
</span><span id="Parser-3549"><a href="#Parser-3549"><span class="linenos">3549</span></a>
-</span><span id="Parser-3550"><a href="#Parser-3550"><span class="linenos">3550</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-3551"><a href="#Parser-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">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-3552"><a href="#Parser-3552"><span class="linenos">3552</span></a>
-</span><span id="Parser-3553"><a href="#Parser-3553"><span class="linenos">3553</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-3554"><a href="#Parser-3554"><span class="linenos">3554</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-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-3550"><a href="#Parser-3550"><span class="linenos">3550</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</span></a><span class="sd"> There are generally two variants of the DECODE function:</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="sd"> - DECODE(bin, charset)</span>
+</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</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">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</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-3559"><a href="#Parser-3559"><span class="linenos">3559</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-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a> <span class="k">return</span> <span class="kc">None</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="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-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-3564"><a href="#Parser-3564"><span class="linenos">3564</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-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a> <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="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-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</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-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a> <span class="p">)</span>
-</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3571"><a href="#Parser-3571"><span class="linenos">3571</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-3572"><a href="#Parser-3572"><span class="linenos">3572</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-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="Parser-3574"><a href="#Parser-3574"><span class="linenos">3574</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-3575"><a href="#Parser-3575"><span class="linenos">3575</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-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <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 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-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">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-3581"><a href="#Parser-3581"><span class="linenos">3581</span></a>
-</span><span id="Parser-3582"><a href="#Parser-3582"><span class="linenos">3582</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</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-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a> <span class="n">key</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-3585"><a href="#Parser-3585"><span class="linenos">3585</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-3586"><a href="#Parser-3586"><span class="linenos">3586</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-3587"><a href="#Parser-3587"><span class="linenos">3587</span></a> <span class="n">value</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-3588"><a href="#Parser-3588"><span class="linenos">3588</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-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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="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-3593"><a href="#Parser-3593"><span class="linenos">3593</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_json_key_value</span><span class="p">)</span>
+</span><span id="Parser-3557"><a href="#Parser-3557"><span class="linenos">3557</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="Parser-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="Parser-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</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-3562"><a href="#Parser-3562"><span class="linenos">3562</span></a>
+</span><span id="Parser-3563"><a href="#Parser-3563"><span class="linenos">3563</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-3564"><a href="#Parser-3564"><span class="linenos">3564</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a>
+</span><span id="Parser-3566"><a href="#Parser-3566"><span class="linenos">3566</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-3567"><a href="#Parser-3567"><span class="linenos">3567</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-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a>
+</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3571"><a href="#Parser-3571"><span class="linenos">3571</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-3572"><a href="#Parser-3572"><span class="linenos">3572</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-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a> <span class="k">return</span> <span class="kc">None</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="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-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-3577"><a href="#Parser-3577"><span class="linenos">3577</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-3578"><a href="#Parser-3578"><span class="linenos">3578</span></a> <span class="p">)</span>
+</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</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-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-3581"><a href="#Parser-3581"><span class="linenos">3581</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-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a> <span class="p">)</span>
+</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3584"><a href="#Parser-3584"><span class="linenos">3584</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-3585"><a href="#Parser-3585"><span class="linenos">3585</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-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="Parser-3587"><a href="#Parser-3587"><span class="linenos">3587</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-3588"><a href="#Parser-3588"><span class="linenos">3588</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-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a> <span class="p">),</span>
+</span><span id="Parser-3591"><a href="#Parser-3591"><span class="linenos">3591</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3592"><a href="#Parser-3592"><span class="linenos">3592</span></a> <span class="p">)</span>
+</span><span id="Parser-3593"><a href="#Parser-3593"><span class="linenos">3593</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-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="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3596"><a href="#Parser-3596"><span class="linenos">3596</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 class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
-</span><span id="Parser-3597"><a href="#Parser-3597"><span class="linenos">3597</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;NULL ON NULL&quot;</span>
-</span><span id="Parser-3598"><a href="#Parser-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_text_seq</span><span class="p">(</span><span class="s2">&quot;ABSENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
-</span><span id="Parser-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;ABSENT ON NULL&quot;</span>
-</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</span></a>
-</span><span id="Parser-3601"><a href="#Parser-3601"><span class="linenos">3601</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3602"><a href="#Parser-3602"><span class="linenos">3602</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-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</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-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3595"><a href="#Parser-3595"><span class="linenos">3595</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-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_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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3598"><a href="#Parser-3598"><span class="linenos">3598</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-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a> <span class="n">key</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-3600"><a href="#Parser-3600"><span class="linenos">3600</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-3601"><a href="#Parser-3601"><span class="linenos">3601</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-3602"><a href="#Parser-3602"><span class="linenos">3602</span></a> <span class="n">value</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-3603"><a href="#Parser-3603"><span class="linenos">3603</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-3604"><a href="#Parser-3604"><span class="linenos">3604</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3606"><a href="#Parser-3606"><span class="linenos">3606</span></a>
-</span><span id="Parser-3607"><a href="#Parser-3607"><span class="linenos">3607</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-3608"><a href="#Parser-3608"><span class="linenos">3608</span></a>
-</span><span id="Parser-3609"><a href="#Parser-3609"><span class="linenos">3609</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_type</span><span class="p">()</span>
-</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="n">format_json</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">)</span>
-</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</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-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a>
-</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">expression</span><span class="p">(</span>
-</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</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-3617"><a href="#Parser-3617"><span class="linenos">3617</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-3618"><a href="#Parser-3618"><span class="linenos">3618</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-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a> <span class="n">format_json</span><span class="o">=</span><span class="n">format_json</span><span class="p">,</span>
-</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="Parser-3621"><a href="#Parser-3621"><span class="linenos">3621</span></a> <span class="p">)</span>
-</span><span id="Parser-3622"><a href="#Parser-3622"><span class="linenos">3622</span></a>
-</span><span id="Parser-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a> <span class="k">def</span> <span class="nf">_parse_logarithm</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-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a> <span class="c1"># Default argument order is base, expression</span>
-</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</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_range</span><span class="p">)</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">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
-</span><span id="Parser-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</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="n">exp</span><span class="o">.</span><span class="n">Log</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="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">return</span> <span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Ln</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_DEFAULTS_TO_LN</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a> <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">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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3637"><a href="#Parser-3637"><span class="linenos">3637</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-3638"><a href="#Parser-3638"><span class="linenos">3638</span></a>
-</span><span id="Parser-3639"><a href="#Parser-3639"><span class="linenos">3639</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-3640"><a href="#Parser-3640"><span class="linenos">3640</span></a>
-</span><span id="Parser-3641"><a href="#Parser-3641"><span class="linenos">3641</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-3642"><a href="#Parser-3642"><span class="linenos">3642</span></a>
-</span><span id="Parser-3643"><a href="#Parser-3643"><span class="linenos">3643</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-3644"><a href="#Parser-3644"><span class="linenos">3644</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-3645"><a href="#Parser-3645"><span class="linenos">3645</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-3646"><a href="#Parser-3646"><span class="linenos">3646</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-3647"><a href="#Parser-3647"><span class="linenos">3647</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-3648"><a href="#Parser-3648"><span class="linenos">3648</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</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-3650"><a href="#Parser-3650"><span class="linenos">3650</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="Parser-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3607"><a href="#Parser-3607"><span class="linenos">3607</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="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-3608"><a href="#Parser-3608"><span class="linenos">3608</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_json_key_value</span><span class="p">)</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="n">null_handling</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</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 class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
+</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;NULL ON NULL&quot;</span>
+</span><span id="Parser-3613"><a href="#Parser-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_text_seq</span><span class="p">(</span><span class="s2">&quot;ABSENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
+</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="s2">&quot;ABSENT ON NULL&quot;</span>
+</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</span></a>
+</span><span id="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</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-3618"><a href="#Parser-3618"><span class="linenos">3618</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3619"><a href="#Parser-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_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-3620"><a href="#Parser-3620"><span class="linenos">3620</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3621"><a href="#Parser-3621"><span class="linenos">3621</span></a>
+</span><span id="Parser-3622"><a href="#Parser-3622"><span class="linenos">3622</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-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a>
+</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</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_type</span><span class="p">()</span>
+</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</span></a> <span class="n">format_json</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;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">)</span>
+</span><span id="Parser-3626"><a href="#Parser-3626"><span class="linenos">3626</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-3627"><a href="#Parser-3627"><span class="linenos">3627</span></a>
+</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</span></a> <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-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="Parser-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3631"><a href="#Parser-3631"><span class="linenos">3631</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-3632"><a href="#Parser-3632"><span class="linenos">3632</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-3633"><a href="#Parser-3633"><span class="linenos">3633</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-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a> <span class="n">format_json</span><span class="o">=</span><span class="n">format_json</span><span class="p">,</span>
+</span><span id="Parser-3635"><a href="#Parser-3635"><span class="linenos">3635</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="Parser-3636"><a href="#Parser-3636"><span class="linenos">3636</span></a> <span class="p">)</span>
+</span><span id="Parser-3637"><a href="#Parser-3637"><span class="linenos">3637</span></a>
+</span><span id="Parser-3638"><a href="#Parser-3638"><span class="linenos">3638</span></a> <span class="k">def</span> <span class="nf">_parse_logarithm</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-3639"><a href="#Parser-3639"><span class="linenos">3639</span></a> <span class="c1"># Default argument order is base, expression</span>
+</span><span id="Parser-3640"><a href="#Parser-3640"><span class="linenos">3640</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_range</span><span class="p">)</span>
+</span><span id="Parser-3641"><a href="#Parser-3641"><span class="linenos">3641</span></a>
+</span><span id="Parser-3642"><a href="#Parser-3642"><span class="linenos">3642</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">&gt;</span> <span class="mi">1</span><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="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
+</span><span id="Parser-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="n">args</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
+</span><span id="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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="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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3648"><a href="#Parser-3648"><span class="linenos">3648</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ln</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_DEFAULTS_TO_LN</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="p">)</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="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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</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-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a>
-</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">expression</span><span class="p">(</span>
-</span><span id="Parser-3655"><a href="#Parser-3655"><span class="linenos">3655</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-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a> <span class="p">)</span>
+</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</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-3655"><a href="#Parser-3655"><span class="linenos">3655</span></a>
+</span><span id="Parser-3656"><a href="#Parser-3656"><span class="linenos">3656</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-3657"><a href="#Parser-3657"><span class="linenos">3657</span></a>
-</span><span id="Parser-3658"><a href="#Parser-3658"><span class="linenos">3658</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</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-3660"><a href="#Parser-3660"><span class="linenos">3660</span></a>
-</span><span id="Parser-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3662"><a href="#Parser-3662"><span class="linenos">3662</span></a> <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-3663"><a href="#Parser-3663"><span class="linenos">3663</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-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">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="Parser-3667"><a href="#Parser-3667"><span class="linenos">3667</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-3668"><a href="#Parser-3668"><span class="linenos">3668</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-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</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-3671"><a href="#Parser-3671"><span class="linenos">3671</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-3658"><a href="#Parser-3658"><span class="linenos">3658</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-3659"><a href="#Parser-3659"><span class="linenos">3659</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-3660"><a href="#Parser-3660"><span class="linenos">3660</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-3661"><a href="#Parser-3661"><span class="linenos">3661</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-3662"><a href="#Parser-3662"><span class="linenos">3662</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-3663"><a href="#Parser-3663"><span class="linenos">3663</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="Parser-3664"><a href="#Parser-3664"><span class="linenos">3664</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-3665"><a href="#Parser-3665"><span class="linenos">3665</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="Parser-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3667"><a href="#Parser-3667"><span class="linenos">3667</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3668"><a href="#Parser-3668"><span class="linenos">3668</span></a>
+</span><span id="Parser-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a> <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-3670"><a href="#Parser-3670"><span class="linenos">3670</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-3671"><a href="#Parser-3671"><span class="linenos">3671</span></a> <span class="p">)</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="n">this</span> <span class="o">=</span> <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-3674"><a href="#Parser-3674"><span class="linenos">3674</span></a>
-</span><span id="Parser-3675"><a href="#Parser-3675"><span class="linenos">3675</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><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">return</span> <span class="n">this</span>
-</span><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</span></a>
-</span><span id="Parser-3679"><a href="#Parser-3679"><span class="linenos">3679</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</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-3681"><a href="#Parser-3681"><span class="linenos">3681</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-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">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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="Parser-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a>
-</span><span id="Parser-3687"><a href="#Parser-3687"><span class="linenos">3687</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-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a>
-</span><span id="Parser-3689"><a href="#Parser-3689"><span class="linenos">3689</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3690"><a href="#Parser-3690"><span class="linenos">3690</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-3691"><a href="#Parser-3691"><span class="linenos">3691</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3692"><a href="#Parser-3692"><span class="linenos">3692</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-3673"><a href="#Parser-3673"><span class="linenos">3673</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-3674"><a href="#Parser-3674"><span class="linenos">3674</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-3675"><a href="#Parser-3675"><span class="linenos">3675</span></a>
+</span><span id="Parser-3676"><a href="#Parser-3676"><span class="linenos">3676</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-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><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</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-3679"><a href="#Parser-3679"><span class="linenos">3679</span></a> <span class="p">)</span>
+</span><span id="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</span></a>
+</span><span id="Parser-3681"><a href="#Parser-3681"><span class="linenos">3681</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="Parser-3682"><a href="#Parser-3682"><span class="linenos">3682</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-3683"><a href="#Parser-3683"><span class="linenos">3683</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-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</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-3686"><a href="#Parser-3686"><span class="linenos">3686</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-3687"><a href="#Parser-3687"><span class="linenos">3687</span></a>
+</span><span id="Parser-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a> <span class="n">this</span> <span class="o">=</span> <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-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="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3691"><a href="#Parser-3691"><span class="linenos">3691</span></a>
+</span><span id="Parser-3692"><a href="#Parser-3692"><span class="linenos">3692</span></a> <span class="k">return</span> <span class="n">this</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="n">this</span> <span class="o">=</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><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">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-3696"><a href="#Parser-3696"><span class="linenos">3696</span></a>
-</span><span id="Parser-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="k">return</span> <span class="n">this</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">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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="Parser-3701"><a href="#Parser-3701"><span class="linenos">3701</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
-</span><span id="Parser-3702"><a href="#Parser-3702"><span class="linenos">3702</span></a>
-</span><span id="Parser-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3705"><a href="#Parser-3705"><span class="linenos">3705</span></a>
-</span><span id="Parser-3706"><a href="#Parser-3706"><span class="linenos">3706</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">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</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-3694"><a href="#Parser-3694"><span class="linenos">3694</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</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-3696"><a href="#Parser-3696"><span class="linenos">3696</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-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a>
+</span><span id="Parser-3698"><a href="#Parser-3698"><span class="linenos">3698</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3699"><a href="#Parser-3699"><span class="linenos">3699</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="Parser-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</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="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-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a>
+</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3705"><a href="#Parser-3705"><span class="linenos">3705</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-3706"><a href="#Parser-3706"><span class="linenos">3706</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3707"><a href="#Parser-3707"><span class="linenos">3707</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-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">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-3710"><a href="#Parser-3710"><span class="linenos">3710</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-3711"><a href="#Parser-3711"><span class="linenos">3711</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-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3713"><a href="#Parser-3713"><span class="linenos">3713</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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">if</span> <span class="bp">self</span><span 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-3717"><a href="#Parser-3717"><span class="linenos">3717</span></a> <span class="n">collation</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-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="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span>
-</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
-</span><span id="Parser-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</span></a> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span><span class="p">,</span>
-</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</span></a> <span class="p">)</span>
-</span><span id="Parser-3726"><a href="#Parser-3726"><span class="linenos">3726</span></a>
-</span><span id="Parser-3727"><a href="#Parser-3727"><span class="linenos">3727</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3728"><a href="#Parser-3728"><span class="linenos">3728</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-3729"><a href="#Parser-3729"><span class="linenos">3729</span></a>
-</span><span id="Parser-3730"><a href="#Parser-3730"><span class="linenos">3730</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-3731"><a href="#Parser-3731"><span class="linenos">3731</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-3732"><a href="#Parser-3732"><span class="linenos">3732</span></a>
-</span><span id="Parser-3733"><a href="#Parser-3733"><span class="linenos">3733</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="Parser-3734"><a href="#Parser-3734"><span class="linenos">3734</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-3735"><a href="#Parser-3735"><span class="linenos">3735</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-3736"><a href="#Parser-3736"><span class="linenos">3736</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-3737"><a href="#Parser-3737"><span class="linenos">3737</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">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><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</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-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="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="Parser-3741"><a href="#Parser-3741"><span class="linenos">3741</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-3742"><a href="#Parser-3742"><span class="linenos">3742</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">):</span>
-</span><span id="Parser-3743"><a href="#Parser-3743"><span class="linenos">3743</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-3744"><a href="#Parser-3744"><span class="linenos">3744</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-3745"><a href="#Parser-3745"><span class="linenos">3745</span></a>
-</span><span id="Parser-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="Parser-3747"><a href="#Parser-3747"><span class="linenos">3747</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="Parser-3748"><a href="#Parser-3748"><span class="linenos">3748</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
-</span><span id="Parser-3749"><a href="#Parser-3749"><span class="linenos">3749</span></a>
-</span><span id="Parser-3750"><a href="#Parser-3750"><span class="linenos">3750</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="Parser-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</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="c1"># The below changes handle</span>
-</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="Parser-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a>
-</span><span id="Parser-3756"><a href="#Parser-3756"><span class="linenos">3756</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="Parser-3757"><a href="#Parser-3757"><span class="linenos">3757</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-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="Parser-3759"><a href="#Parser-3759"><span class="linenos">3759</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="Parser-3760"><a href="#Parser-3760"><span class="linenos">3760</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">):</span>
-</span><span id="Parser-3761"><a href="#Parser-3761"><span class="linenos">3761</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">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-3762"><a href="#Parser-3762"><span class="linenos">3762</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">RESPECT_NULLS</span><span class="p">):</span>
-</span><span id="Parser-3763"><a href="#Parser-3763"><span class="linenos">3763</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">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-3764"><a href="#Parser-3764"><span class="linenos">3764</span></a>
-</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="Parser-3766"><a href="#Parser-3766"><span class="linenos">3766</span></a> <span class="k">if</span> <span class="n">alias</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">_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-3768"><a href="#Parser-3768"><span class="linenos">3768</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">OVER</span><span class="p">):</span>
-</span><span id="Parser-3769"><a href="#Parser-3769"><span class="linenos">3769</span></a> <span class="k">return</span> <span class="n">this</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="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-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</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="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><span id="Parser-3709"><a href="#Parser-3709"><span class="linenos">3709</span></a> <span class="n">this</span> <span class="o">=</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><span id="Parser-3710"><a href="#Parser-3710"><span class="linenos">3710</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-3711"><a href="#Parser-3711"><span class="linenos">3711</span></a>
+</span><span id="Parser-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="k">return</span> <span class="n">this</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">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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3715"><a href="#Parser-3715"><span class="linenos">3715</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="Parser-3716"><a href="#Parser-3716"><span class="linenos">3716</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="Parser-3717"><a href="#Parser-3717"><span class="linenos">3717</span></a>
+</span><span id="Parser-3718"><a href="#Parser-3718"><span class="linenos">3718</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3719"><a href="#Parser-3719"><span class="linenos">3719</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a>
+</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</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">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</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-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a>
+</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</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-3725"><a href="#Parser-3725"><span class="linenos">3725</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-3726"><a href="#Parser-3726"><span class="linenos">3726</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-3727"><a href="#Parser-3727"><span class="linenos">3727</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3728"><a href="#Parser-3728"><span class="linenos">3728</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-3729"><a href="#Parser-3729"><span class="linenos">3729</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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="bp">self</span><span 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-3732"><a href="#Parser-3732"><span class="linenos">3732</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-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="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-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span>
+</span><span id="Parser-3736"><a href="#Parser-3736"><span class="linenos">3736</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span>
+</span><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span><span class="p">,</span>
+</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</span></a> <span class="p">)</span>
+</span><span id="Parser-3741"><a href="#Parser-3741"><span class="linenos">3741</span></a>
+</span><span id="Parser-3742"><a href="#Parser-3742"><span class="linenos">3742</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3743"><a href="#Parser-3743"><span class="linenos">3743</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-3744"><a href="#Parser-3744"><span class="linenos">3744</span></a>
+</span><span id="Parser-3745"><a href="#Parser-3745"><span class="linenos">3745</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-3746"><a href="#Parser-3746"><span class="linenos">3746</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-3747"><a href="#Parser-3747"><span class="linenos">3747</span></a>
+</span><span id="Parser-3748"><a href="#Parser-3748"><span class="linenos">3748</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="Parser-3749"><a href="#Parser-3749"><span class="linenos">3749</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-3750"><a href="#Parser-3750"><span class="linenos">3750</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-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">):</span>
+</span><span id="Parser-3752"><a href="#Parser-3752"><span class="linenos">3752</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3753"><a href="#Parser-3753"><span class="linenos">3753</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RESPECT_NULLS</span><span class="p">):</span>
+</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3756"><a href="#Parser-3756"><span class="linenos">3756</span></a>
+</span><span id="Parser-3757"><a href="#Parser-3757"><span class="linenos">3757</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="Parser-3758"><a href="#Parser-3758"><span class="linenos">3758</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-3759"><a href="#Parser-3759"><span class="linenos">3759</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-3760"><a href="#Parser-3760"><span class="linenos">3760</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-3761"><a href="#Parser-3761"><span class="linenos">3761</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">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><span id="Parser-3762"><a href="#Parser-3762"><span class="linenos">3762</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-3763"><a href="#Parser-3763"><span class="linenos">3763</span></a>
+</span><span id="Parser-3764"><a href="#Parser-3764"><span class="linenos">3764</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</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-3766"><a href="#Parser-3766"><span class="linenos">3766</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">):</span>
+</span><span id="Parser-3767"><a href="#Parser-3767"><span class="linenos">3767</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-3768"><a href="#Parser-3768"><span class="linenos">3768</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-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="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="Parser-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a>
-</span><span id="Parser-3774"><a href="#Parser-3774"><span class="linenos">3774</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-3775"><a href="#Parser-3775"><span class="linenos">3775</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-3776"><a href="#Parser-3776"><span class="linenos">3776</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-3777"><a href="#Parser-3777"><span class="linenos">3777</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-3778"><a href="#Parser-3778"><span class="linenos">3778</span></a>
-</span><span id="Parser-3779"><a href="#Parser-3779"><span class="linenos">3779</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-3780"><a href="#Parser-3780"><span class="linenos">3780</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-3781"><a href="#Parser-3781"><span class="linenos">3781</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-3782"><a href="#Parser-3782"><span class="linenos">3782</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-3783"><a href="#Parser-3783"><span class="linenos">3783</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-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="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-3786"><a href="#Parser-3786"><span class="linenos">3786</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</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-3789"><a href="#Parser-3789"><span class="linenos">3789</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-3790"><a href="#Parser-3790"><span class="linenos">3790</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-3791"><a href="#Parser-3791"><span class="linenos">3791</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-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a> <span class="p">)</span>
-</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3795"><a href="#Parser-3795"><span class="linenos">3795</span></a>
-</span><span id="Parser-3796"><a href="#Parser-3796"><span class="linenos">3796</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-3797"><a href="#Parser-3797"><span class="linenos">3797</span></a>
-</span><span id="Parser-3798"><a href="#Parser-3798"><span class="linenos">3798</span></a> <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-3799"><a href="#Parser-3799"><span class="linenos">3799</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><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">this</span><span class="p">,</span>
-</span><span id="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</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-3802"><a href="#Parser-3802"><span class="linenos">3802</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</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-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="p">)</span>
-</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</span></a>
-</span><span id="Parser-3807"><a href="#Parser-3807"><span class="linenos">3807</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-3808"><a href="#Parser-3808"><span class="linenos">3808</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-3774"><a href="#Parser-3774"><span class="linenos">3774</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="Parser-3775"><a href="#Parser-3775"><span class="linenos">3775</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="Parser-3776"><a href="#Parser-3776"><span class="linenos">3776</span></a>
+</span><span id="Parser-3777"><a href="#Parser-3777"><span class="linenos">3777</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="Parser-3778"><a href="#Parser-3778"><span class="linenos">3778</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
+</span><span id="Parser-3779"><a href="#Parser-3779"><span class="linenos">3779</span></a>
+</span><span id="Parser-3780"><a href="#Parser-3780"><span class="linenos">3780</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="Parser-3781"><a href="#Parser-3781"><span class="linenos">3781</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-3782"><a href="#Parser-3782"><span class="linenos">3782</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="Parser-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</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-3785"><a href="#Parser-3785"><span class="linenos">3785</span></a>
+</span><span id="Parser-3786"><a href="#Parser-3786"><span class="linenos">3786</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3789"><a href="#Parser-3789"><span class="linenos">3789</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-3790"><a href="#Parser-3790"><span class="linenos">3790</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-3791"><a href="#Parser-3791"><span class="linenos">3791</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</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-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a>
+</span><span id="Parser-3795"><a href="#Parser-3795"><span class="linenos">3795</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-3796"><a href="#Parser-3796"><span class="linenos">3796</span></a> <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-3797"><a href="#Parser-3797"><span class="linenos">3797</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-3798"><a href="#Parser-3798"><span class="linenos">3798</span></a> <span class="p">)</span>
+</span><span id="Parser-3799"><a href="#Parser-3799"><span class="linenos">3799</span></a>
+</span><span id="Parser-3800"><a href="#Parser-3800"><span class="linenos">3800</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-3801"><a href="#Parser-3801"><span class="linenos">3801</span></a>
+</span><span id="Parser-3802"><a href="#Parser-3802"><span class="linenos">3802</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-3803"><a href="#Parser-3803"><span class="linenos">3803</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-3804"><a href="#Parser-3804"><span class="linenos">3804</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a>
+</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</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-3807"><a href="#Parser-3807"><span class="linenos">3807</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-3808"><a href="#Parser-3808"><span class="linenos">3808</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-3809"><a href="#Parser-3809"><span class="linenos">3809</span></a>
-</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</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">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</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-3813"><a href="#Parser-3813"><span class="linenos">3813</span></a> <span class="p">)</span>
-</span><span id="Parser-3814"><a href="#Parser-3814"><span class="linenos">3814</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-3815"><a href="#Parser-3815"><span class="linenos">3815</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</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-3816"><a href="#Parser-3816"><span class="linenos">3816</span></a> <span class="p">}</span>
-</span><span id="Parser-3817"><a href="#Parser-3817"><span class="linenos">3817</span></a>
-</span><span id="Parser-3818"><a href="#Parser-3818"><span class="linenos">3818</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
-</span><span id="Parser-3819"><a href="#Parser-3819"><span class="linenos">3819</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-3820"><a href="#Parser-3820"><span class="linenos">3820</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-3821"><a href="#Parser-3821"><span class="linenos">3821</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-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a>
-</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</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-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a>
-</span><span id="Parser-3826"><a href="#Parser-3826"><span class="linenos">3826</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3827"><a href="#Parser-3827"><span class="linenos">3827</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-3828"><a href="#Parser-3828"><span class="linenos">3828</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="Parser-3829"><a href="#Parser-3829"><span class="linenos">3829</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</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-3831"><a href="#Parser-3831"><span class="linenos">3831</span></a> <span class="p">)</span>
-</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</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-3833"><a href="#Parser-3833"><span class="linenos">3833</span></a> <span class="k">return</span> <span class="n">aliases</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="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><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="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</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-3812"><a href="#Parser-3812"><span class="linenos">3812</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-3813"><a href="#Parser-3813"><span class="linenos">3813</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-3814"><a href="#Parser-3814"><span class="linenos">3814</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-3815"><a href="#Parser-3815"><span class="linenos">3815</span></a>
+</span><span id="Parser-3816"><a href="#Parser-3816"><span class="linenos">3816</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-3817"><a href="#Parser-3817"><span class="linenos">3817</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="Parser-3818"><a href="#Parser-3818"><span class="linenos">3818</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-3819"><a href="#Parser-3819"><span class="linenos">3819</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-3820"><a href="#Parser-3820"><span class="linenos">3820</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-3821"><a href="#Parser-3821"><span class="linenos">3821</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-3822"><a href="#Parser-3822"><span class="linenos">3822</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-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="p">)</span>
+</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3826"><a href="#Parser-3826"><span class="linenos">3826</span></a>
+</span><span id="Parser-3827"><a href="#Parser-3827"><span class="linenos">3827</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-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="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-3830"><a href="#Parser-3830"><span class="linenos">3830</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</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">this</span><span class="p">,</span>
+</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</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-3833"><a href="#Parser-3833"><span class="linenos">3833</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-3834"><a href="#Parser-3834"><span class="linenos">3834</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="Parser-3835"><a href="#Parser-3835"><span class="linenos">3835</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-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</span></a> <span class="p">)</span>
</span><span id="Parser-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a>
-</span><span id="Parser-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a>
-</span><span id="Parser-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</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-3845"><a href="#Parser-3845"><span class="linenos">3845</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-3846"><a href="#Parser-3846"><span class="linenos">3846</span></a> <span class="n">prefix_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-3847"><a href="#Parser-3847"><span class="linenos">3847</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-3848"><a href="#Parser-3848"><span class="linenos">3848</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-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">if</span> <span class="n">identifier</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">identifier</span>
-</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</span></a>
-</span><span id="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</span></a>
-</span><span id="Parser-3855"><a href="#Parser-3855"><span class="linenos">3855</span></a> <span class="k">if</span> <span class="n">prefix_tokens</span><span class="p">:</span>
-</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</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">prefix_tokens</span><span class="p">):</span>
-</span><span id="Parser-3857"><a href="#Parser-3857"><span class="linenos">3857</span></a> <span class="n">prefix</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-3840"><a href="#Parser-3840"><span class="linenos">3840</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-3841"><a href="#Parser-3841"><span class="linenos">3841</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-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a>
+</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</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">UNBOUNDED</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</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-3846"><a href="#Parser-3846"><span class="linenos">3846</span></a> <span class="p">)</span>
+</span><span id="Parser-3847"><a href="#Parser-3847"><span class="linenos">3847</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-3848"><a href="#Parser-3848"><span class="linenos">3848</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_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</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-3849"><a href="#Parser-3849"><span class="linenos">3849</span></a> <span class="p">}</span>
+</span><span id="Parser-3850"><a href="#Parser-3850"><span class="linenos">3850</span></a>
+</span><span id="Parser-3851"><a href="#Parser-3851"><span class="linenos">3851</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</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-3853"><a href="#Parser-3853"><span class="linenos">3853</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-3854"><a href="#Parser-3854"><span class="linenos">3854</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-3855"><a href="#Parser-3855"><span class="linenos">3855</span></a>
+</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</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-3857"><a href="#Parser-3857"><span class="linenos">3857</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a>
-</span><span id="Parser-3859"><a href="#Parser-3859"><span class="linenos">3859</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-3860"><a href="#Parser-3860"><span class="linenos">3860</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-3861"><a href="#Parser-3861"><span class="linenos">3861</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="n">prefix</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-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a>
-</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a> <span class="k">return</span> <span class="kc">None</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">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-3866"><a href="#Parser-3866"><span class="linenos">3866</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3867"><a href="#Parser-3867"><span class="linenos">3867</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">STRING</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-3868"><a href="#Parser-3868"><span class="linenos">3868</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-3859"><a href="#Parser-3859"><span class="linenos">3859</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3860"><a href="#Parser-3860"><span class="linenos">3860</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-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</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-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a> <span class="p">)</span>
+</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</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-3866"><a href="#Parser-3866"><span class="linenos">3866</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="Parser-3867"><a href="#Parser-3867"><span class="linenos">3867</span></a>
+</span><span id="Parser-3868"><a href="#Parser-3868"><span class="linenos">3868</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><span id="Parser-3869"><a href="#Parser-3869"><span class="linenos">3869</span></a>
-</span><span id="Parser-3870"><a href="#Parser-3870"><span class="linenos">3870</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</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-3870"><a href="#Parser-3870"><span class="linenos">3870</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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-3872"><a href="#Parser-3872"><span class="linenos">3872</span></a>
-</span><span id="Parser-3873"><a href="#Parser-3873"><span class="linenos">3873</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-3874"><a href="#Parser-3874"><span class="linenos">3874</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3875"><a href="#Parser-3875"><span class="linenos">3875</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-3876"><a href="#Parser-3876"><span class="linenos">3876</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-3877"><a href="#Parser-3877"><span class="linenos">3877</span></a>
-</span><span id="Parser-3878"><a href="#Parser-3878"><span class="linenos">3878</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-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3881"><a href="#Parser-3881"><span class="linenos">3881</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-3873"><a href="#Parser-3873"><span class="linenos">3873</span></a> <span class="k">return</span> <span class="n">this</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_id_var</span><span class="p">(</span>
+</span><span id="Parser-3876"><a href="#Parser-3876"><span class="linenos">3876</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3877"><a href="#Parser-3877"><span class="linenos">3877</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-3878"><a href="#Parser-3878"><span class="linenos">3878</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-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="n">prefix_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-3880"><a href="#Parser-3880"><span class="linenos">3880</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-3881"><a href="#Parser-3881"><span class="linenos">3881</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-3882"><a href="#Parser-3882"><span class="linenos">3882</span></a>
-</span><span id="Parser-3883"><a href="#Parser-3883"><span class="linenos">3883</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
-</span><span id="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a> <span class="bp">self</span><span class="p">,</span> <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 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><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</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-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</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-3888"><a href="#Parser-3888"><span class="linenos">3888</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-3889"><a href="#Parser-3889"><span class="linenos">3889</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-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="p">):</span>
-</span><span id="Parser-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3892"><a href="#Parser-3892"><span class="linenos">3892</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-3893"><a href="#Parser-3893"><span class="linenos">3893</span></a>
-</span><span id="Parser-3894"><a href="#Parser-3894"><span class="linenos">3894</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="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-3895"><a href="#Parser-3895"><span class="linenos">3895</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">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_KEYWORDS</span><span class="p">:</span>
-</span><span id="Parser-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</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-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a>
-</span><span id="Parser-3900"><a href="#Parser-3900"><span class="linenos">3900</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-3901"><a href="#Parser-3901"><span class="linenos">3901</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-3883"><a href="#Parser-3883"><span class="linenos">3883</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</span></a>
+</span><span id="Parser-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">prefix_tokens</span><span class="p">:</span>
+</span><span id="Parser-3889"><a href="#Parser-3889"><span class="linenos">3889</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">prefix_tokens</span><span class="p">):</span>
+</span><span id="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="n">prefix</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-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a>
+</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</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-3893"><a href="#Parser-3893"><span class="linenos">3893</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-3894"><a href="#Parser-3894"><span class="linenos">3894</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="n">prefix</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-3895"><a href="#Parser-3895"><span class="linenos">3895</span></a>
+</span><span id="Parser-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</span></a>
+</span><span id="Parser-3898"><a href="#Parser-3898"><span class="linenos">3898</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-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3900"><a href="#Parser-3900"><span class="linenos">3900</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">STRING</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-3901"><a href="#Parser-3901"><span class="linenos">3901</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-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">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-3904"><a href="#Parser-3904"><span class="linenos">3904</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3905"><a href="#Parser-3905"><span class="linenos">3905</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-3906"><a href="#Parser-3906"><span class="linenos">3906</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3907"><a href="#Parser-3907"><span class="linenos">3907</span></a>
-</span><span id="Parser-3908"><a href="#Parser-3908"><span class="linenos">3908</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-3909"><a href="#Parser-3909"><span class="linenos">3909</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3910"><a href="#Parser-3910"><span class="linenos">3910</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-3911"><a href="#Parser-3911"><span class="linenos">3911</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3912"><a href="#Parser-3912"><span class="linenos">3912</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-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a> <span class="k">return</span> <span class="kc">None</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">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-3916"><a href="#Parser-3916"><span class="linenos">3916</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3917"><a href="#Parser-3917"><span class="linenos">3917</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-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a> <span class="k">return</span> <span class="kc">None</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">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">Expression</span><span class="p">:</span>
-</span><span id="Parser-3921"><a href="#Parser-3921"><span class="linenos">3921</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_BRACE</span><span class="p">)</span>
-</span><span id="Parser-3922"><a href="#Parser-3922"><span class="linenos">3922</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-3923"><a href="#Parser-3923"><span class="linenos">3923</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-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">wrapped</span><span class="o">=</span><span class="n">wrapped</span><span class="p">)</span>
-</span><span id="Parser-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a>
-</span><span id="Parser-3926"><a href="#Parser-3926"><span class="linenos">3926</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-3927"><a href="#Parser-3927"><span class="linenos">3927</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-3928"><a href="#Parser-3928"><span class="linenos">3928</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-3929"><a href="#Parser-3929"><span class="linenos">3929</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
-</span><span id="Parser-3930"><a href="#Parser-3930"><span class="linenos">3930</span></a> <span class="k">return</span> <span class="n">placeholder</span>
-</span><span id="Parser-3931"><a href="#Parser-3931"><span class="linenos">3931</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-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a> <span class="k">return</span> <span class="kc">None</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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3935"><a href="#Parser-3935"><span class="linenos">3935</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-3936"><a href="#Parser-3936"><span class="linenos">3936</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3938"><a href="#Parser-3938"><span class="linenos">3938</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-3939"><a href="#Parser-3939"><span class="linenos">3939</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_column</span><span class="p">)</span>
+</span><span id="Parser-3903"><a href="#Parser-3903"><span class="linenos">3903</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3904"><a href="#Parser-3904"><span class="linenos">3904</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-3905"><a href="#Parser-3905"><span class="linenos">3905</span></a>
+</span><span id="Parser-3906"><a href="#Parser-3906"><span class="linenos">3906</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-3907"><a href="#Parser-3907"><span class="linenos">3907</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3908"><a href="#Parser-3908"><span class="linenos">3908</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-3909"><a href="#Parser-3909"><span class="linenos">3909</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-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a>
+</span><span id="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</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-3912"><a href="#Parser-3912"><span class="linenos">3912</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3914"><a href="#Parser-3914"><span class="linenos">3914</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-3915"><a href="#Parser-3915"><span class="linenos">3915</span></a>
+</span><span id="Parser-3916"><a href="#Parser-3916"><span class="linenos">3916</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="Parser-3917"><a href="#Parser-3917"><span class="linenos">3917</span></a> <span class="bp">self</span><span class="p">,</span> <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 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><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</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-3919"><a href="#Parser-3919"><span class="linenos">3919</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-3920"><a href="#Parser-3920"><span class="linenos">3920</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-3921"><a href="#Parser-3921"><span class="linenos">3921</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-3922"><a href="#Parser-3922"><span class="linenos">3922</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-3923"><a href="#Parser-3923"><span class="linenos">3923</span></a> <span class="p">):</span>
+</span><span id="Parser-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-3925"><a href="#Parser-3925"><span class="linenos">3925</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-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">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="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-3928"><a href="#Parser-3928"><span class="linenos">3928</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">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_KEYWORDS</span><span class="p">:</span>
+</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-3930"><a href="#Parser-3930"><span class="linenos">3930</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-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a> <span class="k">return</span> <span class="kc">None</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">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-3934"><a href="#Parser-3934"><span class="linenos">3934</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-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">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-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</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-3938"><a href="#Parser-3938"><span class="linenos">3938</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-3939"><a href="#Parser-3939"><span class="linenos">3939</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3940"><a href="#Parser-3940"><span class="linenos">3940</span></a>
-</span><span id="Parser-3941"><a href="#Parser-3941"><span class="linenos">3941</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3942"><a href="#Parser-3942"><span class="linenos">3942</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-3943"><a href="#Parser-3943"><span class="linenos">3943</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3945"><a href="#Parser-3945"><span class="linenos">3945</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-3946"><a href="#Parser-3946"><span class="linenos">3946</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-3941"><a href="#Parser-3941"><span class="linenos">3941</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-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3943"><a href="#Parser-3943"><span class="linenos">3943</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-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3945"><a href="#Parser-3945"><span class="linenos">3945</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-3946"><a href="#Parser-3946"><span class="linenos">3946</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3947"><a href="#Parser-3947"><span class="linenos">3947</span></a>
-</span><span id="Parser-3948"><a href="#Parser-3948"><span class="linenos">3948</span></a> <span class="k">def</span> <span class="nf">_parse_csv</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="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-3950"><a href="#Parser-3950"><span class="linenos">3950</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="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</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-3952"><a href="#Parser-3952"><span class="linenos">3952</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-3953"><a href="#Parser-3953"><span class="linenos">3953</span></a>
-</span><span id="Parser-3954"><a href="#Parser-3954"><span class="linenos">3954</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-3955"><a href="#Parser-3955"><span class="linenos">3955</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="Parser-3956"><a href="#Parser-3956"><span class="linenos">3956</span></a> <span class="n">parse_result</span><span class="o">.</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><span id="Parser-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a>
-</span><span id="Parser-3958"><a href="#Parser-3958"><span class="linenos">3958</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-3959"><a href="#Parser-3959"><span class="linenos">3959</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-3960"><a href="#Parser-3960"><span class="linenos">3960</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-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="n">items</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_tokens</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 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-3966"><a href="#Parser-3966"><span class="linenos">3966</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-3967"><a href="#Parser-3967"><span class="linenos">3967</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-3968"><a href="#Parser-3968"><span class="linenos">3968</span></a>
-</span><span id="Parser-3969"><a href="#Parser-3969"><span class="linenos">3969</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-3970"><a href="#Parser-3970"><span class="linenos">3970</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-3971"><a href="#Parser-3971"><span class="linenos">3971</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-3972"><a href="#Parser-3972"><span class="linenos">3972</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3973"><a href="#Parser-3973"><span class="linenos">3973</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-3974"><a href="#Parser-3974"><span class="linenos">3974</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-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a> <span class="p">)</span>
-</span><span id="Parser-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a>
-</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3978"><a href="#Parser-3978"><span class="linenos">3978</span></a>
-</span><span id="Parser-3979"><a href="#Parser-3979"><span class="linenos">3979</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="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="Parser-3980"><a href="#Parser-3980"><span class="linenos">3980</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><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</span></a>
-</span><span id="Parser-3982"><a href="#Parser-3982"><span class="linenos">3982</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="Parser-3983"><a href="#Parser-3983"><span class="linenos">3983</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-3984"><a href="#Parser-3984"><span class="linenos">3984</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="Parser-3985"><a href="#Parser-3985"><span class="linenos">3985</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 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><span id="Parser-3948"><a href="#Parser-3948"><span class="linenos">3948</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-3949"><a href="#Parser-3949"><span class="linenos">3949</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3950"><a href="#Parser-3950"><span class="linenos">3950</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-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</span></a>
+</span><span id="Parser-3953"><a href="#Parser-3953"><span class="linenos">3953</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-3954"><a href="#Parser-3954"><span class="linenos">3954</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_BRACE</span><span class="p">)</span>
+</span><span id="Parser-3955"><a href="#Parser-3955"><span class="linenos">3955</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-3956"><a href="#Parser-3956"><span class="linenos">3956</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-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">wrapped</span><span class="o">=</span><span class="n">wrapped</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="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-3960"><a href="#Parser-3960"><span class="linenos">3960</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-3961"><a href="#Parser-3961"><span class="linenos">3961</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-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="Parser-3964"><a href="#Parser-3964"><span class="linenos">3964</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-3965"><a href="#Parser-3965"><span class="linenos">3965</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</span></a>
+</span><span id="Parser-3967"><a href="#Parser-3967"><span class="linenos">3967</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3968"><a href="#Parser-3968"><span class="linenos">3968</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-3969"><a href="#Parser-3969"><span class="linenos">3969</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3970"><a href="#Parser-3970"><span class="linenos">3970</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3971"><a href="#Parser-3971"><span class="linenos">3971</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-3972"><a href="#Parser-3972"><span class="linenos">3972</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_column</span><span class="p">)</span>
+</span><span id="Parser-3973"><a href="#Parser-3973"><span class="linenos">3973</span></a>
+</span><span id="Parser-3974"><a href="#Parser-3974"><span class="linenos">3974</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3975"><a href="#Parser-3975"><span class="linenos">3975</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-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-3978"><a href="#Parser-3978"><span class="linenos">3978</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-3979"><a href="#Parser-3979"><span class="linenos">3979</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-3980"><a href="#Parser-3980"><span class="linenos">3980</span></a>
+</span><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-3982"><a href="#Parser-3982"><span class="linenos">3982</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-3983"><a href="#Parser-3983"><span class="linenos">3983</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="Parser-3984"><a href="#Parser-3984"><span class="linenos">3984</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-3985"><a href="#Parser-3985"><span class="linenos">3985</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-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">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="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-3988"><a href="#Parser-3988"><span class="linenos">3988</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-3989"><a href="#Parser-3989"><span class="linenos">3989</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-3990"><a href="#Parser-3990"><span class="linenos">3990</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-3991"><a href="#Parser-3991"><span class="linenos">3991</span></a> <span class="k">return</span> <span class="n">parse_result</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="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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-3994"><a href="#Parser-3994"><span class="linenos">3994</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 class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">())</span>
-</span><span id="Parser-3995"><a href="#Parser-3995"><span class="linenos">3995</span></a>
-</span><span id="Parser-3996"><a href="#Parser-3996"><span class="linenos">3996</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-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a> <span class="k">return</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-3998"><a href="#Parser-3998"><span class="linenos">3998</span></a> <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-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a> <span class="p">)</span>
-</span><span id="Parser-4000"><a href="#Parser-4000"><span class="linenos">4000</span></a>
-</span><span id="Parser-4001"><a href="#Parser-4001"><span class="linenos">4001</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-4002"><a href="#Parser-4002"><span class="linenos">4002</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4003"><a href="#Parser-4003"><span class="linenos">4003</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-4004"><a href="#Parser-4004"><span class="linenos">4004</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-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a>
-</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</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-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="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4011"><a href="#Parser-4011"><span class="linenos">4011</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-4012"><a href="#Parser-4012"><span class="linenos">4012</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-4013"><a href="#Parser-4013"><span class="linenos">4013</span></a>
-</span><span id="Parser-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</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-4016"><a href="#Parser-4016"><span class="linenos">4016</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-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a> <span class="k">break</span>
-</span><span id="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</span></a>
-</span><span id="Parser-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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">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">Expression</span><span class="p">:</span>
-</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</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-3987"><a href="#Parser-3987"><span class="linenos">3987</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-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</span></a> <span class="n">parse_result</span><span class="o">.</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><span id="Parser-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a>
+</span><span id="Parser-3991"><a href="#Parser-3991"><span class="linenos">3991</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-3992"><a href="#Parser-3992"><span class="linenos">3992</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-3993"><a href="#Parser-3993"><span class="linenos">3993</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-3994"><a href="#Parser-3994"><span class="linenos">3994</span></a>
+</span><span id="Parser-3995"><a href="#Parser-3995"><span class="linenos">3995</span></a> <span class="k">return</span> <span class="n">items</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">def</span> <span class="nf">_parse_tokens</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="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-3999"><a href="#Parser-3999"><span class="linenos">3999</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-4000"><a href="#Parser-4000"><span class="linenos">4000</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-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">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-4003"><a href="#Parser-4003"><span class="linenos">4003</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-4004"><a href="#Parser-4004"><span class="linenos">4004</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-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</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-4007"><a href="#Parser-4007"><span class="linenos">4007</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-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="p">)</span>
+</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a>
+</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4011"><a href="#Parser-4011"><span class="linenos">4011</span></a>
+</span><span id="Parser-4012"><a href="#Parser-4012"><span class="linenos">4012</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="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="Parser-4013"><a href="#Parser-4013"><span class="linenos">4013</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><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">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="Parser-4016"><a href="#Parser-4016"><span class="linenos">4016</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-4017"><a href="#Parser-4017"><span class="linenos">4017</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="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</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 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><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="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="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-4021"><a href="#Parser-4021"><span class="linenos">4021</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-4022"><a href="#Parser-4022"><span class="linenos">4022</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-4023"><a href="#Parser-4023"><span class="linenos">4023</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-4024"><a href="#Parser-4024"><span class="linenos">4024</span></a> <span class="k">return</span> <span class="n">parse_result</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="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-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="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-4029"><a href="#Parser-4029"><span class="linenos">4029</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-4030"><a href="#Parser-4030"><span class="linenos">4030</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-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a>
-</span><span id="Parser-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4033"><a href="#Parser-4033"><span class="linenos">4033</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-4034"><a href="#Parser-4034"><span class="linenos">4034</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-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="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4038"><a href="#Parser-4038"><span class="linenos">4038</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a>
-</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</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-4041"><a href="#Parser-4041"><span class="linenos">4041</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-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="k">return</span> <span class="kc">None</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="bp">self</span><span 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-4045"><a href="#Parser-4045"><span class="linenos">4045</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-4046"><a href="#Parser-4046"><span class="linenos">4046</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_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-4047"><a href="#Parser-4047"><span class="linenos">4047</span></a>
-</span><span id="Parser-4048"><a href="#Parser-4048"><span class="linenos">4048</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</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-4050"><a href="#Parser-4050"><span class="linenos">4050</span></a>
-</span><span id="Parser-4051"><a href="#Parser-4051"><span class="linenos">4051</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="Parser-4052"><a href="#Parser-4052"><span class="linenos">4052</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-4053"><a href="#Parser-4053"><span class="linenos">4053</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-4054"><a href="#Parser-4054"><span class="linenos">4054</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-4055"><a href="#Parser-4055"><span class="linenos">4055</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-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a> <span class="p">)</span>
-</span><span id="Parser-4057"><a href="#Parser-4057"><span class="linenos">4057</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-4026"><a href="#Parser-4026"><span class="linenos">4026</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="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4027"><a href="#Parser-4027"><span class="linenos">4027</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 class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">())</span>
+</span><span id="Parser-4028"><a href="#Parser-4028"><span class="linenos">4028</span></a>
+</span><span id="Parser-4029"><a href="#Parser-4029"><span class="linenos">4029</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-4030"><a href="#Parser-4030"><span class="linenos">4030</span></a> <span class="k">return</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-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a> <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-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a> <span class="p">)</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="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">Expression</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="kc">None</span>
+</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</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-4037"><a href="#Parser-4037"><span class="linenos">4037</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-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="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-4040"><a href="#Parser-4040"><span class="linenos">4040</span></a>
+</span><span id="Parser-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</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-4045"><a href="#Parser-4045"><span class="linenos">4045</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-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="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="Parser-4048"><a href="#Parser-4048"><span class="linenos">4048</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-4049"><a href="#Parser-4049"><span class="linenos">4049</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-4050"><a href="#Parser-4050"><span class="linenos">4050</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span 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-4053"><a href="#Parser-4053"><span class="linenos">4053</span></a>
+</span><span id="Parser-4054"><a href="#Parser-4054"><span class="linenos">4054</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-4055"><a href="#Parser-4055"><span class="linenos">4055</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4057"><a href="#Parser-4057"><span class="linenos">4057</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-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">return</span> <span class="n">expression</span>
+</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</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-4060"><a href="#Parser-4060"><span class="linenos">4060</span></a>
-</span><span id="Parser-4061"><a href="#Parser-4061"><span class="linenos">4061</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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</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-4063"><a href="#Parser-4063"><span class="linenos">4063</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-4064"><a href="#Parser-4064"><span class="linenos">4064</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-4065"><a href="#Parser-4065"><span class="linenos">4065</span></a> <span class="k">return</span> <span class="n">drop</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="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-4069"><a href="#Parser-4069"><span class="linenos">4069</span></a> <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-4070"><a href="#Parser-4070"><span class="linenos">4070</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-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a> <span class="p">)</span>
+</span><span id="Parser-4061"><a href="#Parser-4061"><span class="linenos">4061</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-4062"><a href="#Parser-4062"><span class="linenos">4062</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-4063"><a href="#Parser-4063"><span class="linenos">4063</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-4064"><a href="#Parser-4064"><span class="linenos">4064</span></a>
+</span><span id="Parser-4065"><a href="#Parser-4065"><span class="linenos">4065</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4066"><a href="#Parser-4066"><span class="linenos">4066</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-4067"><a href="#Parser-4067"><span class="linenos">4067</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-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="k">if</span> <span class="n">is_rollback</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">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-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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="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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4074"><a href="#Parser-4074"><span class="linenos">4074</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4075"><a href="#Parser-4075"><span class="linenos">4075</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-4073"><a href="#Parser-4073"><span class="linenos">4073</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-4074"><a href="#Parser-4074"><span class="linenos">4074</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-4075"><a href="#Parser-4075"><span class="linenos">4075</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4076"><a href="#Parser-4076"><span class="linenos">4076</span></a>
-</span><span id="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</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-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">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-4081"><a href="#Parser-4081"><span class="linenos">4081</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-4082"><a href="#Parser-4082"><span class="linenos">4082</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><span id="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</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-4078"><a href="#Parser-4078"><span class="linenos">4078</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-4079"><a href="#Parser-4079"><span class="linenos">4079</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_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-4080"><a href="#Parser-4080"><span class="linenos">4080</span></a>
+</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-4082"><a href="#Parser-4082"><span class="linenos">4082</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-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><span id="Parser-4085"><a href="#Parser-4085"><span class="linenos">4085</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-4086"><a href="#Parser-4086"><span class="linenos">4086</span></a> <span class="p">)</span>
-</span><span id="Parser-4087"><a href="#Parser-4087"><span class="linenos">4087</span></a>
-</span><span id="Parser-4088"><a href="#Parser-4088"><span class="linenos">4088</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-4089"><a href="#Parser-4089"><span class="linenos">4089</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-4090"><a href="#Parser-4090"><span class="linenos">4090</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-4091"><a href="#Parser-4091"><span class="linenos">4091</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-4092"><a href="#Parser-4092"><span class="linenos">4092</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4093"><a href="#Parser-4093"><span class="linenos">4093</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4094"><a href="#Parser-4094"><span class="linenos">4094</span></a>
-</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">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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4098"><a href="#Parser-4098"><span class="linenos">4098</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-4084"><a href="#Parser-4084"><span class="linenos">4084</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="Parser-4085"><a href="#Parser-4085"><span class="linenos">4085</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-4086"><a href="#Parser-4086"><span class="linenos">4086</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-4087"><a href="#Parser-4087"><span class="linenos">4087</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-4088"><a href="#Parser-4088"><span class="linenos">4088</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-4089"><a href="#Parser-4089"><span class="linenos">4089</span></a> <span class="p">)</span>
+</span><span id="Parser-4090"><a href="#Parser-4090"><span class="linenos">4090</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-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">return</span> <span class="n">expression</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">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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4095"><a href="#Parser-4095"><span class="linenos">4095</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-4096"><a href="#Parser-4096"><span class="linenos">4096</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-4097"><a href="#Parser-4097"><span class="linenos">4097</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-4098"><a href="#Parser-4098"><span class="linenos">4098</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</span></a>
-</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</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-4101"><a href="#Parser-4101"><span class="linenos">4101</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-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="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-4104"><a href="#Parser-4104"><span class="linenos">4104</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_column</span><span class="p">)</span>
+</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="Parser-4101"><a href="#Parser-4101"><span class="linenos">4101</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a> <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-4103"><a href="#Parser-4103"><span class="linenos">4103</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-4104"><a href="#Parser-4104"><span class="linenos">4104</span></a> <span class="p">)</span>
</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a>
-</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</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-4108"><a href="#Parser-4108"><span class="linenos">4108</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-4106"><a href="#Parser-4106"><span class="linenos">4106</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4107"><a href="#Parser-4107"><span class="linenos">4107</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4108"><a href="#Parser-4108"><span class="linenos">4108</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-4109"><a href="#Parser-4109"><span class="linenos">4109</span></a>
-</span><span id="Parser-4110"><a href="#Parser-4110"><span class="linenos">4110</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-4111"><a href="#Parser-4111"><span class="linenos">4111</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-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_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-4113"><a href="#Parser-4113"><span class="linenos">4113</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4114"><a href="#Parser-4114"><span class="linenos">4114</span></a>
-</span><span id="Parser-4115"><a href="#Parser-4115"><span class="linenos">4115</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-4116"><a href="#Parser-4116"><span class="linenos">4116</span></a> <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-4117"><a href="#Parser-4117"><span class="linenos">4117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="Parser-4119"><a href="#Parser-4119"><span class="linenos">4119</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-4120"><a href="#Parser-4120"><span class="linenos">4120</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-4121"><a href="#Parser-4121"><span class="linenos">4121</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-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a> <span class="p">)</span>
-</span><span id="Parser-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a>
-</span><span id="Parser-4124"><a href="#Parser-4124"><span class="linenos">4124</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4125"><a href="#Parser-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 class="o">-</span> <span class="mi">1</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">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-4128"><a href="#Parser-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">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-4129"><a href="#Parser-4129"><span class="linenos">4129</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-4130"><a href="#Parser-4130"><span class="linenos">4130</span></a>
-</span><span id="Parser-4131"><a href="#Parser-4131"><span class="linenos">4131</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-4132"><a href="#Parser-4132"><span class="linenos">4132</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-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a>
-</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</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">exp</span><span class="o">.</span><span class="n">Expression</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">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</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">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-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">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">t</span><span class="o">.</span><span class="n">Optional</span><span 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">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</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="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-4142"><a href="#Parser-4142"><span class="linenos">4142</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-4143"><a href="#Parser-4143"><span class="linenos">4143</span></a>
-</span><span id="Parser-4144"><a href="#Parser-4144"><span class="linenos">4144</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-4145"><a href="#Parser-4145"><span class="linenos">4145</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-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a>
-</span><span id="Parser-4147"><a href="#Parser-4147"><span class="linenos">4147</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-4148"><a href="#Parser-4148"><span class="linenos">4148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</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-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="n">parser</span><span class="p">:</span>
-</span><span id="Parser-4152"><a href="#Parser-4152"><span class="linenos">4152</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-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="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-4155"><a href="#Parser-4155"><span class="linenos">4155</span></a> <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-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4158"><a href="#Parser-4158"><span class="linenos">4158</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="Parser-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="Parser-4160"><a href="#Parser-4160"><span class="linenos">4160</span></a> <span class="p">)</span>
-</span><span id="Parser-4161"><a href="#Parser-4161"><span class="linenos">4161</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-4162"><a href="#Parser-4162"><span class="linenos">4162</span></a>
-</span><span id="Parser-4163"><a href="#Parser-4163"><span class="linenos">4163</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">Expression</span><span class="p">:</span>
-</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</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-4165"><a href="#Parser-4165"><span class="linenos">4165</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-4110"><a href="#Parser-4110"><span class="linenos">4110</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-4111"><a href="#Parser-4111"><span class="linenos">4111</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-4112"><a href="#Parser-4112"><span class="linenos">4112</span></a>
+</span><span id="Parser-4113"><a href="#Parser-4113"><span class="linenos">4113</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-4114"><a href="#Parser-4114"><span class="linenos">4114</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-4115"><a href="#Parser-4115"><span class="linenos">4115</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><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">return</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">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-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><span id="Parser-4121"><a href="#Parser-4121"><span class="linenos">4121</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-4122"><a href="#Parser-4122"><span class="linenos">4122</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-4123"><a href="#Parser-4123"><span class="linenos">4123</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-4124"><a href="#Parser-4124"><span class="linenos">4124</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-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4126"><a href="#Parser-4126"><span class="linenos">4126</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</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">return</span> <span class="bp">self</span><span 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-4129"><a href="#Parser-4129"><span class="linenos">4129</span></a>
+</span><span id="Parser-4130"><a href="#Parser-4130"><span class="linenos">4130</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4131"><a href="#Parser-4131"><span class="linenos">4131</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-4132"><a href="#Parser-4132"><span class="linenos">4132</span></a>
+</span><span id="Parser-4133"><a href="#Parser-4133"><span class="linenos">4133</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-4134"><a href="#Parser-4134"><span class="linenos">4134</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-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="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-4137"><a href="#Parser-4137"><span class="linenos">4137</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_column</span><span class="p">)</span>
+</span><span id="Parser-4138"><a href="#Parser-4138"><span class="linenos">4138</span></a>
+</span><span id="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-4140"><a href="#Parser-4140"><span class="linenos">4140</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-4141"><a href="#Parser-4141"><span class="linenos">4141</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-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="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-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">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-4145"><a href="#Parser-4145"><span class="linenos">4145</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-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a> <span class="k">return</span> <span class="bp">self</span><span 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-4147"><a href="#Parser-4147"><span class="linenos">4147</span></a>
+</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">_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-4149"><a href="#Parser-4149"><span class="linenos">4149</span></a> <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-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</span></a> <span class="n">this</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">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-4153"><a href="#Parser-4153"><span class="linenos">4153</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-4154"><a href="#Parser-4154"><span class="linenos">4154</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-4155"><a href="#Parser-4155"><span class="linenos">4155</span></a> <span class="p">)</span>
+</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a>
+</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4158"><a href="#Parser-4158"><span class="linenos">4158</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-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a>
+</span><span id="Parser-4160"><a href="#Parser-4160"><span class="linenos">4160</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-4161"><a href="#Parser-4161"><span class="linenos">4161</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4162"><a href="#Parser-4162"><span class="linenos">4162</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-4163"><a href="#Parser-4163"><span class="linenos">4163</span></a>
+</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</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-4165"><a href="#Parser-4165"><span class="linenos">4165</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-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="bp">self</span><span 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-4168"><a href="#Parser-4168"><span class="linenos">4168</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-4169"><a href="#Parser-4169"><span class="linenos">4169</span></a>
-</span><span id="Parser-4170"><a href="#Parser-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">ON</span><span class="p">)</span>
-</span><span id="Parser-4171"><a href="#Parser-4171"><span class="linenos">4171</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-4172"><a href="#Parser-4172"><span class="linenos">4172</span></a>
-</span><span id="Parser-4173"><a href="#Parser-4173"><span class="linenos">4173</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4174"><a href="#Parser-4174"><span class="linenos">4174</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-4175"><a href="#Parser-4175"><span class="linenos">4175</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-4176"><a href="#Parser-4176"><span class="linenos">4176</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-4177"><a href="#Parser-4177"><span class="linenos">4177</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4178"><a href="#Parser-4178"><span class="linenos">4178</span></a> <span class="kc">False</span>
-</span><span id="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</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-4180"><a href="#Parser-4180"><span class="linenos">4180</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-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="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-4167"><a href="#Parser-4167"><span class="linenos">4167</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-4168"><a href="#Parser-4168"><span class="linenos">4168</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-4169"><a href="#Parser-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">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-4170"><a href="#Parser-4170"><span class="linenos">4170</span></a>
+</span><span id="Parser-4171"><a href="#Parser-4171"><span class="linenos">4171</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">t</span><span class="o">.</span><span class="n">Optional</span><span 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-4172"><a href="#Parser-4172"><span class="linenos">4172</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-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="bp">self</span><span 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-4175"><a href="#Parser-4175"><span class="linenos">4175</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-4176"><a href="#Parser-4176"><span class="linenos">4176</span></a>
+</span><span id="Parser-4177"><a href="#Parser-4177"><span class="linenos">4177</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-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_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-4179"><a href="#Parser-4179"><span class="linenos">4179</span></a>
+</span><span id="Parser-4180"><a href="#Parser-4180"><span class="linenos">4180</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-4181"><a href="#Parser-4181"><span class="linenos">4181</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4182"><a href="#Parser-4182"><span class="linenos">4182</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-4183"><a href="#Parser-4183"><span class="linenos">4183</span></a>
-</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">THEN</span><span class="p">)</span>
-</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</span></a>
-</span><span id="Parser-4186"><a href="#Parser-4186"><span class="linenos">4186</span></a> <span class="k">if</span> <span class="bp">self</span><span 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-4187"><a href="#Parser-4187"><span class="linenos">4187</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-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="Parser-4189"><a href="#Parser-4189"><span class="linenos">4189</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-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</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-4192"><a href="#Parser-4192"><span class="linenos">4192</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Parser-4193"><a href="#Parser-4193"><span class="linenos">4193</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-4194"><a href="#Parser-4194"><span class="linenos">4194</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-4195"><a href="#Parser-4195"><span class="linenos">4195</span></a> <span class="p">)</span>
-</span><span id="Parser-4196"><a href="#Parser-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</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-4197"><a href="#Parser-4197"><span class="linenos">4197</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-4198"><a href="#Parser-4198"><span class="linenos">4198</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</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-4200"><a href="#Parser-4200"><span class="linenos">4200</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4201"><a href="#Parser-4201"><span class="linenos">4201</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-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Parser-4203"><a href="#Parser-4203"><span class="linenos">4203</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-4204"><a href="#Parser-4204"><span class="linenos">4204</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-4205"><a href="#Parser-4205"><span class="linenos">4205</span></a> <span class="p">)</span>
-</span><span id="Parser-4206"><a href="#Parser-4206"><span class="linenos">4206</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-4207"><a href="#Parser-4207"><span class="linenos">4207</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-4208"><a href="#Parser-4208"><span class="linenos">4208</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4210"><a href="#Parser-4210"><span class="linenos">4210</span></a>
-</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</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">expression</span><span class="p">(</span>
-</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="Parser-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</span></a> <span class="p">)</span>
-</span><span id="Parser-4219"><a href="#Parser-4219"><span class="linenos">4219</span></a> <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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="Parser-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</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><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</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-4230"><a href="#Parser-4230"><span class="linenos">4230</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 class="c1"># type: ignore</span>
-</span><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</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-4233"><a href="#Parser-4233"><span class="linenos">4233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Show</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-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a>
-</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</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-4238"><a href="#Parser-4238"><span class="linenos">4238</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-4239"><a href="#Parser-4239"><span class="linenos">4239</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-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a>
-</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</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-4242"><a href="#Parser-4242"><span class="linenos">4242</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-4184"><a href="#Parser-4184"><span class="linenos">4184</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</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-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">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-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a> <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-4189"><a href="#Parser-4189"><span class="linenos">4189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="Parser-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="Parser-4192"><a href="#Parser-4192"><span class="linenos">4192</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="Parser-4193"><a href="#Parser-4193"><span class="linenos">4193</span></a> <span class="p">)</span>
+</span><span id="Parser-4194"><a href="#Parser-4194"><span class="linenos">4194</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-4195"><a href="#Parser-4195"><span class="linenos">4195</span></a>
+</span><span id="Parser-4196"><a href="#Parser-4196"><span class="linenos">4196</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">Expression</span><span class="p">:</span>
+</span><span id="Parser-4197"><a href="#Parser-4197"><span class="linenos">4197</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-4198"><a href="#Parser-4198"><span class="linenos">4198</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-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="bp">self</span><span 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-4201"><a href="#Parser-4201"><span class="linenos">4201</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-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a>
+</span><span id="Parser-4203"><a href="#Parser-4203"><span class="linenos">4203</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-4204"><a href="#Parser-4204"><span class="linenos">4204</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-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="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4207"><a href="#Parser-4207"><span class="linenos">4207</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-4208"><a href="#Parser-4208"><span class="linenos">4208</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-4209"><a href="#Parser-4209"><span class="linenos">4209</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-4210"><a href="#Parser-4210"><span class="linenos">4210</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</span></a> <span class="kc">False</span>
+</span><span id="Parser-4212"><a href="#Parser-4212"><span class="linenos">4212</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-4213"><a href="#Parser-4213"><span class="linenos">4213</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-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a> <span class="p">)</span>
+</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</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-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a>
+</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</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-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">if</span> <span class="bp">self</span><span 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-4220"><a href="#Parser-4220"><span class="linenos">4220</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-4221"><a href="#Parser-4221"><span class="linenos">4221</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</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-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</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-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</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-4227"><a href="#Parser-4227"><span class="linenos">4227</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-4228"><a href="#Parser-4228"><span class="linenos">4228</span></a> <span class="p">)</span>
+</span><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</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-4230"><a href="#Parser-4230"><span class="linenos">4230</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-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</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-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="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-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</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-4237"><a href="#Parser-4237"><span class="linenos">4237</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-4238"><a href="#Parser-4238"><span class="linenos">4238</span></a> <span class="p">)</span>
+</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</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-4240"><a href="#Parser-4240"><span class="linenos">4240</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-4241"><a href="#Parser-4241"><span class="linenos">4241</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4242"><a href="#Parser-4242"><span class="linenos">4242</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4243"><a href="#Parser-4243"><span class="linenos">4243</span></a>
-</span><span id="Parser-4244"><a href="#Parser-4244"><span class="linenos">4244</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-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="k">if</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 class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</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">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4248"><a href="#Parser-4248"><span class="linenos">4248</span></a> <span class="k">return</span> <span class="kc">None</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="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-4251"><a href="#Parser-4251"><span class="linenos">4251</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-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
-</span><span id="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</span></a> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span>
-</span><span id="Parser-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">,</span>
-</span><span id="Parser-4255"><a href="#Parser-4255"><span class="linenos">4255</span></a> <span class="p">)</span>
-</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</span></a>
-</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><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</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">this</span><span class="p">,</span>
-</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</span></a> <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">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-4264"><a href="#Parser-4264"><span class="linenos">4264</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-4265"><a href="#Parser-4265"><span class="linenos">4265</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-4266"><a href="#Parser-4266"><span class="linenos">4266</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-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="p">)</span>
-</span><span id="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a> <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-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="Parser-4271"><a href="#Parser-4271"><span class="linenos">4271</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-4272"><a href="#Parser-4272"><span class="linenos">4272</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-4273"><a href="#Parser-4273"><span class="linenos">4273</span></a> <span class="p">)</span>
-</span><span id="Parser-4274"><a href="#Parser-4274"><span class="linenos">4274</span></a>
-</span><span id="Parser-4275"><a href="#Parser-4275"><span class="linenos">4275</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-4276"><a href="#Parser-4276"><span class="linenos">4276</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 class="c1"># type: ignore</span>
-</span><span id="Parser-4277"><a href="#Parser-4277"><span class="linenos">4277</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-4244"><a href="#Parser-4244"><span class="linenos">4244</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4245"><a href="#Parser-4245"><span class="linenos">4245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="Parser-4248"><a href="#Parser-4248"><span class="linenos">4248</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="Parser-4250"><a href="#Parser-4250"><span class="linenos">4250</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="Parser-4251"><a href="#Parser-4251"><span class="linenos">4251</span></a> <span class="p">)</span>
+</span><span id="Parser-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="p">)</span>
+</span><span id="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</span></a>
+</span><span id="Parser-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <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-4255"><a href="#Parser-4255"><span class="linenos">4255</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</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">target</span><span class="p">,</span>
+</span><span id="Parser-4257"><a href="#Parser-4257"><span class="linenos">4257</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="Parser-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">,</span>
+</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a> <span class="p">)</span>
+</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</span></a>
+</span><span id="Parser-4262"><a href="#Parser-4262"><span class="linenos">4262</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-4263"><a href="#Parser-4263"><span class="linenos">4263</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 class="c1"># type: ignore</span>
+</span><span id="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-4265"><a href="#Parser-4265"><span class="linenos">4265</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-4266"><a href="#Parser-4266"><span class="linenos">4266</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Show</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-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a>
+</span><span id="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</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-4271"><a href="#Parser-4271"><span class="linenos">4271</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-4272"><a href="#Parser-4272"><span class="linenos">4272</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-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">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-4275"><a href="#Parser-4275"><span class="linenos">4275</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-4276"><a href="#Parser-4276"><span class="linenos">4276</span></a>
+</span><span id="Parser-4277"><a href="#Parser-4277"><span class="linenos">4277</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-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a>
-</span><span id="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</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="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-4280"><a href="#Parser-4280"><span class="linenos">4280</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-4281"><a href="#Parser-4281"><span class="linenos">4281</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 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><span id="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</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_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-4280"><a href="#Parser-4280"><span class="linenos">4280</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-4281"><a href="#Parser-4281"><span class="linenos">4281</span></a> <span class="k">return</span> <span class="kc">None</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="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-4284"><a href="#Parser-4284"><span class="linenos">4284</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-4285"><a href="#Parser-4285"><span class="linenos">4285</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-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">return</span> <span class="n">set_</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_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">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</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-4291"><a href="#Parser-4291"><span class="linenos">4291</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-4292"><a href="#Parser-4292"><span class="linenos">4292</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">this</span><span class="o">=</span><span class="n">option</span><span class="p">)</span>
-</span><span id="Parser-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="k">return</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">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-4296"><a href="#Parser-4296"><span class="linenos">4296</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-4297"><a href="#Parser-4297"><span class="linenos">4297</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4298"><a href="#Parser-4298"><span class="linenos">4298</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-4299"><a href="#Parser-4299"><span class="linenos">4299</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-4300"><a href="#Parser-4300"><span class="linenos">4300</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-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">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</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-4304"><a href="#Parser-4304"><span class="linenos">4304</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-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">_curr</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="kc">None</span>
+</span><span id="Parser-4283"><a href="#Parser-4283"><span class="linenos">4283</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-4284"><a href="#Parser-4284"><span class="linenos">4284</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-4285"><a href="#Parser-4285"><span class="linenos">4285</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
+</span><span id="Parser-4286"><a href="#Parser-4286"><span class="linenos">4286</span></a> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span>
+</span><span id="Parser-4287"><a href="#Parser-4287"><span class="linenos">4287</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">,</span>
+</span><span id="Parser-4288"><a href="#Parser-4288"><span class="linenos">4288</span></a> <span class="p">)</span>
+</span><span id="Parser-4289"><a href="#Parser-4289"><span class="linenos">4289</span></a>
+</span><span id="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</span></a> <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-4291"><a href="#Parser-4291"><span class="linenos">4291</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="Parser-4292"><a href="#Parser-4292"><span class="linenos">4292</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-4294"><a href="#Parser-4294"><span class="linenos">4294</span></a> <span class="p">)</span>
+</span><span id="Parser-4295"><a href="#Parser-4295"><span class="linenos">4295</span></a>
+</span><span id="Parser-4296"><a href="#Parser-4296"><span class="linenos">4296</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-4297"><a href="#Parser-4297"><span class="linenos">4297</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-4298"><a href="#Parser-4298"><span class="linenos">4298</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-4299"><a href="#Parser-4299"><span class="linenos">4299</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-4300"><a href="#Parser-4300"><span class="linenos">4300</span></a> <span class="p">)</span>
+</span><span id="Parser-4301"><a href="#Parser-4301"><span class="linenos">4301</span></a> <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-4302"><a href="#Parser-4302"><span class="linenos">4302</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="Parser-4304"><a href="#Parser-4304"><span class="linenos">4304</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-4305"><a href="#Parser-4305"><span class="linenos">4305</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-4306"><a href="#Parser-4306"><span class="linenos">4306</span></a> <span class="p">)</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">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-4309"><a href="#Parser-4309"><span class="linenos">4309</span></a> <span class="n">this</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 class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4311"><a href="#Parser-4311"><span class="linenos">4311</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="Parser-4312"><a href="#Parser-4312"><span class="linenos">4312</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-4313"><a href="#Parser-4313"><span class="linenos">4313</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-4314"><a href="#Parser-4314"><span class="linenos">4314</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-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4316"><a href="#Parser-4316"><span class="linenos">4316</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-4317"><a href="#Parser-4317"><span class="linenos">4317</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-4318"><a href="#Parser-4318"><span class="linenos">4318</span></a> <span class="k">break</span>
-</span><span id="Parser-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</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-4321"><a href="#Parser-4321"><span class="linenos">4321</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</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-4323"><a href="#Parser-4323"><span class="linenos">4323</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4324"><a href="#Parser-4324"><span class="linenos">4324</span></a>
-</span><span id="Parser-4325"><a href="#Parser-4325"><span class="linenos">4325</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><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="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4328"><a href="#Parser-4328"><span class="linenos">4328</span></a>
-</span><span id="Parser-4329"><a href="#Parser-4329"><span class="linenos">4329</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-4330"><a href="#Parser-4330"><span class="linenos">4330</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4332"><a href="#Parser-4332"><span class="linenos">4332</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4333"><a href="#Parser-4333"><span class="linenos">4333</span></a>
-</span><span id="Parser-4334"><a href="#Parser-4334"><span class="linenos">4334</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4335"><a href="#Parser-4335"><span class="linenos">4335</span></a>
-</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</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-4337"><a href="#Parser-4337"><span class="linenos">4337</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-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="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-4341"><a href="#Parser-4341"><span class="linenos">4341</span></a> <span class="k">if</span> <span class="n">advance</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">_advance</span><span class="p">()</span>
-</span><span id="Parser-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4344"><a href="#Parser-4344"><span class="linenos">4344</span></a>
-</span><span id="Parser-4345"><a href="#Parser-4345"><span class="linenos">4345</span></a> <span class="k">return</span> <span class="kc">None</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">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-4348"><a href="#Parser-4348"><span class="linenos">4348</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-4349"><a href="#Parser-4349"><span class="linenos">4349</span></a> <span class="k">return</span> <span class="kc">None</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">_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-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</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-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4355"><a href="#Parser-4355"><span class="linenos">4355</span></a>
+</span><span id="Parser-4308"><a href="#Parser-4308"><span class="linenos">4308</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-4309"><a href="#Parser-4309"><span class="linenos">4309</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 class="c1"># type: ignore</span>
+</span><span id="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</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-4311"><a href="#Parser-4311"><span class="linenos">4311</span></a>
+</span><span id="Parser-4312"><a href="#Parser-4312"><span class="linenos">4312</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="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-4313"><a href="#Parser-4313"><span class="linenos">4313</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-4314"><a href="#Parser-4314"><span class="linenos">4314</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 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><span id="Parser-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a>
+</span><span id="Parser-4316"><a href="#Parser-4316"><span class="linenos">4316</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-4317"><a href="#Parser-4317"><span class="linenos">4317</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-4318"><a href="#Parser-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_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-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a>
+</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="Parser-4321"><a href="#Parser-4321"><span class="linenos">4321</span></a>
+</span><span id="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</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">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4323"><a href="#Parser-4323"><span class="linenos">4323</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-4324"><a href="#Parser-4324"><span class="linenos">4324</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-4325"><a href="#Parser-4325"><span class="linenos">4325</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">this</span><span class="o">=</span><span class="n">option</span><span class="p">)</span>
+</span><span id="Parser-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a>
+</span><span id="Parser-4328"><a href="#Parser-4328"><span class="linenos">4328</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-4329"><a href="#Parser-4329"><span class="linenos">4329</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-4330"><a href="#Parser-4330"><span class="linenos">4330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4331"><a href="#Parser-4331"><span class="linenos">4331</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-4332"><a href="#Parser-4332"><span class="linenos">4332</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-4333"><a href="#Parser-4333"><span class="linenos">4333</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-4334"><a href="#Parser-4334"><span class="linenos">4334</span></a>
+</span><span id="Parser-4335"><a href="#Parser-4335"><span class="linenos">4335</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</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-4337"><a href="#Parser-4337"><span class="linenos">4337</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-4338"><a href="#Parser-4338"><span class="linenos">4338</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-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a> <span class="k">return</span> <span class="kc">None</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="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-4342"><a href="#Parser-4342"><span class="linenos">4342</span></a> <span class="n">this</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="c1"># The current token might be multiple words</span>
+</span><span id="Parser-4345"><a href="#Parser-4345"><span class="linenos">4345</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-4346"><a href="#Parser-4346"><span class="linenos">4346</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-4347"><a href="#Parser-4347"><span class="linenos">4347</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-4348"><a href="#Parser-4348"><span class="linenos">4348</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4349"><a href="#Parser-4349"><span class="linenos">4349</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-4350"><a href="#Parser-4350"><span class="linenos">4350</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-4351"><a href="#Parser-4351"><span class="linenos">4351</span></a> <span class="k">break</span>
+</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</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-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="k">return</span> <span class="n">subparser</span>
+</span><span id="Parser-4355"><a href="#Parser-4355"><span class="linenos">4355</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-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4357"><a href="#Parser-4357"><span class="linenos">4357</span></a>
-</span><span id="Parser-4358"><a href="#Parser-4358"><span class="linenos">4358</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="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-4359"><a href="#Parser-4359"><span class="linenos">4359</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-4360"><a href="#Parser-4360"><span class="linenos">4360</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-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="Parser-4362"><a href="#Parser-4362"><span class="linenos">4362</span></a> <span class="n">expression</span><span class="o">.</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><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="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="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</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-4366"><a href="#Parser-4366"><span class="linenos">4366</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-4367"><a href="#Parser-4367"><span class="linenos">4367</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</span></a> <span class="n">expression</span><span class="o">.</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><span id="Parser-4369"><a href="#Parser-4369"><span class="linenos">4369</span></a>
-</span><span id="Parser-4370"><a href="#Parser-4370"><span class="linenos">4370</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-4371"><a href="#Parser-4371"><span class="linenos">4371</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-4372"><a href="#Parser-4372"><span class="linenos">4372</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-4373"><a href="#Parser-4373"><span class="linenos">4373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-4375"><a href="#Parser-4375"><span class="linenos">4375</span></a> <span class="k">return</span> <span class="kc">False</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="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-4378"><a href="#Parser-4378"><span class="linenos">4378</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-4379"><a href="#Parser-4379"><span class="linenos">4379</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-4380"><a href="#Parser-4380"><span class="linenos">4380</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-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4383"><a href="#Parser-4383"><span class="linenos">4383</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-4384"><a href="#Parser-4384"><span class="linenos">4384</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Parser-4385"><a href="#Parser-4385"><span class="linenos">4385</span></a>
-</span><span id="Parser-4386"><a href="#Parser-4386"><span class="linenos">4386</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-4387"><a href="#Parser-4387"><span class="linenos">4387</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-4358"><a href="#Parser-4358"><span class="linenos">4358</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><span id="Parser-4359"><a href="#Parser-4359"><span class="linenos">4359</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-4360"><a href="#Parser-4360"><span class="linenos">4360</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a>
+</span><span id="Parser-4362"><a href="#Parser-4362"><span class="linenos">4362</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-4363"><a href="#Parser-4363"><span class="linenos">4363</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-4364"><a href="#Parser-4364"><span class="linenos">4364</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-4366"><a href="#Parser-4366"><span class="linenos">4366</span></a>
+</span><span id="Parser-4367"><a href="#Parser-4367"><span class="linenos">4367</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</span></a>
+</span><span id="Parser-4369"><a href="#Parser-4369"><span class="linenos">4369</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-4370"><a href="#Parser-4370"><span class="linenos">4370</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-4371"><a href="#Parser-4371"><span class="linenos">4371</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4372"><a href="#Parser-4372"><span class="linenos">4372</span></a>
+</span><span id="Parser-4373"><a href="#Parser-4373"><span class="linenos">4373</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-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="k">if</span> <span class="n">advance</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">_advance</span><span class="p">()</span>
+</span><span id="Parser-4376"><a href="#Parser-4376"><span class="linenos">4376</span></a> <span class="k">return</span> <span class="kc">True</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="kc">None</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">_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-4381"><a href="#Parser-4381"><span class="linenos">4381</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-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="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-4385"><a href="#Parser-4385"><span class="linenos">4385</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-4386"><a href="#Parser-4386"><span class="linenos">4386</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-4387"><a href="#Parser-4387"><span class="linenos">4387</span></a> <span class="k">return</span> <span class="kc">True</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">return</span> <span class="kc">True</span>
+</span><span id="Parser-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="k">return</span> <span class="kc">None</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">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-4392"><a href="#Parser-4392"><span class="linenos">4392</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-4393"><a href="#Parser-4393"><span class="linenos">4393</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-4394"><a href="#Parser-4394"><span class="linenos">4394</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-4395"><a href="#Parser-4395"><span class="linenos">4395</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-4396"><a href="#Parser-4396"><span class="linenos">4396</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-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</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><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</span></a> <span class="k">if</span> <span class="n">table</span>
-</span><span id="Parser-4400"><a href="#Parser-4400"><span class="linenos">4400</span></a> <span class="k">else</span> <span class="bp">self</span><span 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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a> <span class="p">)</span>
-</span><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</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">Identifier</span><span class="p">):</span>
-</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</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">Var</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">name</span><span class="p">)</span>
-</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a>
-</span><span id="Parser-4406"><a href="#Parser-4406"><span class="linenos">4406</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">lambda_variables</span><span class="p">):</span>
-</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</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-4408"><a href="#Parser-4408"><span class="linenos">4408</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-4409"><a href="#Parser-4409"><span class="linenos">4409</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-4410"><a href="#Parser-4410"><span class="linenos">4410</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-4411"><a href="#Parser-4411"><span class="linenos">4411</span></a>
-</span><span id="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</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-4413"><a href="#Parser-4413"><span class="linenos">4413</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-4414"><a href="#Parser-4414"><span class="linenos">4414</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-4415"><a href="#Parser-4415"><span class="linenos">4415</span></a> <span class="k">break</span>
-</span><span id="Parser-4416"><a href="#Parser-4416"><span class="linenos">4416</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-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</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-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</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-4422"><a href="#Parser-4422"><span class="linenos">4422</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="Parser-4391"><a href="#Parser-4391"><span class="linenos">4391</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="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-4392"><a href="#Parser-4392"><span class="linenos">4392</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-4393"><a href="#Parser-4393"><span class="linenos">4393</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-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</span></a> <span class="n">expression</span><span class="o">.</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><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="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="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</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-4399"><a href="#Parser-4399"><span class="linenos">4399</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-4400"><a href="#Parser-4400"><span class="linenos">4400</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a> <span class="n">expression</span><span class="o">.</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><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</span></a>
+</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</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-4404"><a href="#Parser-4404"><span class="linenos">4404</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-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a> <span class="k">if</span> <span class="n">advance</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="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Parser-4409"><a href="#Parser-4409"><span class="linenos">4409</span></a>
+</span><span id="Parser-4410"><a href="#Parser-4410"><span class="linenos">4410</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-4411"><a href="#Parser-4411"><span class="linenos">4411</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-4412"><a href="#Parser-4412"><span class="linenos">4412</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-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">_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-4414"><a href="#Parser-4414"><span class="linenos">4414</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4415"><a href="#Parser-4415"><span class="linenos">4415</span></a> <span class="k">else</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">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a>
+</span><span id="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</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-4420"><a href="#Parser-4420"><span class="linenos">4420</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-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="k">return</span> <span class="kc">True</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">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-4425"><a href="#Parser-4425"><span class="linenos">4425</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-4426"><a href="#Parser-4426"><span class="linenos">4426</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-4427"><a href="#Parser-4427"><span class="linenos">4427</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-4428"><a href="#Parser-4428"><span class="linenos">4428</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-4429"><a href="#Parser-4429"><span class="linenos">4429</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-4430"><a href="#Parser-4430"><span class="linenos">4430</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-4431"><a href="#Parser-4431"><span class="linenos">4431</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><span id="Parser-4432"><a href="#Parser-4432"><span class="linenos">4432</span></a> <span class="k">if</span> <span class="n">table</span>
+</span><span id="Parser-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a> <span class="k">else</span> <span class="bp">self</span><span 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">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Parser-4434"><a href="#Parser-4434"><span class="linenos">4434</span></a> <span class="p">)</span>
+</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</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">Identifier</span><span class="p">):</span>
+</span><span id="Parser-4436"><a href="#Parser-4436"><span class="linenos">4436</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">Var</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">name</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="n">this</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="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">lambda_variables</span><span class="p">):</span>
+</span><span id="Parser-4440"><a href="#Parser-4440"><span class="linenos">4440</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-4441"><a href="#Parser-4441"><span class="linenos">4441</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-4442"><a href="#Parser-4442"><span class="linenos">4442</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-4443"><a href="#Parser-4443"><span class="linenos">4443</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-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a>
+</span><span id="Parser-4445"><a href="#Parser-4445"><span class="linenos">4445</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-4446"><a href="#Parser-4446"><span class="linenos">4446</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-4447"><a href="#Parser-4447"><span class="linenos">4447</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-4448"><a href="#Parser-4448"><span class="linenos">4448</span></a> <span class="k">break</span>
+</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</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-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</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-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4454"><a href="#Parser-4454"><span class="linenos">4454</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-4455"><a href="#Parser-4455"><span class="linenos">4455</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -9000,24 +9066,24 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Parser.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.__init__-787"><a href="#Parser.__init__-787"><span class="linenos">787</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Parser.__init__-788"><a href="#Parser.__init__-788"><span class="linenos">788</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser.__init__-789"><a href="#Parser.__init__-789"><span class="linenos">789</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser.__init__-790"><a href="#Parser.__init__-790"><span class="linenos">790</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
-</span><span id="Parser.__init__-791"><a href="#Parser.__init__-791"><span class="linenos">791</span></a> <span class="n">index_offset</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="Parser.__init__-792"><a href="#Parser.__init__-792"><span class="linenos">792</span></a> <span class="n">unnest_column_only</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.__init__-793"><a href="#Parser.__init__-793"><span class="linenos">793</span></a> <span class="n">alias_post_tablesample</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.__init__-794"><a href="#Parser.__init__-794"><span class="linenos">794</span></a> <span class="n">max_errors</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="Parser.__init__-795"><a href="#Parser.__init__-795"><span class="linenos">795</span></a> <span class="n">null_ordering</span><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="Parser.__init__-796"><a href="#Parser.__init__-796"><span class="linenos">796</span></a> <span class="p">):</span>
-</span><span id="Parser.__init__-797"><a href="#Parser.__init__-797"><span class="linenos">797</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
-</span><span id="Parser.__init__-798"><a href="#Parser.__init__-798"><span class="linenos">798</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
-</span><span id="Parser.__init__-799"><a href="#Parser.__init__-799"><span class="linenos">799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span> <span class="o">=</span> <span class="n">index_offset</span>
-</span><span id="Parser.__init__-800"><a href="#Parser.__init__-800"><span class="linenos">800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span> <span class="o">=</span> <span class="n">unnest_column_only</span>
-</span><span id="Parser.__init__-801"><a href="#Parser.__init__-801"><span class="linenos">801</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="n">alias_post_tablesample</span>
-</span><span id="Parser.__init__-802"><a href="#Parser.__init__-802"><span class="linenos">802</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
-</span><span id="Parser.__init__-803"><a href="#Parser.__init__-803"><span class="linenos">803</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span> <span class="o">=</span> <span class="n">null_ordering</span>
-</span><span id="Parser.__init__-804"><a href="#Parser.__init__-804"><span class="linenos">804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.__init__-794"><a href="#Parser.__init__-794"><span class="linenos">794</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Parser.__init__-795"><a href="#Parser.__init__-795"><span class="linenos">795</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser.__init__-796"><a href="#Parser.__init__-796"><span class="linenos">796</span></a> <span class="n">error_level</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser.__init__-797"><a href="#Parser.__init__-797"><span class="linenos">797</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
+</span><span id="Parser.__init__-798"><a href="#Parser.__init__-798"><span class="linenos">798</span></a> <span class="n">index_offset</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="Parser.__init__-799"><a href="#Parser.__init__-799"><span class="linenos">799</span></a> <span class="n">unnest_column_only</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.__init__-800"><a href="#Parser.__init__-800"><span class="linenos">800</span></a> <span class="n">alias_post_tablesample</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.__init__-801"><a href="#Parser.__init__-801"><span class="linenos">801</span></a> <span class="n">max_errors</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="Parser.__init__-802"><a href="#Parser.__init__-802"><span class="linenos">802</span></a> <span class="n">null_ordering</span><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="Parser.__init__-803"><a href="#Parser.__init__-803"><span class="linenos">803</span></a> <span class="p">):</span>
+</span><span id="Parser.__init__-804"><a href="#Parser.__init__-804"><span class="linenos">804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
+</span><span id="Parser.__init__-805"><a href="#Parser.__init__-805"><span class="linenos">805</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
+</span><span id="Parser.__init__-806"><a href="#Parser.__init__-806"><span class="linenos">806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">index_offset</span> <span class="o">=</span> <span class="n">index_offset</span>
+</span><span id="Parser.__init__-807"><a href="#Parser.__init__-807"><span class="linenos">807</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unnest_column_only</span> <span class="o">=</span> <span class="n">unnest_column_only</span>
+</span><span id="Parser.__init__-808"><a href="#Parser.__init__-808"><span class="linenos">808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">alias_post_tablesample</span> <span class="o">=</span> <span class="n">alias_post_tablesample</span>
+</span><span id="Parser.__init__-809"><a href="#Parser.__init__-809"><span class="linenos">809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
+</span><span id="Parser.__init__-810"><a href="#Parser.__init__-810"><span class="linenos">810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">null_ordering</span> <span class="o">=</span> <span class="n">null_ordering</span>
+</span><span id="Parser.__init__-811"><a href="#Parser.__init__-811"><span class="linenos">811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span></pre></div>
@@ -9035,15 +9101,15 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Parser.reset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.reset-806"><a href="#Parser.reset-806"><span class="linenos">806</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><span id="Parser.reset-807"><a href="#Parser.reset-807"><span class="linenos">807</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="Parser.reset-808"><a href="#Parser.reset-808"><span class="linenos">808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser.reset-809"><a href="#Parser.reset-809"><span class="linenos">809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser.reset-810"><a href="#Parser.reset-810"><span class="linenos">810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Parser.reset-811"><a href="#Parser.reset-811"><span class="linenos">811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser.reset-812"><a href="#Parser.reset-812"><span class="linenos">812</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser.reset-813"><a href="#Parser.reset-813"><span class="linenos">813</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser.reset-814"><a href="#Parser.reset-814"><span class="linenos">814</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.reset-813"><a href="#Parser.reset-813"><span class="linenos">813</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><span id="Parser.reset-814"><a href="#Parser.reset-814"><span class="linenos">814</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="Parser.reset-815"><a href="#Parser.reset-815"><span class="linenos">815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser.reset-816"><a href="#Parser.reset-816"><span class="linenos">816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser.reset-817"><a href="#Parser.reset-817"><span class="linenos">817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Parser.reset-818"><a href="#Parser.reset-818"><span class="linenos">818</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser.reset-819"><a href="#Parser.reset-819"><span class="linenos">819</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser.reset-820"><a href="#Parser.reset-820"><span class="linenos">820</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser.reset-821"><a href="#Parser.reset-821"><span class="linenos">821</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span></pre></div>
@@ -9061,23 +9127,23 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Parser.parse"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse-816"><a href="#Parser.parse-816"><span class="linenos">816</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
-</span><span id="Parser.parse-817"><a href="#Parser.parse-817"><span class="linenos">817</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_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="n">sql</span><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.parse-818"><a href="#Parser.parse-818"><span class="linenos">818</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="Parser.parse-819"><a href="#Parser.parse-819"><span class="linenos">819</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.parse-820"><a href="#Parser.parse-820"><span class="linenos">820</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
-</span><span id="Parser.parse-821"><a href="#Parser.parse-821"><span class="linenos">821</span></a><span class="sd"> per parsed SQL statement.</span>
-</span><span id="Parser.parse-822"><a href="#Parser.parse-822"><span class="linenos">822</span></a>
-</span><span id="Parser.parse-823"><a href="#Parser.parse-823"><span class="linenos">823</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.parse-824"><a href="#Parser.parse-824"><span class="linenos">824</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
-</span><span id="Parser.parse-825"><a href="#Parser.parse-825"><span class="linenos">825</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
-</span><span id="Parser.parse-826"><a href="#Parser.parse-826"><span class="linenos">826</span></a>
-</span><span id="Parser.parse-827"><a href="#Parser.parse-827"><span class="linenos">827</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser.parse-828"><a href="#Parser.parse-828"><span class="linenos">828</span></a><span class="sd"> The list of syntax trees.</span>
-</span><span id="Parser.parse-829"><a href="#Parser.parse-829"><span class="linenos">829</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.parse-830"><a href="#Parser.parse-830"><span class="linenos">830</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
-</span><span id="Parser.parse-831"><a href="#Parser.parse-831"><span class="linenos">831</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
-</span><span id="Parser.parse-832"><a href="#Parser.parse-832"><span class="linenos">832</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse-823"><a href="#Parser.parse-823"><span class="linenos">823</span></a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span>
+</span><span id="Parser.parse-824"><a href="#Parser.parse-824"><span class="linenos">824</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_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="n">sql</span><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.parse-825"><a href="#Parser.parse-825"><span class="linenos">825</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="Parser.parse-826"><a href="#Parser.parse-826"><span class="linenos">826</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.parse-827"><a href="#Parser.parse-827"><span class="linenos">827</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
+</span><span id="Parser.parse-828"><a href="#Parser.parse-828"><span class="linenos">828</span></a><span class="sd"> per parsed SQL statement.</span>
+</span><span id="Parser.parse-829"><a href="#Parser.parse-829"><span class="linenos">829</span></a>
+</span><span id="Parser.parse-830"><a href="#Parser.parse-830"><span class="linenos">830</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.parse-831"><a href="#Parser.parse-831"><span class="linenos">831</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
+</span><span id="Parser.parse-832"><a href="#Parser.parse-832"><span class="linenos">832</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
+</span><span id="Parser.parse-833"><a href="#Parser.parse-833"><span class="linenos">833</span></a>
+</span><span id="Parser.parse-834"><a href="#Parser.parse-834"><span class="linenos">834</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser.parse-835"><a href="#Parser.parse-835"><span class="linenos">835</span></a><span class="sd"> The list of syntax trees.</span>
+</span><span id="Parser.parse-836"><a href="#Parser.parse-836"><span class="linenos">836</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.parse-837"><a href="#Parser.parse-837"><span class="linenos">837</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
+</span><span id="Parser.parse-838"><a href="#Parser.parse-838"><span class="linenos">838</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
+</span><span id="Parser.parse-839"><a href="#Parser.parse-839"><span class="linenos">839</span></a> <span class="p">)</span>
</span></pre></div>
@@ -9111,39 +9177,39 @@ per parsed SQL statement.</p>
</div>
<a class="headerlink" href="#Parser.parse_into"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse_into-834"><a href="#Parser.parse_into-834"><span class="linenos">834</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
-</span><span id="Parser.parse_into-835"><a href="#Parser.parse_into-835"><span class="linenos">835</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser.parse_into-836"><a href="#Parser.parse_into-836"><span class="linenos">836</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
-</span><span id="Parser.parse_into-837"><a href="#Parser.parse_into-837"><span class="linenos">837</span></a> <span class="n">raw_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><span id="Parser.parse_into-838"><a href="#Parser.parse_into-838"><span class="linenos">838</span></a> <span class="n">sql</span><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="Parser.parse_into-839"><a href="#Parser.parse_into-839"><span class="linenos">839</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="Parser.parse_into-840"><a href="#Parser.parse_into-840"><span class="linenos">840</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.parse_into-841"><a href="#Parser.parse_into-841"><span class="linenos">841</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
-</span><span id="Parser.parse_into-842"><a href="#Parser.parse_into-842"><span class="linenos">842</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
-</span><span id="Parser.parse_into-843"><a href="#Parser.parse_into-843"><span class="linenos">843</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
-</span><span id="Parser.parse_into-844"><a href="#Parser.parse_into-844"><span class="linenos">844</span></a>
-</span><span id="Parser.parse_into-845"><a href="#Parser.parse_into-845"><span class="linenos">845</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.parse_into-846"><a href="#Parser.parse_into-846"><span class="linenos">846</span></a><span class="sd"> expression_types: the expression type(s) to try and parse the token list into.</span>
-</span><span id="Parser.parse_into-847"><a href="#Parser.parse_into-847"><span class="linenos">847</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
-</span><span id="Parser.parse_into-848"><a href="#Parser.parse_into-848"><span class="linenos">848</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
-</span><span id="Parser.parse_into-849"><a href="#Parser.parse_into-849"><span class="linenos">849</span></a>
-</span><span id="Parser.parse_into-850"><a href="#Parser.parse_into-850"><span class="linenos">850</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser.parse_into-851"><a href="#Parser.parse_into-851"><span class="linenos">851</span></a><span class="sd"> The target Expression.</span>
-</span><span id="Parser.parse_into-852"><a href="#Parser.parse_into-852"><span class="linenos">852</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.parse_into-853"><a href="#Parser.parse_into-853"><span class="linenos">853</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser.parse_into-854"><a href="#Parser.parse_into-854"><span class="linenos">854</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
-</span><span id="Parser.parse_into-855"><a href="#Parser.parse_into-855"><span class="linenos">855</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
-</span><span id="Parser.parse_into-856"><a href="#Parser.parse_into-856"><span class="linenos">856</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser.parse_into-857"><a href="#Parser.parse_into-857"><span class="linenos">857</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser.parse_into-858"><a href="#Parser.parse_into-858"><span class="linenos">858</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Parser.parse_into-859"><a href="#Parser.parse_into-859"><span class="linenos">859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
-</span><span id="Parser.parse_into-860"><a href="#Parser.parse_into-860"><span class="linenos">860</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="Parser.parse_into-861"><a href="#Parser.parse_into-861"><span class="linenos">861</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
-</span><span id="Parser.parse_into-862"><a href="#Parser.parse_into-862"><span class="linenos">862</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
-</span><span id="Parser.parse_into-863"><a href="#Parser.parse_into-863"><span class="linenos">863</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser.parse_into-864"><a href="#Parser.parse_into-864"><span class="linenos">864</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Parser.parse_into-865"><a href="#Parser.parse_into-865"><span class="linenos">865</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</span><span class="p">),</span>
-</span><span id="Parser.parse_into-866"><a href="#Parser.parse_into-866"><span class="linenos">866</span></a> <span class="p">)</span> <span class="kn">from</span> <span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse_into-841"><a href="#Parser.parse_into-841"><span class="linenos">841</span></a> <span class="k">def</span> <span class="nf">parse_into</span><span class="p">(</span>
+</span><span id="Parser.parse_into-842"><a href="#Parser.parse_into-842"><span class="linenos">842</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser.parse_into-843"><a href="#Parser.parse_into-843"><span class="linenos">843</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
+</span><span id="Parser.parse_into-844"><a href="#Parser.parse_into-844"><span class="linenos">844</span></a> <span class="n">raw_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><span id="Parser.parse_into-845"><a href="#Parser.parse_into-845"><span class="linenos">845</span></a> <span class="n">sql</span><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="Parser.parse_into-846"><a href="#Parser.parse_into-846"><span class="linenos">846</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="Parser.parse_into-847"><a href="#Parser.parse_into-847"><span class="linenos">847</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.parse_into-848"><a href="#Parser.parse_into-848"><span class="linenos">848</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
+</span><span id="Parser.parse_into-849"><a href="#Parser.parse_into-849"><span class="linenos">849</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
+</span><span id="Parser.parse_into-850"><a href="#Parser.parse_into-850"><span class="linenos">850</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
+</span><span id="Parser.parse_into-851"><a href="#Parser.parse_into-851"><span class="linenos">851</span></a>
+</span><span id="Parser.parse_into-852"><a href="#Parser.parse_into-852"><span class="linenos">852</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.parse_into-853"><a href="#Parser.parse_into-853"><span class="linenos">853</span></a><span class="sd"> expression_types: the expression type(s) to try and parse the token list into.</span>
+</span><span id="Parser.parse_into-854"><a href="#Parser.parse_into-854"><span class="linenos">854</span></a><span class="sd"> raw_tokens: the list of tokens.</span>
+</span><span id="Parser.parse_into-855"><a href="#Parser.parse_into-855"><span class="linenos">855</span></a><span class="sd"> sql: the original SQL string, used to produce helpful debug messages.</span>
+</span><span id="Parser.parse_into-856"><a href="#Parser.parse_into-856"><span class="linenos">856</span></a>
+</span><span id="Parser.parse_into-857"><a href="#Parser.parse_into-857"><span class="linenos">857</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser.parse_into-858"><a href="#Parser.parse_into-858"><span class="linenos">858</span></a><span class="sd"> The target Expression.</span>
+</span><span id="Parser.parse_into-859"><a href="#Parser.parse_into-859"><span class="linenos">859</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.parse_into-860"><a href="#Parser.parse_into-860"><span class="linenos">860</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser.parse_into-861"><a href="#Parser.parse_into-861"><span class="linenos">861</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_collection</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
+</span><span id="Parser.parse_into-862"><a href="#Parser.parse_into-862"><span class="linenos">862</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
+</span><span id="Parser.parse_into-863"><a href="#Parser.parse_into-863"><span class="linenos">863</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser.parse_into-864"><a href="#Parser.parse_into-864"><span class="linenos">864</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser.parse_into-865"><a href="#Parser.parse_into-865"><span class="linenos">865</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser.parse_into-866"><a href="#Parser.parse_into-866"><span class="linenos">866</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
+</span><span id="Parser.parse_into-867"><a href="#Parser.parse_into-867"><span class="linenos">867</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="Parser.parse_into-868"><a href="#Parser.parse_into-868"><span class="linenos">868</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
+</span><span id="Parser.parse_into-869"><a href="#Parser.parse_into-869"><span class="linenos">869</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+</span><span id="Parser.parse_into-870"><a href="#Parser.parse_into-870"><span class="linenos">870</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser.parse_into-871"><a href="#Parser.parse_into-871"><span class="linenos">871</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Parser.parse_into-872"><a href="#Parser.parse_into-872"><span class="linenos">872</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</span><span class="p">),</span>
+</span><span id="Parser.parse_into-873"><a href="#Parser.parse_into-873"><span class="linenos">873</span></a> <span class="p">)</span> <span class="kn">from</span> <span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></pre></div>
@@ -9179,18 +9245,18 @@ of them, stopping at the first for which the parsing succeeds.</p>
</div>
<a class="headerlink" href="#Parser.check_errors"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.check_errors-902"><a href="#Parser.check_errors-902"><span class="linenos">902</span></a> <span class="k">def</span> <span class="nf">check_errors</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="Parser.check_errors-903"><a href="#Parser.check_errors-903"><span class="linenos">903</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.check_errors-904"><a href="#Parser.check_errors-904"><span class="linenos">904</span></a><span class="sd"> Logs or raises any found errors, depending on the chosen error level setting.</span>
-</span><span id="Parser.check_errors-905"><a href="#Parser.check_errors-905"><span class="linenos">905</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.check_errors-906"><a href="#Parser.check_errors-906"><span class="linenos">906</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser.check_errors-907"><a href="#Parser.check_errors-907"><span class="linenos">907</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="Parser.check_errors-908"><a href="#Parser.check_errors-908"><span class="linenos">908</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
-</span><span id="Parser.check_errors-909"><a href="#Parser.check_errors-909"><span class="linenos">909</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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">errors</span><span class="p">:</span>
-</span><span id="Parser.check_errors-910"><a href="#Parser.check_errors-910"><span class="linenos">910</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
-</span><span id="Parser.check_errors-911"><a href="#Parser.check_errors-911"><span class="linenos">911</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
-</span><span id="Parser.check_errors-912"><a href="#Parser.check_errors-912"><span class="linenos">912</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
-</span><span id="Parser.check_errors-913"><a href="#Parser.check_errors-913"><span class="linenos">913</span></a> <span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.check_errors-909"><a href="#Parser.check_errors-909"><span class="linenos">909</span></a> <span class="k">def</span> <span class="nf">check_errors</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="Parser.check_errors-910"><a href="#Parser.check_errors-910"><span class="linenos">910</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.check_errors-911"><a href="#Parser.check_errors-911"><span class="linenos">911</span></a><span class="sd"> Logs or raises any found errors, depending on the chosen error level setting.</span>
+</span><span id="Parser.check_errors-912"><a href="#Parser.check_errors-912"><span class="linenos">912</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.check_errors-913"><a href="#Parser.check_errors-913"><span class="linenos">913</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser.check_errors-914"><a href="#Parser.check_errors-914"><span class="linenos">914</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="Parser.check_errors-915"><a href="#Parser.check_errors-915"><span class="linenos">915</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
+</span><span id="Parser.check_errors-916"><a href="#Parser.check_errors-916"><span class="linenos">916</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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">errors</span><span class="p">:</span>
+</span><span id="Parser.check_errors-917"><a href="#Parser.check_errors-917"><span class="linenos">917</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
+</span><span id="Parser.check_errors-918"><a href="#Parser.check_errors-918"><span class="linenos">918</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
+</span><span id="Parser.check_errors-919"><a href="#Parser.check_errors-919"><span class="linenos">919</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
+</span><span id="Parser.check_errors-920"><a href="#Parser.check_errors-920"><span class="linenos">920</span></a> <span class="p">)</span>
</span></pre></div>
@@ -9210,33 +9276,33 @@ of them, stopping at the first for which the parsing succeeds.</p>
</div>
<a class="headerlink" href="#Parser.raise_error"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.raise_error-915"><a href="#Parser.raise_error-915"><span class="linenos">915</span></a> <span class="k">def</span> <span class="nf">raise_error</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="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="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.raise_error-916"><a href="#Parser.raise_error-916"><span class="linenos">916</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.raise_error-917"><a href="#Parser.raise_error-917"><span class="linenos">917</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
-</span><span id="Parser.raise_error-918"><a href="#Parser.raise_error-918"><span class="linenos">918</span></a><span class="sd"> error level setting.</span>
-</span><span id="Parser.raise_error-919"><a href="#Parser.raise_error-919"><span class="linenos">919</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.raise_error-920"><a href="#Parser.raise_error-920"><span class="linenos">920</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</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="Parser.raise_error-921"><a href="#Parser.raise_error-921"><span class="linenos">921</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
-</span><span id="Parser.raise_error-922"><a href="#Parser.raise_error-922"><span class="linenos">922</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span>
-</span><span id="Parser.raise_error-923"><a href="#Parser.raise_error-923"><span class="linenos">923</span></a> <span class="n">start_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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
-</span><span id="Parser.raise_error-924"><a href="#Parser.raise_error-924"><span class="linenos">924</span></a> <span class="n">highlight</span> <span 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="Parser.raise_error-925"><a href="#Parser.raise_error-925"><span class="linenos">925</span></a> <span class="n">end_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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
-</span><span id="Parser.raise_error-926"><a href="#Parser.raise_error-926"><span class="linenos">926</span></a>
-</span><span id="Parser.raise_error-927"><a href="#Parser.raise_error-927"><span class="linenos">927</span></a> <span class="n">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
-</span><span id="Parser.raise_error-928"><a href="#Parser.raise_error-928"><span class="linenos">928</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="Parser.raise_error-929"><a href="#Parser.raise_error-929"><span class="linenos">929</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Parser.raise_error-930"><a href="#Parser.raise_error-930"><span class="linenos">930</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
-</span><span id="Parser.raise_error-931"><a href="#Parser.raise_error-931"><span class="linenos">931</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
-</span><span id="Parser.raise_error-932"><a href="#Parser.raise_error-932"><span class="linenos">932</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
-</span><span id="Parser.raise_error-933"><a href="#Parser.raise_error-933"><span class="linenos">933</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
-</span><span id="Parser.raise_error-934"><a href="#Parser.raise_error-934"><span class="linenos">934</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
-</span><span id="Parser.raise_error-935"><a href="#Parser.raise_error-935"><span class="linenos">935</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
-</span><span id="Parser.raise_error-936"><a href="#Parser.raise_error-936"><span class="linenos">936</span></a> <span class="p">)</span>
-</span><span id="Parser.raise_error-937"><a href="#Parser.raise_error-937"><span class="linenos">937</span></a>
-</span><span id="Parser.raise_error-938"><a href="#Parser.raise_error-938"><span class="linenos">938</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser.raise_error-939"><a href="#Parser.raise_error-939"><span class="linenos">939</span></a> <span class="k">raise</span> <span class="n">error</span>
-</span><span id="Parser.raise_error-940"><a href="#Parser.raise_error-940"><span class="linenos">940</span></a>
-</span><span id="Parser.raise_error-941"><a href="#Parser.raise_error-941"><span class="linenos">941</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.raise_error-922"><a href="#Parser.raise_error-922"><span class="linenos">922</span></a> <span class="k">def</span> <span class="nf">raise_error</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="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="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.raise_error-923"><a href="#Parser.raise_error-923"><span class="linenos">923</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.raise_error-924"><a href="#Parser.raise_error-924"><span class="linenos">924</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
+</span><span id="Parser.raise_error-925"><a href="#Parser.raise_error-925"><span class="linenos">925</span></a><span class="sd"> error level setting.</span>
+</span><span id="Parser.raise_error-926"><a href="#Parser.raise_error-926"><span class="linenos">926</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.raise_error-927"><a href="#Parser.raise_error-927"><span class="linenos">927</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</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="Parser.raise_error-928"><a href="#Parser.raise_error-928"><span class="linenos">928</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
+</span><span id="Parser.raise_error-929"><a href="#Parser.raise_error-929"><span class="linenos">929</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span>
+</span><span id="Parser.raise_error-930"><a href="#Parser.raise_error-930"><span class="linenos">930</span></a> <span class="n">start_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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
+</span><span id="Parser.raise_error-931"><a href="#Parser.raise_error-931"><span class="linenos">931</span></a> <span class="n">highlight</span> <span 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="Parser.raise_error-932"><a href="#Parser.raise_error-932"><span class="linenos">932</span></a> <span class="n">end_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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
+</span><span id="Parser.raise_error-933"><a href="#Parser.raise_error-933"><span class="linenos">933</span></a>
+</span><span id="Parser.raise_error-934"><a href="#Parser.raise_error-934"><span class="linenos">934</span></a> <span class="n">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
+</span><span id="Parser.raise_error-935"><a href="#Parser.raise_error-935"><span class="linenos">935</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="Parser.raise_error-936"><a href="#Parser.raise_error-936"><span class="linenos">936</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Parser.raise_error-937"><a href="#Parser.raise_error-937"><span class="linenos">937</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+</span><span id="Parser.raise_error-938"><a href="#Parser.raise_error-938"><span class="linenos">938</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
+</span><span id="Parser.raise_error-939"><a href="#Parser.raise_error-939"><span class="linenos">939</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
+</span><span id="Parser.raise_error-940"><a href="#Parser.raise_error-940"><span class="linenos">940</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
+</span><span id="Parser.raise_error-941"><a href="#Parser.raise_error-941"><span class="linenos">941</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
+</span><span id="Parser.raise_error-942"><a href="#Parser.raise_error-942"><span class="linenos">942</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
+</span><span id="Parser.raise_error-943"><a href="#Parser.raise_error-943"><span class="linenos">943</span></a> <span class="p">)</span>
+</span><span id="Parser.raise_error-944"><a href="#Parser.raise_error-944"><span class="linenos">944</span></a>
+</span><span id="Parser.raise_error-945"><a href="#Parser.raise_error-945"><span class="linenos">945</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser.raise_error-946"><a href="#Parser.raise_error-946"><span class="linenos">946</span></a> <span class="k">raise</span> <span class="n">error</span>
+</span><span id="Parser.raise_error-947"><a href="#Parser.raise_error-947"><span class="linenos">947</span></a>
+</span><span id="Parser.raise_error-948"><a href="#Parser.raise_error-948"><span class="linenos">948</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
</span></pre></div>
@@ -9257,28 +9323,28 @@ error level setting.</p>
</div>
<a class="headerlink" href="#Parser.expression"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.expression-943"><a href="#Parser.expression-943"><span class="linenos">943</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
-</span><span id="Parser.expression-944"><a href="#Parser.expression-944"><span class="linenos">944</span></a> <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">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 class="o">**</span><span class="n">kwargs</span>
-</span><span id="Parser.expression-945"><a href="#Parser.expression-945"><span class="linenos">945</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
-</span><span id="Parser.expression-946"><a href="#Parser.expression-946"><span class="linenos">946</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.expression-947"><a href="#Parser.expression-947"><span class="linenos">947</span></a><span class="sd"> Creates a new, validated Expression.</span>
-</span><span id="Parser.expression-948"><a href="#Parser.expression-948"><span class="linenos">948</span></a>
-</span><span id="Parser.expression-949"><a href="#Parser.expression-949"><span class="linenos">949</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.expression-950"><a href="#Parser.expression-950"><span class="linenos">950</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
-</span><span id="Parser.expression-951"><a href="#Parser.expression-951"><span class="linenos">951</span></a><span class="sd"> comments: an optional list of comments to attach to the expression.</span>
-</span><span id="Parser.expression-952"><a href="#Parser.expression-952"><span class="linenos">952</span></a><span class="sd"> kwargs: the arguments to set for the expression along with their respective values.</span>
-</span><span id="Parser.expression-953"><a href="#Parser.expression-953"><span class="linenos">953</span></a>
-</span><span id="Parser.expression-954"><a href="#Parser.expression-954"><span class="linenos">954</span></a><span class="sd"> Returns:</span>
-</span><span id="Parser.expression-955"><a href="#Parser.expression-955"><span class="linenos">955</span></a><span class="sd"> The target expression.</span>
-</span><span id="Parser.expression-956"><a href="#Parser.expression-956"><span class="linenos">956</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.expression-957"><a href="#Parser.expression-957"><span class="linenos">957</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Parser.expression-958"><a href="#Parser.expression-958"><span class="linenos">958</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
-</span><span id="Parser.expression-959"><a href="#Parser.expression-959"><span class="linenos">959</span></a> <span class="n">instance</span><span class="o">.</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><span id="Parser.expression-960"><a href="#Parser.expression-960"><span class="linenos">960</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser.expression-961"><a href="#Parser.expression-961"><span class="linenos">961</span></a> <span class="k">if</span> <span class="n">comments</span><span class="p">:</span>
-</span><span id="Parser.expression-962"><a href="#Parser.expression-962"><span class="linenos">962</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
-</span><span id="Parser.expression-963"><a href="#Parser.expression-963"><span class="linenos">963</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
-</span><span id="Parser.expression-964"><a href="#Parser.expression-964"><span class="linenos">964</span></a> <span class="k">return</span> <span class="n">instance</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.expression-950"><a href="#Parser.expression-950"><span class="linenos">950</span></a> <span class="k">def</span> <span class="nf">expression</span><span class="p">(</span>
+</span><span id="Parser.expression-951"><a href="#Parser.expression-951"><span class="linenos">951</span></a> <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">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 class="o">**</span><span class="n">kwargs</span>
+</span><span id="Parser.expression-952"><a href="#Parser.expression-952"><span class="linenos">952</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
+</span><span id="Parser.expression-953"><a href="#Parser.expression-953"><span class="linenos">953</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.expression-954"><a href="#Parser.expression-954"><span class="linenos">954</span></a><span class="sd"> Creates a new, validated Expression.</span>
+</span><span id="Parser.expression-955"><a href="#Parser.expression-955"><span class="linenos">955</span></a>
+</span><span id="Parser.expression-956"><a href="#Parser.expression-956"><span class="linenos">956</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.expression-957"><a href="#Parser.expression-957"><span class="linenos">957</span></a><span class="sd"> exp_class: the expression class to instantiate.</span>
+</span><span id="Parser.expression-958"><a href="#Parser.expression-958"><span class="linenos">958</span></a><span class="sd"> comments: an optional list of comments to attach to the expression.</span>
+</span><span id="Parser.expression-959"><a href="#Parser.expression-959"><span class="linenos">959</span></a><span class="sd"> kwargs: the arguments to set for the expression along with their respective values.</span>
+</span><span id="Parser.expression-960"><a href="#Parser.expression-960"><span class="linenos">960</span></a>
+</span><span id="Parser.expression-961"><a href="#Parser.expression-961"><span class="linenos">961</span></a><span class="sd"> Returns:</span>
+</span><span id="Parser.expression-962"><a href="#Parser.expression-962"><span class="linenos">962</span></a><span class="sd"> The target expression.</span>
+</span><span id="Parser.expression-963"><a href="#Parser.expression-963"><span class="linenos">963</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.expression-964"><a href="#Parser.expression-964"><span class="linenos">964</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Parser.expression-965"><a href="#Parser.expression-965"><span class="linenos">965</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
+</span><span id="Parser.expression-966"><a href="#Parser.expression-966"><span class="linenos">966</span></a> <span class="n">instance</span><span class="o">.</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><span id="Parser.expression-967"><a href="#Parser.expression-967"><span class="linenos">967</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser.expression-968"><a href="#Parser.expression-968"><span class="linenos">968</span></a> <span class="k">if</span> <span class="n">comments</span><span class="p">:</span>
+</span><span id="Parser.expression-969"><a href="#Parser.expression-969"><span class="linenos">969</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
+</span><span id="Parser.expression-970"><a href="#Parser.expression-970"><span class="linenos">970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+</span><span id="Parser.expression-971"><a href="#Parser.expression-971"><span class="linenos">971</span></a> <span class="k">return</span> <span class="n">instance</span>
</span></pre></div>
@@ -9312,22 +9378,22 @@ error level setting.</p>
</div>
<a class="headerlink" href="#Parser.validate_expression"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.validate_expression-966"><a href="#Parser.validate_expression-966"><span class="linenos">966</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span>
-</span><span id="Parser.validate_expression-967"><a href="#Parser.validate_expression-967"><span class="linenos">967</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">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">t</span><span class="o">.</span><span class="n">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser.validate_expression-968"><a href="#Parser.validate_expression-968"><span class="linenos">968</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser.validate_expression-969"><a href="#Parser.validate_expression-969"><span class="linenos">969</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser.validate_expression-970"><a href="#Parser.validate_expression-970"><span class="linenos">970</span></a><span class="sd"> Validates an already instantiated expression, making sure that all its mandatory arguments</span>
-</span><span id="Parser.validate_expression-971"><a href="#Parser.validate_expression-971"><span class="linenos">971</span></a><span class="sd"> are set.</span>
-</span><span id="Parser.validate_expression-972"><a href="#Parser.validate_expression-972"><span class="linenos">972</span></a>
-</span><span id="Parser.validate_expression-973"><a href="#Parser.validate_expression-973"><span class="linenos">973</span></a><span class="sd"> Args:</span>
-</span><span id="Parser.validate_expression-974"><a href="#Parser.validate_expression-974"><span class="linenos">974</span></a><span class="sd"> expression: the expression to validate.</span>
-</span><span id="Parser.validate_expression-975"><a href="#Parser.validate_expression-975"><span class="linenos">975</span></a><span class="sd"> args: an optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
-</span><span id="Parser.validate_expression-976"><a href="#Parser.validate_expression-976"><span class="linenos">976</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser.validate_expression-977"><a href="#Parser.validate_expression-977"><span class="linenos">977</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser.validate_expression-978"><a href="#Parser.validate_expression-978"><span class="linenos">978</span></a> <span class="k">return</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Parser.validate_expression-973"><a href="#Parser.validate_expression-973"><span class="linenos">973</span></a> <span class="k">def</span> <span class="nf">validate_expression</span><span class="p">(</span>
+</span><span id="Parser.validate_expression-974"><a href="#Parser.validate_expression-974"><span class="linenos">974</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">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">t</span><span class="o">.</span><span class="n">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser.validate_expression-975"><a href="#Parser.validate_expression-975"><span class="linenos">975</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser.validate_expression-976"><a href="#Parser.validate_expression-976"><span class="linenos">976</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser.validate_expression-977"><a href="#Parser.validate_expression-977"><span class="linenos">977</span></a><span class="sd"> Validates an already instantiated expression, making sure that all its mandatory arguments</span>
+</span><span id="Parser.validate_expression-978"><a href="#Parser.validate_expression-978"><span class="linenos">978</span></a><span class="sd"> are set.</span>
</span><span id="Parser.validate_expression-979"><a href="#Parser.validate_expression-979"><span class="linenos">979</span></a>
-</span><span id="Parser.validate_expression-980"><a href="#Parser.validate_expression-980"><span class="linenos">980</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
-</span><span id="Parser.validate_expression-981"><a href="#Parser.validate_expression-981"><span class="linenos">981</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
+</span><span id="Parser.validate_expression-980"><a href="#Parser.validate_expression-980"><span class="linenos">980</span></a><span class="sd"> Args:</span>
+</span><span id="Parser.validate_expression-981"><a href="#Parser.validate_expression-981"><span class="linenos">981</span></a><span class="sd"> expression: the expression to validate.</span>
+</span><span id="Parser.validate_expression-982"><a href="#Parser.validate_expression-982"><span class="linenos">982</span></a><span class="sd"> args: an optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
+</span><span id="Parser.validate_expression-983"><a href="#Parser.validate_expression-983"><span class="linenos">983</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser.validate_expression-984"><a href="#Parser.validate_expression-984"><span class="linenos">984</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_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="Parser.validate_expression-985"><a href="#Parser.validate_expression-985"><span class="linenos">985</span></a> <span class="k">return</span>
+</span><span id="Parser.validate_expression-986"><a href="#Parser.validate_expression-986"><span class="linenos">986</span></a>
+</span><span id="Parser.validate_expression-987"><a href="#Parser.validate_expression-987"><span class="linenos">987</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
+</span><span id="Parser.validate_expression-988"><a href="#Parser.validate_expression-988"><span class="linenos">988</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
</span></pre></div>
diff --git a/docs/sqlglot/tokens.html b/docs/sqlglot/tokens.html
index 822a76d..91afd40 100644
--- a/docs/sqlglot/tokens.html
+++ b/docs/sqlglot/tokens.html
@@ -634,6 +634,9 @@
<a class="variable" href="#TokenType.JOIN_MARKER">JOIN_MARKER</a>
</li>
<li>
+ <a class="variable" href="#TokenType.KEEP">KEEP</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.LANGUAGE">LANGUAGE</a>
</li>
<li>
@@ -685,6 +688,9 @@
<a class="variable" href="#TokenType.NEXT">NEXT</a>
</li>
<li>
+ <a class="variable" href="#TokenType.NEXT_VALUE_FOR">NEXT_VALUE_FOR</a>
+ </li>
+ <li>
<a class="variable" href="#TokenType.NO_ACTION">NO_ACTION</a>
</li>
<li>
@@ -1206,949 +1212,953 @@
</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="n">ISNULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a> <span class="n">JOIN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <span class="n">JOIN_MARKER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a> <span class="n">LANGUAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a> <span class="n">LATERAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a> <span class="n">LAZY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="n">LEADING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a> <span class="n">LEFT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">LIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="n">LIKE_ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a> <span class="n">LIMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="n">LOAD_DATA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="n">LOCAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a> <span class="n">MATCH_RECOGNIZE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="n">MATERIALIZED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="n">MERGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="n">MOD</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="n">NATURAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="n">NEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="n">NO_ACTION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="n">NOTNULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a> <span class="n">NULLS_FIRST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="n">NULLS_LAST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a> <span class="n">OFFSET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="n">ON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="n">ONLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="n">OPTIONS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="n">ORDER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="n">ORDERED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="n">ORDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">OUTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="n">OUT_OF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="n">OVER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="n">OVERLAPS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="n">OVERWRITE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="n">PARTITION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="n">PARTITION_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="n">PERCENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">PIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="n">PLACEHOLDER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">PRAGMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">PRECEDING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">PRIMARY_KEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="n">PROCEDURE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="n">PSEUDO_TYPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="n">QUALIFY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">QUOTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="n">RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">RECURSIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">REPLACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="n">RESPECT_NULLS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">RETURNING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="n">REFERENCES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a> <span class="n">RIGHT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a> <span class="n">RLIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">ROLLBACK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="n">ROLLUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">ROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">ROWS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="n">SEED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a> <span class="n">SELECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a> <span class="n">SEMI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="n">SEPARATOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="n">SERDE_PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a> <span class="n">SHOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="n">SIMILAR_TO</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="n">SOME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a> <span class="n">SORTKEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a> <span class="n">SORT_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a> <span class="n">TABLE_SAMPLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <span class="n">TEMPORARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a> <span class="n">TOP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a> <span class="n">THEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a> <span class="n">TRAILING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a> <span class="n">TRUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a> <span class="n">UNBOUNDED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a> <span class="n">UNCACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="n">UNION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a> <span class="n">UNLOGGED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="n">UNNEST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="n">UNPIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a> <span class="n">UPDATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="n">USE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="n">USING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="n">VALUES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a> <span class="n">VIEW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">VOLATILE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">WHEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="n">WHERE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="n">WINDOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a> <span class="n">WITH_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="n">WITH_LOCAL_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">WITHIN_GROUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">WITHOUT_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="n">UNIQUE</span> <span class="o">=</span> <span class="n">auto</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><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a><span class="k">class</span> <span class="nc">Token</span><span class="p">:</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;token_type&quot;</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">,</span> <span class="s2">&quot;comments&quot;</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="nd">@classmethod</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a NUMBER token with `number` as its text.&quot;&quot;&quot;</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="k">return</span> <span class="bp">cls</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="nb">str</span><span class="p">(</span><span class="n">number</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="nd">@classmethod</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a STRING token with `string` as its text.&quot;&quot;&quot;</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="k">return</span> <span class="bp">cls</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">string</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="nd">@classmethod</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="k">def</span> <span class="nf">identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</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;Returns an IDENTIFIER token with `identifier` as its text.&quot;&quot;&quot;</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="k">return</span> <span class="bp">cls</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">identifier</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="nd">@classmethod</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">var</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an VAR token with `var` as its text.&quot;&quot;&quot;</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">var</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="fm">__init__</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">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="n">text</span><span class="p">:</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">line</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="n">end</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-348"><a href="#L-348"><span class="linenos"> 348</span></a> <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-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">token_type</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">text</span> <span class="o">=</span> <span class="n">text</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">line</span> <span class="o">=</span> <span class="n">line</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</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-355"><a href="#L-355"><span class="linenos"> 355</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 class="k">if</span> <span class="n">end</span> <span class="k">else</span> <span class="n">size</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</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-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="nd">@property</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="k">def</span> <span class="nf">start</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-360"><a href="#L-360"><span class="linenos"> 360</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the start of the token.&quot;&quot;&quot;</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</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">text</span><span class="p">)</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a>
-</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="k">def</span> <span class="fm">__repr__</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-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="n">attributes</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">k</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">k</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__slots__</span><span class="p">)</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Token </span><span class="si">{</span><span class="n">attributes</span><span class="si">}</span><span class="s2">&gt;&quot;</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><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a><span class="k">class</span> <span class="nc">_Tokenizer</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</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-370"><a href="#L-370"><span class="linenos"> 370</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-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="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</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">s</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">e</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">QUOTES</span><span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <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="k">if</span> <span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isalpha</span><span class="p">()</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;N&quot;</span><span class="p">))</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 class="n">klass</span><span class="o">.</span><span class="n">_BIT_STRINGS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">BIT_STRINGS</span><span class="p">)</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_HEX_STRINGS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">HEX_STRINGS</span><span class="p">)</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">BYTE_STRINGS</span><span class="p">)</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_IDENTIFIERS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIERS</span><span class="p">)</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">)</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">)</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span> <span class="o">=</span> <span class="nb">dict</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 class="n">comment</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</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="k">else</span> <span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">comment</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">COMMENTS</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><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">KEYWORD_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">key</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">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">{</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="o">**</span><span class="n">klass</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="o">**</span><span class="p">{</span><span class="n">comment</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">},</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="o">**</span><span class="p">{</span><span class="n">quote</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span><span class="p">},</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="o">**</span><span class="p">{</span><span class="n">bit_string</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span> <span class="k">for</span> <span class="n">bit_string</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_BIT_STRINGS</span><span class="p">},</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="o">**</span><span class="p">{</span><span class="n">hex_string</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span> <span class="k">for</span> <span class="n">hex_string</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_HEX_STRINGS</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="p">{</span><span class="n">byte_string</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span> <span class="k">for</span> <span class="n">byte_string</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_BYTE_STRINGS</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 class="k">if</span> <span class="s2">&quot; &quot;</span> <span class="ow">in</span> <span class="n">key</span> <span class="ow">or</span> <span class="nb">any</span><span class="p">(</span><span class="n">single</span> <span class="ow">in</span> <span class="n">key</span> <span class="k">for</span> <span class="n">single</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">)</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="p">)</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a>
-</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="k">return</span> <span class="n">klass</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a> <span class="n">KEEP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a> <span class="n">LANGUAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a> <span class="n">LATERAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="n">LAZY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a> <span class="n">LEADING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="n">LEFT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="n">LIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a> <span class="n">LIKE_ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="n">LIMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="n">LOAD_DATA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="n">LOCAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="n">MATCH_RECOGNIZE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="n">MATERIALIZED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="n">MERGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="n">MOD</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="n">NATURAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="n">NEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="n">NEXT_VALUE_FOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="n">NO_ACTION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a> <span class="n">NOTNULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a> <span class="n">NULLS_FIRST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="n">NULLS_LAST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="n">OFFSET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="n">ON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="n">ONLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="n">OPTIONS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="n">ORDER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">ORDERED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="n">ORDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="n">OUTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="n">OUT_OF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="n">OVER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a> <span class="n">OVERLAPS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="n">OVERWRITE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="n">PARTITION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">PARTITION_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="n">PERCENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">PIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="n">PLACEHOLDER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="n">PRAGMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="n">PRECEDING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="n">PRIMARY_KEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="n">PROCEDURE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a> <span class="n">PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">PSEUDO_TYPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="n">QUALIFY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">QUOTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="n">RECURSIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">REPLACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <span class="n">RESPECT_NULLS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a> <span class="n">RETURNING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a> <span class="n">REFERENCES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">RIGHT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="n">RLIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">ROLLBACK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">ROLLUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="n">ROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a> <span class="n">ROWS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a> <span class="n">SEED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="n">SELECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="n">SEMI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a> <span class="n">SEPARATOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a> <span class="n">SERDE_PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="n">SHOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a> <span class="n">SIMILAR_TO</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a> <span class="n">SOME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a> <span class="n">SORTKEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a> <span class="n">SORT_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a> <span class="n">TABLE_SAMPLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a> <span class="n">TEMPORARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a> <span class="n">TOP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a> <span class="n">THEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a> <span class="n">TRAILING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a> <span class="n">TRUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="n">UNBOUNDED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a> <span class="n">UNCACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="n">UNION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a> <span class="n">UNLOGGED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a> <span class="n">UNNEST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="n">UNPIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="n">UPDATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="n">USE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a> <span class="n">USING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">VALUES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">VIEW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="n">VOLATILE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="n">WHEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">WHERE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a> <span class="n">WINDOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="n">WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">WITH_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">WITH_LOCAL_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="n">WITHIN_GROUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a> <span class="n">WITHOUT_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">UNIQUE</span> <span class="o">=</span> <span class="n">auto</span><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><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a><span class="k">class</span> <span class="nc">Token</span><span class="p">:</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;token_type&quot;</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">,</span> <span class="s2">&quot;comments&quot;</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="nd">@classmethod</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a NUMBER token with `number` as its text.&quot;&quot;&quot;</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a> <span class="k">return</span> <span class="bp">cls</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="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">))</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a>
+</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="nd">@classmethod</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a STRING token with `string` as its text.&quot;&quot;&quot;</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="k">return</span> <span class="bp">cls</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">string</span><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="nd">@classmethod</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="k">def</span> <span class="nf">identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an IDENTIFIER token with `identifier` as its text.&quot;&quot;&quot;</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="k">return</span> <span class="bp">cls</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">identifier</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="nd">@classmethod</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">var</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an VAR token with `var` as its text.&quot;&quot;&quot;</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">var</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><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="n">line</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="n">end</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-350"><a href="#L-350"><span class="linenos"> 350</span></a> <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-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</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="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">token_type</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">line</span> <span class="o">=</span> <span class="n">line</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</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-357"><a href="#L-357"><span class="linenos"> 357</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 class="k">if</span> <span class="n">end</span> <span class="k">else</span> <span class="n">size</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</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-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="nd">@property</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="k">def</span> <span class="nf">start</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-362"><a href="#L-362"><span class="linenos"> 362</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the start of the token.&quot;&quot;&quot;</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</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">text</span><span class="p">)</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="k">def</span> <span class="fm">__repr__</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-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">attributes</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">k</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">k</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__slots__</span><span class="p">)</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Token </span><span class="si">{</span><span class="n">attributes</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
+</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><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a><span class="k">class</span> <span class="nc">_Tokenizer</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</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-372"><a href="#L-372"><span class="linenos"> 372</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-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="n">klass</span><span class="o">.</span><span class="n">_QUOTES</span> <span class="o">=</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;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">s</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">:</span> <span class="n">e</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">QUOTES</span><span class="p">)</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="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="k">if</span> <span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">isalpha</span><span class="p">()</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;N&quot;</span><span class="p">))</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="p">}</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_BIT_STRINGS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">BIT_STRINGS</span><span class="p">)</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_HEX_STRINGS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">HEX_STRINGS</span><span class="p">)</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">BYTE_STRINGS</span><span class="p">)</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_IDENTIFIERS</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delimeter_list_to_dict</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIERS</span><span class="p">)</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">STRING_ESCAPES</span><span class="p">)</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">klass</span><span class="o">.</span><span class="n">IDENTIFIER_ESCAPES</span><span class="p">)</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="p">(</span><span class="n">comment</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</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="k">else</span> <span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">comment</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">COMMENTS</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><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">KEYWORD_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="n">key</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">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">{</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="o">**</span><span class="n">klass</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="o">**</span><span class="p">{</span><span class="n">comment</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_COMMENTS</span><span class="p">},</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="o">**</span><span class="p">{</span><span class="n">quote</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span> <span class="k">for</span> <span class="n">quote</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_QUOTES</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="p">{</span><span class="n">bit_string</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span> <span class="k">for</span> <span class="n">bit_string</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_BIT_STRINGS</span><span class="p">},</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="o">**</span><span class="p">{</span><span class="n">hex_string</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span> <span class="k">for</span> <span class="n">hex_string</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_HEX_STRINGS</span><span class="p">},</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="o">**</span><span class="p">{</span><span class="n">byte_string</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span> <span class="k">for</span> <span class="n">byte_string</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span><span class="p">},</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="p">}</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="k">if</span> <span class="s2">&quot; &quot;</span> <span class="ow">in</span> <span class="n">key</span> <span class="ow">or</span> <span class="nb">any</span><span class="p">(</span><span class="n">single</span> <span class="ow">in</span> <span class="n">key</span> <span class="k">for</span> <span class="n">single</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">SINGLE_TOKENS</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><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="nd">@staticmethod</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="k">def</span> <span class="nf">_delimeter_list_to_dict</span><span class="p">(</span><span class="nb">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="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">-&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="nb">str</span><span class="p">]:</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="k">return</span> <span class="nb">dict</span><span class="p">((</span><span class="n">item</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">)</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><span id="L-408"><a href="#L-408"><span class="linenos"> 408</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-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</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-411"><a href="#L-411"><span class="linenos"> 411</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-412"><a href="#L-412"><span class="linenos"> 412</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-413"><a href="#L-413"><span class="linenos"> 413</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-414"><a href="#L-414"><span class="linenos"> 414</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-415"><a href="#L-415"><span class="linenos"> 415</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-416"><a href="#L-416"><span class="linenos"> 416</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-417"><a href="#L-417"><span class="linenos"> 417</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-418"><a href="#L-418"><span class="linenos"> 418</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-419"><a href="#L-419"><span class="linenos"> 419</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-420"><a href="#L-420"><span class="linenos"> 420</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-421"><a href="#L-421"><span class="linenos"> 421</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-422"><a href="#L-422"><span class="linenos"> 422</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-423"><a href="#L-423"><span class="linenos"> 423</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-424"><a href="#L-424"><span class="linenos"> 424</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-425"><a href="#L-425"><span class="linenos"> 425</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-426"><a href="#L-426"><span class="linenos"> 426</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-427"><a href="#L-427"><span class="linenos"> 427</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-428"><a href="#L-428"><span class="linenos"> 428</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-429"><a href="#L-429"><span class="linenos"> 429</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-430"><a href="#L-430"><span class="linenos"> 430</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-431"><a href="#L-431"><span class="linenos"> 431</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-432"><a href="#L-432"><span class="linenos"> 432</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-433"><a href="#L-433"><span class="linenos"> 433</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-434"><a href="#L-434"><span class="linenos"> 434</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-435"><a href="#L-435"><span class="linenos"> 435</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-436"><a href="#L-436"><span class="linenos"> 436</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</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-439"><a href="#L-439"><span class="linenos"> 439</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-440"><a href="#L-440"><span class="linenos"> 440</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-441"><a href="#L-441"><span class="linenos"> 441</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-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">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-445"><a href="#L-445"><span class="linenos"> 445</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-446"><a href="#L-446"><span class="linenos"> 446</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-447"><a href="#L-447"><span class="linenos"> 447</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-448"><a href="#L-448"><span class="linenos"> 448</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-449"><a href="#L-449"><span class="linenos"> 449</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-450"><a href="#L-450"><span class="linenos"> 450</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-451"><a href="#L-451"><span class="linenos"> 451</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-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">_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-454"><a href="#L-454"><span class="linenos"> 454</span></a> <span class="n">_BIT_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="n">_BYTE_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="nb">str</span><span class="p">]</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="n">_HEX_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</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-458"><a href="#L-458"><span class="linenos"> 458</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-459"><a href="#L-459"><span class="linenos"> 459</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-460"><a href="#L-460"><span class="linenos"> 460</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-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="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="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-463"><a href="#L-463"><span class="linenos"> 463</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-464"><a href="#L-464"><span class="linenos"> 464</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-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="s2">&quot;{{+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="s2">&quot;{{-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="s2">&quot;+}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;-}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</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-470"><a href="#L-470"><span class="linenos"> 470</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-471"><a href="#L-471"><span class="linenos"> 471</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-472"><a href="#L-472"><span class="linenos"> 472</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-473"><a href="#L-473"><span class="linenos"> 473</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-474"><a href="#L-474"><span class="linenos"> 474</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-475"><a href="#L-475"><span class="linenos"> 475</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-476"><a href="#L-476"><span class="linenos"> 476</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-477"><a href="#L-477"><span class="linenos"> 477</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-478"><a href="#L-478"><span class="linenos"> 478</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-479"><a href="#L-479"><span class="linenos"> 479</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-480"><a href="#L-480"><span class="linenos"> 480</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-481"><a href="#L-481"><span class="linenos"> 481</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-482"><a href="#L-482"><span class="linenos"> 482</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-483"><a href="#L-483"><span class="linenos"> 483</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-484"><a href="#L-484"><span class="linenos"> 484</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-485"><a href="#L-485"><span class="linenos"> 485</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-486"><a href="#L-486"><span class="linenos"> 486</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-487"><a href="#L-487"><span class="linenos"> 487</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-488"><a href="#L-488"><span class="linenos"> 488</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-489"><a href="#L-489"><span class="linenos"> 489</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-490"><a href="#L-490"><span class="linenos"> 490</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-491"><a href="#L-491"><span class="linenos"> 491</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-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="s2">&quot;AT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_TIME_ZONE</span><span class="p">,</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</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-494"><a href="#L-494"><span class="linenos"> 494</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-495"><a href="#L-495"><span class="linenos"> 495</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-496"><a href="#L-496"><span class="linenos"> 496</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-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="s2">&quot;BOTH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</span><span class="p">,</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="s2">&quot;BUCKET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">,</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="s2">&quot;BY DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BY_DEFAULT</span><span class="p">,</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</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-501"><a href="#L-501"><span class="linenos"> 501</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-502"><a href="#L-502"><span class="linenos"> 502</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-503"><a href="#L-503"><span class="linenos"> 503</span></a> <span class="s2">&quot;CASCADE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</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-505"><a href="#L-505"><span class="linenos"> 505</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-506"><a href="#L-506"><span class="linenos"> 506</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-507"><a href="#L-507"><span class="linenos"> 507</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-508"><a href="#L-508"><span class="linenos"> 508</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-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="s2">&quot;COMPOUND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMPOUND</span><span class="p">,</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</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-511"><a href="#L-511"><span class="linenos"> 511</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-512"><a href="#L-512"><span class="linenos"> 512</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-513"><a href="#L-513"><span class="linenos"> 513</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-514"><a href="#L-514"><span class="linenos"> 514</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-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</span><span class="p">,</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</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-517"><a href="#L-517"><span class="linenos"> 517</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-518"><a href="#L-518"><span class="linenos"> 518</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-519"><a href="#L-519"><span class="linenos"> 519</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-520"><a href="#L-520"><span class="linenos"> 520</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-521"><a href="#L-521"><span class="linenos"> 521</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-522"><a href="#L-522"><span class="linenos"> 522</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-523"><a href="#L-523"><span class="linenos"> 523</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-524"><a href="#L-524"><span class="linenos"> 524</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-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="s2">&quot;DISTINCT FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT_FROM</span><span class="p">,</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</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-527"><a href="#L-527"><span class="linenos"> 527</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-528"><a href="#L-528"><span class="linenos"> 528</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-529"><a href="#L-529"><span class="linenos"> 529</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-530"><a href="#L-530"><span class="linenos"> 530</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-531"><a href="#L-531"><span class="linenos"> 531</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-532"><a href="#L-532"><span class="linenos"> 532</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-533"><a href="#L-533"><span class="linenos"> 533</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-534"><a href="#L-534"><span class="linenos"> 534</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-535"><a href="#L-535"><span class="linenos"> 535</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-536"><a href="#L-536"><span class="linenos"> 536</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-537"><a href="#L-537"><span class="linenos"> 537</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-538"><a href="#L-538"><span class="linenos"> 538</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-539"><a href="#L-539"><span class="linenos"> 539</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-540"><a href="#L-540"><span class="linenos"> 540</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-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="s2">&quot;FOLLOWING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</span><span class="p">,</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</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-543"><a href="#L-543"><span class="linenos"> 543</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-544"><a href="#L-544"><span class="linenos"> 544</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-545"><a href="#L-545"><span class="linenos"> 545</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-546"><a href="#L-546"><span class="linenos"> 546</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-547"><a href="#L-547"><span class="linenos"> 547</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-548"><a href="#L-548"><span class="linenos"> 548</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-549"><a href="#L-549"><span class="linenos"> 549</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-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IF</span><span class="p">,</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</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-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">,</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</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-554"><a href="#L-554"><span class="linenos"> 554</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-555"><a href="#L-555"><span class="linenos"> 555</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-556"><a href="#L-556"><span class="linenos"> 556</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-557"><a href="#L-557"><span class="linenos"> 557</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-558"><a href="#L-558"><span class="linenos"> 558</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-559"><a href="#L-559"><span class="linenos"> 559</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-560"><a href="#L-560"><span class="linenos"> 560</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-561"><a href="#L-561"><span class="linenos"> 561</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-562"><a href="#L-562"><span class="linenos"> 562</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-563"><a href="#L-563"><span class="linenos"> 563</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-564"><a href="#L-564"><span class="linenos"> 564</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-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="s2">&quot;LAZY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</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-568"><a href="#L-568"><span class="linenos"> 568</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-569"><a href="#L-569"><span class="linenos"> 569</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-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="s2">&quot;LOAD DATA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</span><span class="p">,</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</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-574"><a href="#L-574"><span class="linenos"> 574</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-575"><a href="#L-575"><span class="linenos"> 575</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-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="s2">&quot;NO ACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">,</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</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-578"><a href="#L-578"><span class="linenos"> 578</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-579"><a href="#L-579"><span class="linenos"> 579</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-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="s2">&quot;NULLS FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">,</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;NULLS LAST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">,</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</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-583"><a href="#L-583"><span class="linenos"> 583</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-584"><a href="#L-584"><span class="linenos"> 584</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-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;ONLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
-</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</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-588"><a href="#L-588"><span class="linenos"> 588</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-589"><a href="#L-589"><span class="linenos"> 589</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-590"><a href="#L-590"><span class="linenos"> 590</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-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="s2">&quot;OUT OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUT_OF</span><span class="p">,</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</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-593"><a href="#L-593"><span class="linenos"> 593</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-594"><a href="#L-594"><span class="linenos"> 594</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-595"><a href="#L-595"><span class="linenos"> 595</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-596"><a href="#L-596"><span class="linenos"> 596</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-597"><a href="#L-597"><span class="linenos"> 597</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-598"><a href="#L-598"><span class="linenos"> 598</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-599"><a href="#L-599"><span class="linenos"> 599</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-600"><a href="#L-600"><span class="linenos"> 600</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-601"><a href="#L-601"><span class="linenos"> 601</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-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
-</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</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-604"><a href="#L-604"><span class="linenos"> 604</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-605"><a href="#L-605"><span class="linenos"> 605</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-606"><a href="#L-606"><span class="linenos"> 606</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-607"><a href="#L-607"><span class="linenos"> 607</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-608"><a href="#L-608"><span class="linenos"> 608</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-609"><a href="#L-609"><span class="linenos"> 609</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-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RESPECT_NULLS</span><span class="p">,</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</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-612"><a href="#L-612"><span class="linenos"> 612</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-613"><a href="#L-613"><span class="linenos"> 613</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-614"><a href="#L-614"><span class="linenos"> 614</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-615"><a href="#L-615"><span class="linenos"> 615</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-616"><a href="#L-616"><span class="linenos"> 616</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-617"><a href="#L-617"><span class="linenos"> 617</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-618"><a href="#L-618"><span class="linenos"> 618</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-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="s2">&quot;SEED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
-</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</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-622"><a href="#L-622"><span class="linenos"> 622</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-623"><a href="#L-623"><span class="linenos"> 623</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-624"><a href="#L-624"><span class="linenos"> 624</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-625"><a href="#L-625"><span class="linenos"> 625</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-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</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-628"><a href="#L-628"><span class="linenos"> 628</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-629"><a href="#L-629"><span class="linenos"> 629</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-630"><a href="#L-630"><span class="linenos"> 630</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-631"><a href="#L-631"><span class="linenos"> 631</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-632"><a href="#L-632"><span class="linenos"> 632</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-633"><a href="#L-633"><span class="linenos"> 633</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-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
-</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</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-637"><a href="#L-637"><span class="linenos"> 637</span></a> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</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-639"><a href="#L-639"><span class="linenos"> 639</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-640"><a href="#L-640"><span class="linenos"> 640</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-641"><a href="#L-641"><span class="linenos"> 641</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-642"><a href="#L-642"><span class="linenos"> 642</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-643"><a href="#L-643"><span class="linenos"> 643</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-644"><a href="#L-644"><span class="linenos"> 644</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-645"><a href="#L-645"><span class="linenos"> 645</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-646"><a href="#L-646"><span class="linenos"> 646</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-647"><a href="#L-647"><span class="linenos"> 647</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-648"><a href="#L-648"><span class="linenos"> 648</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-649"><a href="#L-649"><span class="linenos"> 649</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-650"><a href="#L-650"><span class="linenos"> 650</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-651"><a href="#L-651"><span class="linenos"> 651</span></a> <span class="s2">&quot;WITH TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_TIME_ZONE</span><span class="p">,</span>
-</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;WITH LOCAL TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_LOCAL_TIME_ZONE</span><span class="p">,</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;WITHIN GROUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">,</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;WITHOUT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHOUT_TIME_ZONE</span><span class="p">,</span>
-</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</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-656"><a href="#L-656"><span class="linenos"> 656</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-657"><a href="#L-657"><span class="linenos"> 657</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-658"><a href="#L-658"><span class="linenos"> 658</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-659"><a href="#L-659"><span class="linenos"> 659</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-660"><a href="#L-660"><span class="linenos"> 660</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-661"><a href="#L-661"><span class="linenos"> 661</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-662"><a href="#L-662"><span class="linenos"> 662</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-663"><a href="#L-663"><span class="linenos"> 663</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-664"><a href="#L-664"><span class="linenos"> 664</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-665"><a href="#L-665"><span class="linenos"> 665</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-666"><a href="#L-666"><span class="linenos"> 666</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-667"><a href="#L-667"><span class="linenos"> 667</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-668"><a href="#L-668"><span class="linenos"> 668</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-669"><a href="#L-669"><span class="linenos"> 669</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-670"><a href="#L-670"><span class="linenos"> 670</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">BIGINT</span><span class="p">,</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</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-672"><a href="#L-672"><span class="linenos"> 672</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-673"><a href="#L-673"><span class="linenos"> 673</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-674"><a href="#L-674"><span class="linenos"> 674</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-675"><a href="#L-675"><span class="linenos"> 675</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-676"><a href="#L-676"><span class="linenos"> 676</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-677"><a href="#L-677"><span class="linenos"> 677</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-678"><a href="#L-678"><span class="linenos"> 678</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-679"><a href="#L-679"><span class="linenos"> 679</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-680"><a href="#L-680"><span class="linenos"> 680</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-681"><a href="#L-681"><span class="linenos"> 681</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-682"><a href="#L-682"><span class="linenos"> 682</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-683"><a href="#L-683"><span class="linenos"> 683</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-684"><a href="#L-684"><span class="linenos"> 684</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-685"><a href="#L-685"><span class="linenos"> 685</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-686"><a href="#L-686"><span class="linenos"> 686</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-687"><a href="#L-687"><span class="linenos"> 687</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-688"><a href="#L-688"><span class="linenos"> 688</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-689"><a href="#L-689"><span class="linenos"> 689</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-690"><a href="#L-690"><span class="linenos"> 690</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-691"><a href="#L-691"><span class="linenos"> 691</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-692"><a href="#L-692"><span class="linenos"> 692</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-693"><a href="#L-693"><span class="linenos"> 693</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-694"><a href="#L-694"><span class="linenos"> 694</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-695"><a href="#L-695"><span class="linenos"> 695</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-696"><a href="#L-696"><span class="linenos"> 696</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-697"><a href="#L-697"><span class="linenos"> 697</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-698"><a href="#L-698"><span class="linenos"> 698</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-699"><a href="#L-699"><span class="linenos"> 699</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-700"><a href="#L-700"><span class="linenos"> 700</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-701"><a href="#L-701"><span class="linenos"> 701</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-702"><a href="#L-702"><span class="linenos"> 702</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-703"><a href="#L-703"><span class="linenos"> 703</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-704"><a href="#L-704"><span class="linenos"> 704</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-705"><a href="#L-705"><span class="linenos"> 705</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-706"><a href="#L-706"><span class="linenos"> 706</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-707"><a href="#L-707"><span class="linenos"> 707</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-708"><a href="#L-708"><span class="linenos"> 708</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-709"><a href="#L-709"><span class="linenos"> 709</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-710"><a href="#L-710"><span class="linenos"> 710</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-711"><a href="#L-711"><span class="linenos"> 711</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-712"><a href="#L-712"><span class="linenos"> 712</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-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="s2">&quot;ALTER AGGREGATE&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-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;ALTER DEFAULT&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-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;ALTER DOMAIN&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-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;ALTER ROLE&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-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;ALTER RULE&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-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;ALTER SEQUENCE&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-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;ALTER TYPE&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-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;ALTER USER&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-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;ALTER VIEW&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-722"><a href="#L-722"><span class="linenos"> 722</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-723"><a href="#L-723"><span class="linenos"> 723</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-724"><a href="#L-724"><span class="linenos"> 724</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-725"><a href="#L-725"><span class="linenos"> 725</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-726"><a href="#L-726"><span class="linenos"> 726</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-727"><a href="#L-727"><span class="linenos"> 727</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-728"><a href="#L-728"><span class="linenos"> 728</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-729"><a href="#L-729"><span class="linenos"> 729</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-730"><a href="#L-730"><span class="linenos"> 730</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-731"><a href="#L-731"><span class="linenos"> 731</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-732"><a href="#L-732"><span class="linenos"> 732</span></a> <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">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-735"><a href="#L-735"><span class="linenos"> 735</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-736"><a href="#L-736"><span class="linenos"> 736</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-737"><a href="#L-737"><span class="linenos"> 737</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-738"><a href="#L-738"><span class="linenos"> 738</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-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="s2">&quot;</span><span class="se">\r\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-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="p">}</span>
-</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
-</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
-</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="p">}</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="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-750"><a href="#L-750"><span class="linenos"> 750</span></a>
-</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
-</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</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-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="n">ENCODE</span><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-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="k">return</span> <span class="n">klass</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="nd">@staticmethod</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="k">def</span> <span class="nf">_delimeter_list_to_dict</span><span class="p">(</span><span class="nb">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="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">-&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="nb">str</span><span class="p">]:</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="k">return</span> <span class="nb">dict</span><span class="p">((</span><span class="n">item</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">list</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><span id="L-410"><a href="#L-410"><span class="linenos"> 410</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-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</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-413"><a href="#L-413"><span class="linenos"> 413</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-414"><a href="#L-414"><span class="linenos"> 414</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-415"><a href="#L-415"><span class="linenos"> 415</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-416"><a href="#L-416"><span class="linenos"> 416</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-417"><a href="#L-417"><span class="linenos"> 417</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-418"><a href="#L-418"><span class="linenos"> 418</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-419"><a href="#L-419"><span class="linenos"> 419</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-420"><a href="#L-420"><span class="linenos"> 420</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-421"><a href="#L-421"><span class="linenos"> 421</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-422"><a href="#L-422"><span class="linenos"> 422</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-423"><a href="#L-423"><span class="linenos"> 423</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-424"><a href="#L-424"><span class="linenos"> 424</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-425"><a href="#L-425"><span class="linenos"> 425</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-426"><a href="#L-426"><span class="linenos"> 426</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-427"><a href="#L-427"><span class="linenos"> 427</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-428"><a href="#L-428"><span class="linenos"> 428</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-429"><a href="#L-429"><span class="linenos"> 429</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-430"><a href="#L-430"><span class="linenos"> 430</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-431"><a href="#L-431"><span class="linenos"> 431</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-432"><a href="#L-432"><span class="linenos"> 432</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-433"><a href="#L-433"><span class="linenos"> 433</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-434"><a href="#L-434"><span class="linenos"> 434</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-435"><a href="#L-435"><span class="linenos"> 435</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-436"><a href="#L-436"><span class="linenos"> 436</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-437"><a href="#L-437"><span class="linenos"> 437</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-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</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-441"><a href="#L-441"><span class="linenos"> 441</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-442"><a href="#L-442"><span class="linenos"> 442</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-443"><a href="#L-443"><span class="linenos"> 443</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-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="p">}</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a>
+</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span 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-447"><a href="#L-447"><span class="linenos"> 447</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-448"><a href="#L-448"><span class="linenos"> 448</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-449"><a href="#L-449"><span class="linenos"> 449</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-450"><a href="#L-450"><span class="linenos"> 450</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-451"><a href="#L-451"><span class="linenos"> 451</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-452"><a href="#L-452"><span class="linenos"> 452</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-453"><a href="#L-453"><span class="linenos"> 453</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-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="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-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="n">_BIT_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="n">_BYTE_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="n">_HEX_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</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-460"><a href="#L-460"><span class="linenos"> 460</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-461"><a href="#L-461"><span class="linenos"> 461</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-462"><a href="#L-462"><span class="linenos"> 462</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-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="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="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-465"><a href="#L-465"><span class="linenos"> 465</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-466"><a href="#L-466"><span class="linenos"> 466</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-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="s2">&quot;{{+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;{{-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="s2">&quot;+}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="s2">&quot;-}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</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-472"><a href="#L-472"><span class="linenos"> 472</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-473"><a href="#L-473"><span class="linenos"> 473</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-474"><a href="#L-474"><span class="linenos"> 474</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-475"><a href="#L-475"><span class="linenos"> 475</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-476"><a href="#L-476"><span class="linenos"> 476</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-477"><a href="#L-477"><span class="linenos"> 477</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-478"><a href="#L-478"><span class="linenos"> 478</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-479"><a href="#L-479"><span class="linenos"> 479</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-480"><a href="#L-480"><span class="linenos"> 480</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-481"><a href="#L-481"><span class="linenos"> 481</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-482"><a href="#L-482"><span class="linenos"> 482</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-483"><a href="#L-483"><span class="linenos"> 483</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-484"><a href="#L-484"><span class="linenos"> 484</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-485"><a href="#L-485"><span class="linenos"> 485</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-486"><a href="#L-486"><span class="linenos"> 486</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-487"><a href="#L-487"><span class="linenos"> 487</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-488"><a href="#L-488"><span class="linenos"> 488</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-489"><a href="#L-489"><span class="linenos"> 489</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-490"><a href="#L-490"><span class="linenos"> 490</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-491"><a href="#L-491"><span class="linenos"> 491</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-492"><a href="#L-492"><span class="linenos"> 492</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-493"><a href="#L-493"><span class="linenos"> 493</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-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="s2">&quot;AT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_TIME_ZONE</span><span class="p">,</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</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-496"><a href="#L-496"><span class="linenos"> 496</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-497"><a href="#L-497"><span class="linenos"> 497</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-498"><a href="#L-498"><span class="linenos"> 498</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-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="s2">&quot;BOTH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</span><span class="p">,</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="s2">&quot;BUCKET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">,</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a> <span class="s2">&quot;BY DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BY_DEFAULT</span><span class="p">,</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</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-503"><a href="#L-503"><span class="linenos"> 503</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-504"><a href="#L-504"><span class="linenos"> 504</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-505"><a href="#L-505"><span class="linenos"> 505</span></a> <span class="s2">&quot;CASCADE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</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-507"><a href="#L-507"><span class="linenos"> 507</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-508"><a href="#L-508"><span class="linenos"> 508</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-509"><a href="#L-509"><span class="linenos"> 509</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-510"><a href="#L-510"><span class="linenos"> 510</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-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="s2">&quot;COMPOUND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMPOUND</span><span class="p">,</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</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-513"><a href="#L-513"><span class="linenos"> 513</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-514"><a href="#L-514"><span class="linenos"> 514</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-515"><a href="#L-515"><span class="linenos"> 515</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-516"><a href="#L-516"><span class="linenos"> 516</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-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</span><span class="p">,</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</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-519"><a href="#L-519"><span class="linenos"> 519</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-520"><a href="#L-520"><span class="linenos"> 520</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-521"><a href="#L-521"><span class="linenos"> 521</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-522"><a href="#L-522"><span class="linenos"> 522</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-523"><a href="#L-523"><span class="linenos"> 523</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-524"><a href="#L-524"><span class="linenos"> 524</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-525"><a href="#L-525"><span class="linenos"> 525</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-526"><a href="#L-526"><span class="linenos"> 526</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-527"><a href="#L-527"><span class="linenos"> 527</span></a> <span class="s2">&quot;DISTINCT FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT_FROM</span><span class="p">,</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</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-529"><a href="#L-529"><span class="linenos"> 529</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-530"><a href="#L-530"><span class="linenos"> 530</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-531"><a href="#L-531"><span class="linenos"> 531</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-532"><a href="#L-532"><span class="linenos"> 532</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-533"><a href="#L-533"><span class="linenos"> 533</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-534"><a href="#L-534"><span class="linenos"> 534</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-535"><a href="#L-535"><span class="linenos"> 535</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-536"><a href="#L-536"><span class="linenos"> 536</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-537"><a href="#L-537"><span class="linenos"> 537</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-538"><a href="#L-538"><span class="linenos"> 538</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-539"><a href="#L-539"><span class="linenos"> 539</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-540"><a href="#L-540"><span class="linenos"> 540</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-541"><a href="#L-541"><span class="linenos"> 541</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-542"><a href="#L-542"><span class="linenos"> 542</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-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="s2">&quot;FOLLOWING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</span><span class="p">,</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</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-545"><a href="#L-545"><span class="linenos"> 545</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-546"><a href="#L-546"><span class="linenos"> 546</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-547"><a href="#L-547"><span class="linenos"> 547</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-548"><a href="#L-548"><span class="linenos"> 548</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-549"><a href="#L-549"><span class="linenos"> 549</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-550"><a href="#L-550"><span class="linenos"> 550</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-551"><a href="#L-551"><span class="linenos"> 551</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-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IF</span><span class="p">,</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</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-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">,</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</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-556"><a href="#L-556"><span class="linenos"> 556</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-557"><a href="#L-557"><span class="linenos"> 557</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-558"><a href="#L-558"><span class="linenos"> 558</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-559"><a href="#L-559"><span class="linenos"> 559</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-560"><a href="#L-560"><span class="linenos"> 560</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-561"><a href="#L-561"><span class="linenos"> 561</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-562"><a href="#L-562"><span class="linenos"> 562</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-563"><a href="#L-563"><span class="linenos"> 563</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-564"><a href="#L-564"><span class="linenos"> 564</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-565"><a href="#L-565"><span class="linenos"> 565</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-566"><a href="#L-566"><span class="linenos"> 566</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-567"><a href="#L-567"><span class="linenos"> 567</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-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="s2">&quot;LAZY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
+</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</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-571"><a href="#L-571"><span class="linenos"> 571</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-572"><a href="#L-572"><span class="linenos"> 572</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-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="s2">&quot;LOAD DATA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</span><span class="p">,</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</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-577"><a href="#L-577"><span class="linenos"> 577</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-578"><a href="#L-578"><span class="linenos"> 578</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-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="s2">&quot;NEXT VALUE FOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT_VALUE_FOR</span><span class="p">,</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="s2">&quot;NO ACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">,</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</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-582"><a href="#L-582"><span class="linenos"> 582</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-583"><a href="#L-583"><span class="linenos"> 583</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-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="s2">&quot;NULLS FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">,</span>
+</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;NULLS LAST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">,</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</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-587"><a href="#L-587"><span class="linenos"> 587</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-588"><a href="#L-588"><span class="linenos"> 588</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-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="s2">&quot;ONLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</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-592"><a href="#L-592"><span class="linenos"> 592</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-593"><a href="#L-593"><span class="linenos"> 593</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-594"><a href="#L-594"><span class="linenos"> 594</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-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="s2">&quot;OUT OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUT_OF</span><span class="p">,</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</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-597"><a href="#L-597"><span class="linenos"> 597</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-598"><a href="#L-598"><span class="linenos"> 598</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-599"><a href="#L-599"><span class="linenos"> 599</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-600"><a href="#L-600"><span class="linenos"> 600</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-601"><a href="#L-601"><span class="linenos"> 601</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-602"><a href="#L-602"><span class="linenos"> 602</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-603"><a href="#L-603"><span class="linenos"> 603</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-604"><a href="#L-604"><span class="linenos"> 604</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-605"><a href="#L-605"><span class="linenos"> 605</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-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</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-608"><a href="#L-608"><span class="linenos"> 608</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-609"><a href="#L-609"><span class="linenos"> 609</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-610"><a href="#L-610"><span class="linenos"> 610</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-611"><a href="#L-611"><span class="linenos"> 611</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-612"><a href="#L-612"><span class="linenos"> 612</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-613"><a href="#L-613"><span class="linenos"> 613</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-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RESPECT_NULLS</span><span class="p">,</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</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-616"><a href="#L-616"><span class="linenos"> 616</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-617"><a href="#L-617"><span class="linenos"> 617</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-618"><a href="#L-618"><span class="linenos"> 618</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-619"><a href="#L-619"><span class="linenos"> 619</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-620"><a href="#L-620"><span class="linenos"> 620</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-621"><a href="#L-621"><span class="linenos"> 621</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-622"><a href="#L-622"><span class="linenos"> 622</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-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="s2">&quot;SEED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
+</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</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-625"><a href="#L-625"><span class="linenos"> 625</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-626"><a href="#L-626"><span class="linenos"> 626</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-627"><a href="#L-627"><span class="linenos"> 627</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-628"><a href="#L-628"><span class="linenos"> 628</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-629"><a href="#L-629"><span class="linenos"> 629</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-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</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-632"><a href="#L-632"><span class="linenos"> 632</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-633"><a href="#L-633"><span class="linenos"> 633</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-634"><a href="#L-634"><span class="linenos"> 634</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-635"><a href="#L-635"><span class="linenos"> 635</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-636"><a href="#L-636"><span class="linenos"> 636</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-637"><a href="#L-637"><span class="linenos"> 637</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-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
+</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
+</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</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-641"><a href="#L-641"><span class="linenos"> 641</span></a> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</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-643"><a href="#L-643"><span class="linenos"> 643</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-644"><a href="#L-644"><span class="linenos"> 644</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-645"><a href="#L-645"><span class="linenos"> 645</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-646"><a href="#L-646"><span class="linenos"> 646</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-647"><a href="#L-647"><span class="linenos"> 647</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-648"><a href="#L-648"><span class="linenos"> 648</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-649"><a href="#L-649"><span class="linenos"> 649</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-650"><a href="#L-650"><span class="linenos"> 650</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-651"><a href="#L-651"><span class="linenos"> 651</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-652"><a href="#L-652"><span class="linenos"> 652</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-653"><a href="#L-653"><span class="linenos"> 653</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-654"><a href="#L-654"><span class="linenos"> 654</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-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;WITH TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_TIME_ZONE</span><span class="p">,</span>
+</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;WITH LOCAL TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_LOCAL_TIME_ZONE</span><span class="p">,</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;WITHIN GROUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">,</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;WITHOUT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHOUT_TIME_ZONE</span><span class="p">,</span>
+</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</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-660"><a href="#L-660"><span class="linenos"> 660</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-661"><a href="#L-661"><span class="linenos"> 661</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-662"><a href="#L-662"><span class="linenos"> 662</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-663"><a href="#L-663"><span class="linenos"> 663</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-664"><a href="#L-664"><span class="linenos"> 664</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-665"><a href="#L-665"><span class="linenos"> 665</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-666"><a href="#L-666"><span class="linenos"> 666</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-667"><a href="#L-667"><span class="linenos"> 667</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-668"><a href="#L-668"><span class="linenos"> 668</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-669"><a href="#L-669"><span class="linenos"> 669</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-670"><a href="#L-670"><span class="linenos"> 670</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-671"><a href="#L-671"><span class="linenos"> 671</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-672"><a href="#L-672"><span class="linenos"> 672</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-673"><a href="#L-673"><span class="linenos"> 673</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-674"><a href="#L-674"><span class="linenos"> 674</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">BIGINT</span><span class="p">,</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</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-676"><a href="#L-676"><span class="linenos"> 676</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-677"><a href="#L-677"><span class="linenos"> 677</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-678"><a href="#L-678"><span class="linenos"> 678</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-679"><a href="#L-679"><span class="linenos"> 679</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-680"><a href="#L-680"><span class="linenos"> 680</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-681"><a href="#L-681"><span class="linenos"> 681</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-682"><a href="#L-682"><span class="linenos"> 682</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-683"><a href="#L-683"><span class="linenos"> 683</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-684"><a href="#L-684"><span class="linenos"> 684</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-685"><a href="#L-685"><span class="linenos"> 685</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-686"><a href="#L-686"><span class="linenos"> 686</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-687"><a href="#L-687"><span class="linenos"> 687</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-688"><a href="#L-688"><span class="linenos"> 688</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-689"><a href="#L-689"><span class="linenos"> 689</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-690"><a href="#L-690"><span class="linenos"> 690</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-691"><a href="#L-691"><span class="linenos"> 691</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-692"><a href="#L-692"><span class="linenos"> 692</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-693"><a href="#L-693"><span class="linenos"> 693</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-694"><a href="#L-694"><span class="linenos"> 694</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-695"><a href="#L-695"><span class="linenos"> 695</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-696"><a href="#L-696"><span class="linenos"> 696</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-697"><a href="#L-697"><span class="linenos"> 697</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-698"><a href="#L-698"><span class="linenos"> 698</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-699"><a href="#L-699"><span class="linenos"> 699</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-700"><a href="#L-700"><span class="linenos"> 700</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-701"><a href="#L-701"><span class="linenos"> 701</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-702"><a href="#L-702"><span class="linenos"> 702</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-703"><a href="#L-703"><span class="linenos"> 703</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-704"><a href="#L-704"><span class="linenos"> 704</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-705"><a href="#L-705"><span class="linenos"> 705</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-706"><a href="#L-706"><span class="linenos"> 706</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-707"><a href="#L-707"><span class="linenos"> 707</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-708"><a href="#L-708"><span class="linenos"> 708</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-709"><a href="#L-709"><span class="linenos"> 709</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-710"><a href="#L-710"><span class="linenos"> 710</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-711"><a href="#L-711"><span class="linenos"> 711</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-712"><a href="#L-712"><span class="linenos"> 712</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-713"><a href="#L-713"><span class="linenos"> 713</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-714"><a href="#L-714"><span class="linenos"> 714</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-715"><a href="#L-715"><span class="linenos"> 715</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-716"><a href="#L-716"><span class="linenos"> 716</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-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;ALTER AGGREGATE&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-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;ALTER DEFAULT&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-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;ALTER DOMAIN&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-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;ALTER ROLE&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-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;ALTER RULE&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-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;ALTER SEQUENCE&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-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;ALTER TYPE&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-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;ALTER USER&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-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;ALTER VIEW&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-726"><a href="#L-726"><span class="linenos"> 726</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-727"><a href="#L-727"><span class="linenos"> 727</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-728"><a href="#L-728"><span class="linenos"> 728</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-729"><a href="#L-729"><span class="linenos"> 729</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-730"><a href="#L-730"><span class="linenos"> 730</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-731"><a href="#L-731"><span class="linenos"> 731</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-732"><a href="#L-732"><span class="linenos"> 732</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-733"><a href="#L-733"><span class="linenos"> 733</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-734"><a href="#L-734"><span class="linenos"> 734</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-735"><a href="#L-735"><span class="linenos"> 735</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-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="p">}</span>
+</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a>
+</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</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-739"><a href="#L-739"><span class="linenos"> 739</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-740"><a href="#L-740"><span class="linenos"> 740</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-741"><a href="#L-741"><span class="linenos"> 741</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-742"><a href="#L-742"><span class="linenos"> 742</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-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="s2">&quot;</span><span class="se">\r\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-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="p">}</span>
+</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a>
+</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="p">}</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="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-754"><a href="#L-754"><span class="linenos"> 754</span></a>
-</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</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 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-756"><a href="#L-756"><span class="linenos"> 756</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 class="c1"># autofilled</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
-</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
-</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
-</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
-</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
-</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;_prev_token_comments&quot;</span><span class="p">,</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;_prev_token_type&quot;</span><span class="p">,</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="p">)</span>
-</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a>
-</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a>
-</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</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-781"><a href="#L-781"><span class="linenos"> 781</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-782"><a href="#L-782"><span class="linenos"> 782</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-783"><a href="#L-783"><span class="linenos"> 783</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-784"><a href="#L-784"><span class="linenos"> 784</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-785"><a href="#L-785"><span class="linenos"> 785</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-786"><a href="#L-786"><span class="linenos"> 786</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-787"><a href="#L-787"><span class="linenos"> 787</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-788"><a href="#L-788"><span class="linenos"> 788</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-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="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-791"><a href="#L-791"><span class="linenos"> 791</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-792"><a href="#L-792"><span class="linenos"> 792</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-793"><a href="#L-793"><span class="linenos"> 793</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-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a>
-</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</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-798"><a href="#L-798"><span class="linenos"> 798</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-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</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-801"><a href="#L-801"><span class="linenos"> 801</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-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
-</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</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-805"><a href="#L-805"><span class="linenos"> 805</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">50</span>
-</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</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">50</span>
-</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">end</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="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</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-810"><a href="#L-810"><span class="linenos"> 810</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;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-811"><a href="#L-811"><span class="linenos"> 811</span></a>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</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-813"><a href="#L-813"><span class="linenos"> 813</span></a>
-</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</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-815"><a href="#L-815"><span class="linenos"> 815</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-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="bp">self</span><span class="o">.</span><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-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a>
-</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</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-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="k">break</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="k">if</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">WHITE_SPACE</span><span class="p">:</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</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-824"><a href="#L-824"><span class="linenos"> 824</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-825"><a href="#L-825"><span class="linenos"> 825</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-826"><a href="#L-826"><span class="linenos"> 826</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-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="k">else</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="o">.</span><span class="n">_scan_keywords</span><span class="p">()</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">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-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="k">break</span>
-</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a>
-</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</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-835"><a href="#L-835"><span class="linenos"> 835</span></a>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</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-837"><a href="#L-837"><span class="linenos"> 837</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-838"><a href="#L-838"><span class="linenos"> 838</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-839"><a href="#L-839"><span class="linenos"> 839</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-840"><a href="#L-840"><span class="linenos"> 840</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-841"><a href="#L-841"><span class="linenos"> 841</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-842"><a href="#L-842"><span class="linenos"> 842</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><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">return</span> <span class="s2">&quot;&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">_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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</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-847"><a href="#L-847"><span class="linenos"> 847</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-848"><a href="#L-848"><span class="linenos"> 848</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-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</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-851"><a href="#L-851"><span class="linenos"> 851</span></a>
-</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</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-853"><a href="#L-853"><span class="linenos"> 853</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-854"><a href="#L-854"><span class="linenos"> 854</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-855"><a href="#L-855"><span class="linenos"> 855</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-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="nd">@property</span>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</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-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="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-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
+</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</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-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">ENCODE</span><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-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="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 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-760"><a href="#L-760"><span class="linenos"> 760</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 class="c1"># autofilled</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="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</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="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
+</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
+</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
+</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
+</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
+</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
+</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;_prev_token_comments&quot;</span><span class="p">,</span>
+</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;_prev_token_type&quot;</span><span class="p">,</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a> <span class="p">)</span>
+</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a>
+</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a>
+</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</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-785"><a href="#L-785"><span class="linenos"> 785</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-786"><a href="#L-786"><span class="linenos"> 786</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-787"><a href="#L-787"><span class="linenos"> 787</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-788"><a href="#L-788"><span class="linenos"> 788</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-789"><a href="#L-789"><span class="linenos"> 789</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-790"><a href="#L-790"><span class="linenos"> 790</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-791"><a href="#L-791"><span class="linenos"> 791</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-792"><a href="#L-792"><span class="linenos"> 792</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-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="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-795"><a href="#L-795"><span class="linenos"> 795</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-796"><a href="#L-796"><span class="linenos"> 796</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-797"><a href="#L-797"><span class="linenos"> 797</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-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a>
+</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</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-802"><a href="#L-802"><span class="linenos"> 802</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-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</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-805"><a href="#L-805"><span class="linenos"> 805</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-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
+</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</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-809"><a href="#L-809"><span class="linenos"> 809</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">50</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</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">50</span>
+</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
+</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">end</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="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</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-814"><a href="#L-814"><span class="linenos"> 814</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;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-815"><a href="#L-815"><span class="linenos"> 815</span></a>
+</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</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-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="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-819"><a href="#L-819"><span class="linenos"> 819</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-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="bp">self</span><span class="o">.</span><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-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</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">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-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="k">break</span>
+</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a>
+</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="k">if</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">WHITE_SPACE</span><span class="p">:</span>
+</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</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-828"><a href="#L-828"><span class="linenos"> 828</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-829"><a href="#L-829"><span class="linenos"> 829</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-830"><a href="#L-830"><span class="linenos"> 830</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-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</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-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">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-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="k">break</span>
+</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a>
+</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
+</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</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-839"><a href="#L-839"><span class="linenos"> 839</span></a>
+</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</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-841"><a href="#L-841"><span class="linenos"> 841</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-842"><a href="#L-842"><span class="linenos"> 842</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-843"><a href="#L-843"><span class="linenos"> 843</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-844"><a href="#L-844"><span class="linenos"> 844</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-845"><a href="#L-845"><span class="linenos"> 845</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-846"><a href="#L-846"><span class="linenos"> 846</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><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</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-851"><a href="#L-851"><span class="linenos"> 851</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-852"><a href="#L-852"><span class="linenos"> 852</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-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</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-855"><a href="#L-855"><span class="linenos"> 855</span></a>
+</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</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-857"><a href="#L-857"><span class="linenos"> 857</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-858"><a href="#L-858"><span class="linenos"> 858</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-859"><a href="#L-859"><span class="linenos"> 859</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-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">_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-862"><a href="#L-862"><span class="linenos"> 862</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-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_type</span> <span class="o">=</span> <span class="n">token_type</span>
-</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</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-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="n">Token</span><span class="p">(</span>
-</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="n">token_type</span><span class="p">,</span>
-</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <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-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">,</span>
-</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</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="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <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="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-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
-</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</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-881"><a href="#L-881"><span class="linenos"> 881</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-882"><a href="#L-882"><span class="linenos"> 882</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-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="p">):</span>
-</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</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-885"><a href="#L-885"><span class="linenos"> 885</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-886"><a href="#L-886"><span class="linenos"> 886</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-887"><a href="#L-887"><span class="linenos"> 887</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-888"><a href="#L-888"><span class="linenos"> 888</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-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</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-891"><a href="#L-891"><span class="linenos"> 891</span></a>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</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-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</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-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</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-900"><a href="#L-900"><span class="linenos"> 900</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-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">while</span> <span class="n">chars</span><span class="p">:</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
-</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a> <span class="n">result</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</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-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="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="k">break</span>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</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="o">+</span> <span class="n">size</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="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-916"><a href="#L-916"><span class="linenos"> 916</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-917"><a href="#L-917"><span class="linenos"> 917</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-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="n">is_space</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">WHITE_SPACE</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="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-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
-</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">char</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="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
-</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a>
-</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">single_token</span> <span class="ow">and</span> <span class="n">chars</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span> <span class="k">else</span> <span class="n">word</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">if</span> <span class="ow">not</span> <span class="n">word</span><span class="p">:</span>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</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-935"><a href="#L-935"><span class="linenos"> 935</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-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="k">return</span>
-</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</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-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="k">return</span>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a>
-</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</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-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="k">return</span>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_formatted_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="k">return</span>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</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-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="nd">@property</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</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-863"><a href="#L-863"><span class="linenos"> 863</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-864"><a href="#L-864"><span class="linenos"> 864</span></a>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</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-866"><a href="#L-866"><span class="linenos"> 866</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-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_type</span> <span class="o">=</span> <span class="n">token_type</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</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-870"><a href="#L-870"><span class="linenos"> 870</span></a> <span class="n">Token</span><span class="p">(</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a> <span class="n">token_type</span><span class="p">,</span>
+</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <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-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
+</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
+</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">,</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</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="bp">self</span><span class="o">.</span><span class="n">_comments</span> <span class="o">=</span> <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="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-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
+</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</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-885"><a href="#L-885"><span class="linenos"> 885</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-886"><a href="#L-886"><span class="linenos"> 886</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-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="p">):</span>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</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-889"><a href="#L-889"><span class="linenos"> 889</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-890"><a href="#L-890"><span class="linenos"> 890</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-891"><a href="#L-891"><span class="linenos"> 891</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-892"><a href="#L-892"><span class="linenos"> 892</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-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</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-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="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-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</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-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</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-904"><a href="#L-904"><span class="linenos"> 904</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-905"><a href="#L-905"><span class="linenos"> 905</span></a>
+</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
+</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
+</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="n">result</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</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-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="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="k">break</span>
+</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="n">size</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="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="o">+</span> <span class="n">size</span>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</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-920"><a href="#L-920"><span class="linenos"> 920</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-921"><a href="#L-921"><span class="linenos"> 921</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-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">is_space</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">WHITE_SPACE</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="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-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
+</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="n">char</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="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
+</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">skip</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="k">else</span><span class="p">:</span>
+</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a>
+</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">single_token</span> <span class="ow">and</span> <span class="n">chars</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span> <span class="k">else</span> <span class="n">word</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="k">if</span> <span class="ow">not</span> <span class="n">word</span><span class="p">:</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</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-939"><a href="#L-939"><span class="linenos"> 939</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-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="k">return</span>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</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-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="k">return</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">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-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="k">return</span>
-</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a>
-</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</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-948"><a href="#L-948"><span class="linenos"> 948</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-949"><a href="#L-949"><span class="linenos"> 949</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-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_formatted_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="k">return</span>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</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-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="k">return</span>
</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</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-952"><a href="#L-952"><span class="linenos"> 952</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-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</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-952"><a href="#L-952"><span class="linenos"> 952</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-953"><a href="#L-953"><span class="linenos"> 953</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-954"><a href="#L-954"><span class="linenos"> 954</span></a>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</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-956"><a href="#L-956"><span class="linenos"> 956</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-957"><a href="#L-957"><span class="linenos"> 957</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-955"><a href="#L-955"><span class="linenos"> 955</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-956"><a href="#L-956"><span class="linenos"> 956</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-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
-</span><span id="L-961"><a href="#L-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">comment_start_size</span><span class="p">)</span>
+</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</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-960"><a href="#L-960"><span class="linenos"> 960</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-961"><a href="#L-961"><span class="linenos"> 961</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-962"><a href="#L-962"><span class="linenos"> 962</span></a>
-</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</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-964"><a href="#L-964"><span class="linenos"> 964</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-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</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-966"><a href="#L-966"><span class="linenos"> 966</span></a>
-</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">_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-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">comment_end_size</span> <span class="o">-</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 class="k">else</span><span class="p">:</span>
-</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</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="ow">not</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="n">TokenType</span><span class="o">.</span><span class="n">BREAK</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">_advance</span><span class="p">()</span>
-</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</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-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="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
-</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</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-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 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-979"><a href="#L-979"><span class="linenos"> 979</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-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">return</span> <span class="kc">True</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">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-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">_char</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span><span class="p">:</span>
-</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</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-986"><a href="#L-986"><span class="linenos"> 986</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-987"><a href="#L-987"><span class="linenos"> 987</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><span id="L-988"><a href="#L-988"><span class="linenos"> 988</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-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">_scan_hex</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="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</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">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</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-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</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-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</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-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="n">scientific</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 class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</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-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="n">scientific</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="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</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-1007"><a href="#L-1007"><span class="linenos">1007</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-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">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-1011"><a href="#L-1011"><span class="linenos">1011</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</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-968"><a href="#L-968"><span class="linenos"> 968</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-969"><a href="#L-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><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a>
+</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">_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-972"><a href="#L-972"><span class="linenos"> 972</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-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</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="ow">not</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="n">TokenType</span><span class="o">.</span><span class="n">BREAK</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">_advance</span><span class="p">()</span>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</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-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="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
+</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
+</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</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-981"><a href="#L-981"><span class="linenos"> 981</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-982"><a href="#L-982"><span class="linenos"> 982</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-983"><a href="#L-983"><span class="linenos"> 983</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-984"><a href="#L-984"><span class="linenos"> 984</span></a>
+</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="k">return</span> <span class="kc">True</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">_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-988"><a href="#L-988"><span class="linenos"> 988</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-989"><a href="#L-989"><span class="linenos"> 989</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-990"><a href="#L-990"><span class="linenos"> 990</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-991"><a href="#L-991"><span class="linenos"> 991</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><span id="L-992"><a href="#L-992"><span class="linenos"> 992</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-993"><a href="#L-993"><span class="linenos"> 993</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><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="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</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">while</span> <span class="kc">True</span><span class="p">:</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">_peek</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
+</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">_advance</span><span class="p">()</span>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</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-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</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">_advance</span><span class="p">()</span>
+</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</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-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</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">_advance</span><span class="p">()</span>
+</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</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-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</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">_advance</span><span class="p">()</span>
+</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</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-1011"><a href="#L-1011"><span class="linenos">1011</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-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="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="p">))</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</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-1018"><a href="#L-1018"><span class="linenos">1018</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-1019"><a href="#L-1019"><span class="linenos">1019</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-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span><span class="p">:</span>
-</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</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-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="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-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="k">return</span> <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-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="k">else</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">_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-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">_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-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</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-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</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-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">_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-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</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-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
-</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</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-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 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-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</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-1047"><a href="#L-1047"><span class="linenos">1047</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-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="p">:</span>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="k">break</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="bp">self</span><span class="o">.</span><span class="n">_text</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="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">quote</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-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">quote</span><span class="p">)</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="k">if</span> <span class="n">quote_end</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a>
-</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</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">quote</span><span class="p">))</span>
-</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</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">quote_end</span><span class="p">)</span>
-</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</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">NATIONAL</span> <span class="k">if</span> <span class="n">quote</span><span class="p">[</span><span class="mi">0</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;N&quot;</span> <span class="k">else</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-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="c1"># X&#39;1234, b&#39;0110&#39;, E&#39;\\\\\&#39; etc.</span>
-</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="k">def</span> <span class="nf">_scan_formatted_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string_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-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="k">if</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span><span class="p">:</span>
-</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <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><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
-</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span><span class="p">:</span>
-</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span>
-</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <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><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span><span class="p">:</span>
-</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span>
-</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</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">string_start</span><span class="p">))</span>
-</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="n">string_end</span> <span class="o">=</span> <span class="n">delimiters</span><span class="p">[</span><span class="n">string_start</span><span class="p">]</span>
-</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</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">string_end</span><span class="p">)</span>
+</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</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-1015"><a href="#L-1015"><span class="linenos">1015</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="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="p">))</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">if</span> <span class="n">token_type</span><span class="p">:</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">_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-1022"><a href="#L-1022"><span class="linenos">1022</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-1023"><a href="#L-1023"><span class="linenos">1023</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-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span><span class="p">:</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</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-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="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-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="k">return</span> <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-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="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-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="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-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</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-1035"><a href="#L-1035"><span class="linenos">1035</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
+</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="k">except</span> <span class="ne">ValueError</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">_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-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">_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-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</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-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
+</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="k">except</span> <span class="ne">ValueError</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">_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-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="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-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="k">while</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">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-1051"><a href="#L-1051"><span class="linenos">1051</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-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="k">break</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_text</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">def</span> <span class="nf">_scan_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">quote</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-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">quote</span><span class="p">)</span>
+</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="k">if</span> <span class="n">quote_end</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="k">return</span> <span class="kc">False</span>
+</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="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">quote</span><span class="p">))</span>
+</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</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">quote_end</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="n">text</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</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">NATIONAL</span> <span class="k">if</span> <span class="n">quote</span><span class="p">[</span><span class="mi">0</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;N&quot;</span> <span class="k">else</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-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="k">return</span> <span class="kc">True</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="c1"># X&#39;1234, b&#39;0110&#39;, E&#39;\\\\\&#39; etc.</span>
+</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="k">def</span> <span class="nf">_scan_formatted_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string_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-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="k">if</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span><span class="p">:</span>
+</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span>
+</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <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><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
+</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span><span class="p">:</span>
+</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span>
+</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <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><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span><span class="p">:</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span>
+</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a>
-</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="k">if</span> <span class="n">base</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</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-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">base</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="k">except</span><span class="p">:</span>
-</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</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-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="p">)</span>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="k">return</span> <span class="kc">True</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">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-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="n">text</span> <span class="o">=</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">identifier_end_is_escape</span> <span class="o">=</span> <span class="n">identifier_end</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span>
+</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</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">string_start</span><span class="p">))</span>
+</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="n">string_end</span> <span class="o">=</span> <span class="n">delimiters</span><span class="p">[</span><span class="n">string_start</span><span class="p">]</span>
+</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</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">string_end</span><span class="p">)</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="k">if</span> <span class="n">base</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</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-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">base</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="k">except</span><span class="p">:</span>
+</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
+</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</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-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="p">)</span>
+</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a>
+</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</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-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">identifier_end</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-1102"><a href="#L-1102"><span class="linenos">1102</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-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="n">text</span> <span class="o">=</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">identifier_end_is_escape</span> <span class="o">=</span> <span class="n">identifier_end</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</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="bp">self</span><span class="o">.</span><span class="n">_advance</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="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="n">identifier_end</span><span class="p">:</span>
-</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">if</span> <span class="n">identifier_end_is_escape</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="n">identifier_end</span><span class="p">:</span>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">identifier_end</span>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="k">continue</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="k">break</span>
-</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a>
-</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</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><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="k">while</span> <span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">identifier_end</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-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="bp">self</span><span class="o">.</span><span class="n">_advance</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">_char</span> <span class="o">==</span> <span class="n">identifier_end</span><span class="p">:</span>
+</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="k">if</span> <span class="n">identifier_end_is_escape</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="n">identifier_end</span><span class="p">:</span>
+</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">identifier_end</span>
+</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a> <span class="k">continue</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="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-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="k">break</span>
</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</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-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</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-1122"><a href="#L-1122"><span class="linenos">1122</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-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="k">break</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><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</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">_prev_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-1129"><a href="#L-1129"><span class="linenos">1129</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-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="p">)</span>
-</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</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-1119"><a href="#L-1119"><span class="linenos">1119</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><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="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-1122"><a href="#L-1122"><span class="linenos">1122</span></a>
+</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</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-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</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-1126"><a href="#L-1126"><span class="linenos">1126</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-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="k">break</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><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</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">_prev_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-1133"><a href="#L-1133"><span class="linenos">1133</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-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="p">)</span>
</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</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">_STRING_ESCAPES</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <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="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-1141"><a href="#L-1141"><span class="linenos">1141</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-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</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-1144"><a href="#L-1144"><span class="linenos">1144</span></a>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</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-1146"><a href="#L-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="mi">2</span><span class="p">)</span>
-</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</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-1151"><a href="#L-1151"><span class="linenos">1151</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-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">delim_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">break</span>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</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-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-1157"><a href="#L-1157"><span class="linenos">1157</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><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a>
-</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</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-1139"><a href="#L-1139"><span class="linenos">1139</span></a>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</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">_STRING_ESCAPES</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <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="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-1145"><a href="#L-1145"><span class="linenos">1145</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-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</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-1148"><a href="#L-1148"><span class="linenos">1148</span></a>
+</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</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-1150"><a href="#L-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="mi">2</span><span class="p">)</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-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">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-1155"><a href="#L-1155"><span class="linenos">1155</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-1156"><a href="#L-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">delim_size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="k">break</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-1161"><a href="#L-1161"><span class="linenos">1161</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><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">_advance</span><span class="p">()</span>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a>
+</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -2372,104 +2382,106 @@
</span><span id="TokenType-216"><a href="#TokenType-216"><span class="linenos">216</span></a> <span class="n">ISNULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="TokenType-217"><a href="#TokenType-217"><span class="linenos">217</span></a> <span class="n">JOIN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span><span id="TokenType-218"><a href="#TokenType-218"><span class="linenos">218</span></a> <span class="n">JOIN_MARKER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-219"><a href="#TokenType-219"><span class="linenos">219</span></a> <span class="n">LANGUAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-220"><a href="#TokenType-220"><span class="linenos">220</span></a> <span class="n">LATERAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-221"><a href="#TokenType-221"><span class="linenos">221</span></a> <span class="n">LAZY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-222"><a href="#TokenType-222"><span class="linenos">222</span></a> <span class="n">LEADING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-223"><a href="#TokenType-223"><span class="linenos">223</span></a> <span class="n">LEFT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-224"><a href="#TokenType-224"><span class="linenos">224</span></a> <span class="n">LIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-225"><a href="#TokenType-225"><span class="linenos">225</span></a> <span class="n">LIKE_ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-226"><a href="#TokenType-226"><span class="linenos">226</span></a> <span class="n">LIMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-227"><a href="#TokenType-227"><span class="linenos">227</span></a> <span class="n">LOAD_DATA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-228"><a href="#TokenType-228"><span class="linenos">228</span></a> <span class="n">LOCAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-229"><a href="#TokenType-229"><span class="linenos">229</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-230"><a href="#TokenType-230"><span class="linenos">230</span></a> <span class="n">MATCH_RECOGNIZE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-231"><a href="#TokenType-231"><span class="linenos">231</span></a> <span class="n">MATERIALIZED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-232"><a href="#TokenType-232"><span class="linenos">232</span></a> <span class="n">MERGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-233"><a href="#TokenType-233"><span class="linenos">233</span></a> <span class="n">MOD</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-234"><a href="#TokenType-234"><span class="linenos">234</span></a> <span class="n">NATURAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-235"><a href="#TokenType-235"><span class="linenos">235</span></a> <span class="n">NEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-236"><a href="#TokenType-236"><span class="linenos">236</span></a> <span class="n">NO_ACTION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-237"><a href="#TokenType-237"><span class="linenos">237</span></a> <span class="n">NOTNULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-238"><a href="#TokenType-238"><span class="linenos">238</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-239"><a href="#TokenType-239"><span class="linenos">239</span></a> <span class="n">NULLS_FIRST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-240"><a href="#TokenType-240"><span class="linenos">240</span></a> <span class="n">NULLS_LAST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-241"><a href="#TokenType-241"><span class="linenos">241</span></a> <span class="n">OFFSET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-242"><a href="#TokenType-242"><span class="linenos">242</span></a> <span class="n">ON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-243"><a href="#TokenType-243"><span class="linenos">243</span></a> <span class="n">ONLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-244"><a href="#TokenType-244"><span class="linenos">244</span></a> <span class="n">OPTIONS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-245"><a href="#TokenType-245"><span class="linenos">245</span></a> <span class="n">ORDER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-246"><a href="#TokenType-246"><span class="linenos">246</span></a> <span class="n">ORDERED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-247"><a href="#TokenType-247"><span class="linenos">247</span></a> <span class="n">ORDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-248"><a href="#TokenType-248"><span class="linenos">248</span></a> <span class="n">OUTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-249"><a href="#TokenType-249"><span class="linenos">249</span></a> <span class="n">OUT_OF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-250"><a href="#TokenType-250"><span class="linenos">250</span></a> <span class="n">OVER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-251"><a href="#TokenType-251"><span class="linenos">251</span></a> <span class="n">OVERLAPS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-252"><a href="#TokenType-252"><span class="linenos">252</span></a> <span class="n">OVERWRITE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-253"><a href="#TokenType-253"><span class="linenos">253</span></a> <span class="n">PARTITION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-254"><a href="#TokenType-254"><span class="linenos">254</span></a> <span class="n">PARTITION_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-255"><a href="#TokenType-255"><span class="linenos">255</span></a> <span class="n">PERCENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-256"><a href="#TokenType-256"><span class="linenos">256</span></a> <span class="n">PIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-257"><a href="#TokenType-257"><span class="linenos">257</span></a> <span class="n">PLACEHOLDER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-258"><a href="#TokenType-258"><span class="linenos">258</span></a> <span class="n">PRAGMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-259"><a href="#TokenType-259"><span class="linenos">259</span></a> <span class="n">PRECEDING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-260"><a href="#TokenType-260"><span class="linenos">260</span></a> <span class="n">PRIMARY_KEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-261"><a href="#TokenType-261"><span class="linenos">261</span></a> <span class="n">PROCEDURE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-262"><a href="#TokenType-262"><span class="linenos">262</span></a> <span class="n">PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-263"><a href="#TokenType-263"><span class="linenos">263</span></a> <span class="n">PSEUDO_TYPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-264"><a href="#TokenType-264"><span class="linenos">264</span></a> <span class="n">QUALIFY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-265"><a href="#TokenType-265"><span class="linenos">265</span></a> <span class="n">QUOTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-266"><a href="#TokenType-266"><span class="linenos">266</span></a> <span class="n">RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-267"><a href="#TokenType-267"><span class="linenos">267</span></a> <span class="n">RECURSIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-268"><a href="#TokenType-268"><span class="linenos">268</span></a> <span class="n">REPLACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-269"><a href="#TokenType-269"><span class="linenos">269</span></a> <span class="n">RESPECT_NULLS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-270"><a href="#TokenType-270"><span class="linenos">270</span></a> <span class="n">RETURNING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-271"><a href="#TokenType-271"><span class="linenos">271</span></a> <span class="n">REFERENCES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-272"><a href="#TokenType-272"><span class="linenos">272</span></a> <span class="n">RIGHT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-273"><a href="#TokenType-273"><span class="linenos">273</span></a> <span class="n">RLIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-274"><a href="#TokenType-274"><span class="linenos">274</span></a> <span class="n">ROLLBACK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-275"><a href="#TokenType-275"><span class="linenos">275</span></a> <span class="n">ROLLUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-276"><a href="#TokenType-276"><span class="linenos">276</span></a> <span class="n">ROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-277"><a href="#TokenType-277"><span class="linenos">277</span></a> <span class="n">ROWS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-278"><a href="#TokenType-278"><span class="linenos">278</span></a> <span class="n">SEED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-279"><a href="#TokenType-279"><span class="linenos">279</span></a> <span class="n">SELECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-280"><a href="#TokenType-280"><span class="linenos">280</span></a> <span class="n">SEMI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-281"><a href="#TokenType-281"><span class="linenos">281</span></a> <span class="n">SEPARATOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-282"><a href="#TokenType-282"><span class="linenos">282</span></a> <span class="n">SERDE_PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-283"><a href="#TokenType-283"><span class="linenos">283</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-284"><a href="#TokenType-284"><span class="linenos">284</span></a> <span class="n">SHOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-285"><a href="#TokenType-285"><span class="linenos">285</span></a> <span class="n">SIMILAR_TO</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-286"><a href="#TokenType-286"><span class="linenos">286</span></a> <span class="n">SOME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-287"><a href="#TokenType-287"><span class="linenos">287</span></a> <span class="n">SORTKEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-288"><a href="#TokenType-288"><span class="linenos">288</span></a> <span class="n">SORT_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-289"><a href="#TokenType-289"><span class="linenos">289</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-290"><a href="#TokenType-290"><span class="linenos">290</span></a> <span class="n">TABLE_SAMPLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-291"><a href="#TokenType-291"><span class="linenos">291</span></a> <span class="n">TEMPORARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-292"><a href="#TokenType-292"><span class="linenos">292</span></a> <span class="n">TOP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-293"><a href="#TokenType-293"><span class="linenos">293</span></a> <span class="n">THEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-294"><a href="#TokenType-294"><span class="linenos">294</span></a> <span class="n">TRAILING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-295"><a href="#TokenType-295"><span class="linenos">295</span></a> <span class="n">TRUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-296"><a href="#TokenType-296"><span class="linenos">296</span></a> <span class="n">UNBOUNDED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-297"><a href="#TokenType-297"><span class="linenos">297</span></a> <span class="n">UNCACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-298"><a href="#TokenType-298"><span class="linenos">298</span></a> <span class="n">UNION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-299"><a href="#TokenType-299"><span class="linenos">299</span></a> <span class="n">UNLOGGED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-300"><a href="#TokenType-300"><span class="linenos">300</span></a> <span class="n">UNNEST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-301"><a href="#TokenType-301"><span class="linenos">301</span></a> <span class="n">UNPIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-302"><a href="#TokenType-302"><span class="linenos">302</span></a> <span class="n">UPDATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-303"><a href="#TokenType-303"><span class="linenos">303</span></a> <span class="n">USE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-304"><a href="#TokenType-304"><span class="linenos">304</span></a> <span class="n">USING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-305"><a href="#TokenType-305"><span class="linenos">305</span></a> <span class="n">VALUES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-306"><a href="#TokenType-306"><span class="linenos">306</span></a> <span class="n">VIEW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-307"><a href="#TokenType-307"><span class="linenos">307</span></a> <span class="n">VOLATILE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-308"><a href="#TokenType-308"><span class="linenos">308</span></a> <span class="n">WHEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-309"><a href="#TokenType-309"><span class="linenos">309</span></a> <span class="n">WHERE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-310"><a href="#TokenType-310"><span class="linenos">310</span></a> <span class="n">WINDOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-311"><a href="#TokenType-311"><span class="linenos">311</span></a> <span class="n">WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-312"><a href="#TokenType-312"><span class="linenos">312</span></a> <span class="n">WITH_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-313"><a href="#TokenType-313"><span class="linenos">313</span></a> <span class="n">WITH_LOCAL_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-314"><a href="#TokenType-314"><span class="linenos">314</span></a> <span class="n">WITHIN_GROUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-315"><a href="#TokenType-315"><span class="linenos">315</span></a> <span class="n">WITHOUT_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
-</span><span id="TokenType-316"><a href="#TokenType-316"><span class="linenos">316</span></a> <span class="n">UNIQUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-219"><a href="#TokenType-219"><span class="linenos">219</span></a> <span class="n">KEEP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-220"><a href="#TokenType-220"><span class="linenos">220</span></a> <span class="n">LANGUAGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-221"><a href="#TokenType-221"><span class="linenos">221</span></a> <span class="n">LATERAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-222"><a href="#TokenType-222"><span class="linenos">222</span></a> <span class="n">LAZY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-223"><a href="#TokenType-223"><span class="linenos">223</span></a> <span class="n">LEADING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-224"><a href="#TokenType-224"><span class="linenos">224</span></a> <span class="n">LEFT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-225"><a href="#TokenType-225"><span class="linenos">225</span></a> <span class="n">LIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-226"><a href="#TokenType-226"><span class="linenos">226</span></a> <span class="n">LIKE_ANY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-227"><a href="#TokenType-227"><span class="linenos">227</span></a> <span class="n">LIMIT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-228"><a href="#TokenType-228"><span class="linenos">228</span></a> <span class="n">LOAD_DATA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-229"><a href="#TokenType-229"><span class="linenos">229</span></a> <span class="n">LOCAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-230"><a href="#TokenType-230"><span class="linenos">230</span></a> <span class="n">MAP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-231"><a href="#TokenType-231"><span class="linenos">231</span></a> <span class="n">MATCH_RECOGNIZE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-232"><a href="#TokenType-232"><span class="linenos">232</span></a> <span class="n">MATERIALIZED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-233"><a href="#TokenType-233"><span class="linenos">233</span></a> <span class="n">MERGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-234"><a href="#TokenType-234"><span class="linenos">234</span></a> <span class="n">MOD</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-235"><a href="#TokenType-235"><span class="linenos">235</span></a> <span class="n">NATURAL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-236"><a href="#TokenType-236"><span class="linenos">236</span></a> <span class="n">NEXT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-237"><a href="#TokenType-237"><span class="linenos">237</span></a> <span class="n">NEXT_VALUE_FOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-238"><a href="#TokenType-238"><span class="linenos">238</span></a> <span class="n">NO_ACTION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-239"><a href="#TokenType-239"><span class="linenos">239</span></a> <span class="n">NOTNULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-240"><a href="#TokenType-240"><span class="linenos">240</span></a> <span class="n">NULL</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-241"><a href="#TokenType-241"><span class="linenos">241</span></a> <span class="n">NULLS_FIRST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-242"><a href="#TokenType-242"><span class="linenos">242</span></a> <span class="n">NULLS_LAST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-243"><a href="#TokenType-243"><span class="linenos">243</span></a> <span class="n">OFFSET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-244"><a href="#TokenType-244"><span class="linenos">244</span></a> <span class="n">ON</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-245"><a href="#TokenType-245"><span class="linenos">245</span></a> <span class="n">ONLY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-246"><a href="#TokenType-246"><span class="linenos">246</span></a> <span class="n">OPTIONS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-247"><a href="#TokenType-247"><span class="linenos">247</span></a> <span class="n">ORDER_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-248"><a href="#TokenType-248"><span class="linenos">248</span></a> <span class="n">ORDERED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-249"><a href="#TokenType-249"><span class="linenos">249</span></a> <span class="n">ORDINALITY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-250"><a href="#TokenType-250"><span class="linenos">250</span></a> <span class="n">OUTER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-251"><a href="#TokenType-251"><span class="linenos">251</span></a> <span class="n">OUT_OF</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-252"><a href="#TokenType-252"><span class="linenos">252</span></a> <span class="n">OVER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-253"><a href="#TokenType-253"><span class="linenos">253</span></a> <span class="n">OVERLAPS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-254"><a href="#TokenType-254"><span class="linenos">254</span></a> <span class="n">OVERWRITE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-255"><a href="#TokenType-255"><span class="linenos">255</span></a> <span class="n">PARTITION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-256"><a href="#TokenType-256"><span class="linenos">256</span></a> <span class="n">PARTITION_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-257"><a href="#TokenType-257"><span class="linenos">257</span></a> <span class="n">PERCENT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-258"><a href="#TokenType-258"><span class="linenos">258</span></a> <span class="n">PIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-259"><a href="#TokenType-259"><span class="linenos">259</span></a> <span class="n">PLACEHOLDER</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-260"><a href="#TokenType-260"><span class="linenos">260</span></a> <span class="n">PRAGMA</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-261"><a href="#TokenType-261"><span class="linenos">261</span></a> <span class="n">PRECEDING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-262"><a href="#TokenType-262"><span class="linenos">262</span></a> <span class="n">PRIMARY_KEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-263"><a href="#TokenType-263"><span class="linenos">263</span></a> <span class="n">PROCEDURE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-264"><a href="#TokenType-264"><span class="linenos">264</span></a> <span class="n">PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-265"><a href="#TokenType-265"><span class="linenos">265</span></a> <span class="n">PSEUDO_TYPE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-266"><a href="#TokenType-266"><span class="linenos">266</span></a> <span class="n">QUALIFY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-267"><a href="#TokenType-267"><span class="linenos">267</span></a> <span class="n">QUOTE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-268"><a href="#TokenType-268"><span class="linenos">268</span></a> <span class="n">RANGE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-269"><a href="#TokenType-269"><span class="linenos">269</span></a> <span class="n">RECURSIVE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-270"><a href="#TokenType-270"><span class="linenos">270</span></a> <span class="n">REPLACE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-271"><a href="#TokenType-271"><span class="linenos">271</span></a> <span class="n">RESPECT_NULLS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-272"><a href="#TokenType-272"><span class="linenos">272</span></a> <span class="n">RETURNING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-273"><a href="#TokenType-273"><span class="linenos">273</span></a> <span class="n">REFERENCES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-274"><a href="#TokenType-274"><span class="linenos">274</span></a> <span class="n">RIGHT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-275"><a href="#TokenType-275"><span class="linenos">275</span></a> <span class="n">RLIKE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-276"><a href="#TokenType-276"><span class="linenos">276</span></a> <span class="n">ROLLBACK</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-277"><a href="#TokenType-277"><span class="linenos">277</span></a> <span class="n">ROLLUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-278"><a href="#TokenType-278"><span class="linenos">278</span></a> <span class="n">ROW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-279"><a href="#TokenType-279"><span class="linenos">279</span></a> <span class="n">ROWS</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-280"><a href="#TokenType-280"><span class="linenos">280</span></a> <span class="n">SEED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-281"><a href="#TokenType-281"><span class="linenos">281</span></a> <span class="n">SELECT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-282"><a href="#TokenType-282"><span class="linenos">282</span></a> <span class="n">SEMI</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-283"><a href="#TokenType-283"><span class="linenos">283</span></a> <span class="n">SEPARATOR</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-284"><a href="#TokenType-284"><span class="linenos">284</span></a> <span class="n">SERDE_PROPERTIES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-285"><a href="#TokenType-285"><span class="linenos">285</span></a> <span class="n">SET</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-286"><a href="#TokenType-286"><span class="linenos">286</span></a> <span class="n">SHOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-287"><a href="#TokenType-287"><span class="linenos">287</span></a> <span class="n">SIMILAR_TO</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-288"><a href="#TokenType-288"><span class="linenos">288</span></a> <span class="n">SOME</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-289"><a href="#TokenType-289"><span class="linenos">289</span></a> <span class="n">SORTKEY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-290"><a href="#TokenType-290"><span class="linenos">290</span></a> <span class="n">SORT_BY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-291"><a href="#TokenType-291"><span class="linenos">291</span></a> <span class="n">STRUCT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-292"><a href="#TokenType-292"><span class="linenos">292</span></a> <span class="n">TABLE_SAMPLE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-293"><a href="#TokenType-293"><span class="linenos">293</span></a> <span class="n">TEMPORARY</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-294"><a href="#TokenType-294"><span class="linenos">294</span></a> <span class="n">TOP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-295"><a href="#TokenType-295"><span class="linenos">295</span></a> <span class="n">THEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-296"><a href="#TokenType-296"><span class="linenos">296</span></a> <span class="n">TRAILING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-297"><a href="#TokenType-297"><span class="linenos">297</span></a> <span class="n">TRUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-298"><a href="#TokenType-298"><span class="linenos">298</span></a> <span class="n">UNBOUNDED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-299"><a href="#TokenType-299"><span class="linenos">299</span></a> <span class="n">UNCACHE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-300"><a href="#TokenType-300"><span class="linenos">300</span></a> <span class="n">UNION</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-301"><a href="#TokenType-301"><span class="linenos">301</span></a> <span class="n">UNLOGGED</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-302"><a href="#TokenType-302"><span class="linenos">302</span></a> <span class="n">UNNEST</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-303"><a href="#TokenType-303"><span class="linenos">303</span></a> <span class="n">UNPIVOT</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-304"><a href="#TokenType-304"><span class="linenos">304</span></a> <span class="n">UPDATE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-305"><a href="#TokenType-305"><span class="linenos">305</span></a> <span class="n">USE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-306"><a href="#TokenType-306"><span class="linenos">306</span></a> <span class="n">USING</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-307"><a href="#TokenType-307"><span class="linenos">307</span></a> <span class="n">VALUES</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-308"><a href="#TokenType-308"><span class="linenos">308</span></a> <span class="n">VIEW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-309"><a href="#TokenType-309"><span class="linenos">309</span></a> <span class="n">VOLATILE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-310"><a href="#TokenType-310"><span class="linenos">310</span></a> <span class="n">WHEN</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-311"><a href="#TokenType-311"><span class="linenos">311</span></a> <span class="n">WHERE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-312"><a href="#TokenType-312"><span class="linenos">312</span></a> <span class="n">WINDOW</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-313"><a href="#TokenType-313"><span class="linenos">313</span></a> <span class="n">WITH</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-314"><a href="#TokenType-314"><span class="linenos">314</span></a> <span class="n">WITH_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-315"><a href="#TokenType-315"><span class="linenos">315</span></a> <span class="n">WITH_LOCAL_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-316"><a href="#TokenType-316"><span class="linenos">316</span></a> <span class="n">WITHIN_GROUP</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-317"><a href="#TokenType-317"><span class="linenos">317</span></a> <span class="n">WITHOUT_TIME_ZONE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
+</span><span id="TokenType-318"><a href="#TokenType-318"><span class="linenos">318</span></a> <span class="n">UNIQUE</span> <span class="o">=</span> <span class="n">auto</span><span class="p">()</span>
</span></pre></div>
@@ -4877,6 +4889,18 @@
</div>
+ <div id="TokenType.KEEP" class="classattr">
+ <div class="attr variable">
+ <span class="name">KEEP</span> =
+<span class="default_value">&lt;<a href="#TokenType.KEEP">TokenType.KEEP</a>: &#39;KEEP&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.KEEP"></a>
+
+
+
+ </div>
<div id="TokenType.LANGUAGE" class="classattr">
<div class="attr variable">
<span class="name">LANGUAGE</span> =
@@ -5081,6 +5105,18 @@
</div>
+ <div id="TokenType.NEXT_VALUE_FOR" class="classattr">
+ <div class="attr variable">
+ <span class="name">NEXT_VALUE_FOR</span> =
+<span class="default_value">&lt;<a href="#TokenType.NEXT_VALUE_FOR">TokenType.NEXT_VALUE_FOR</a>: &#39;NEXT_VALUE_FOR&#39;&gt;</span>
+
+
+ </div>
+ <a class="headerlink" href="#TokenType.NEXT_VALUE_FOR"></a>
+
+
+
+ </div>
<div id="TokenType.NO_ACTION" class="classattr">
<div class="attr variable">
<span class="name">NO_ACTION</span> =
@@ -6075,54 +6111,54 @@
</div>
<a class="headerlink" href="#Token"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Token-319"><a href="#Token-319"><span class="linenos">319</span></a><span class="k">class</span> <span class="nc">Token</span><span class="p">:</span>
-</span><span id="Token-320"><a href="#Token-320"><span class="linenos">320</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;token_type&quot;</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">,</span> <span class="s2">&quot;comments&quot;</span><span class="p">)</span>
-</span><span id="Token-321"><a href="#Token-321"><span class="linenos">321</span></a>
-</span><span id="Token-322"><a href="#Token-322"><span class="linenos">322</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token-323"><a href="#Token-323"><span class="linenos">323</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token-324"><a href="#Token-324"><span class="linenos">324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a NUMBER token with `number` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token-325"><a href="#Token-325"><span class="linenos">325</span></a> <span class="k">return</span> <span class="bp">cls</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="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">))</span>
-</span><span id="Token-326"><a href="#Token-326"><span class="linenos">326</span></a>
-</span><span id="Token-327"><a href="#Token-327"><span class="linenos">327</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token-328"><a href="#Token-328"><span class="linenos">328</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token-329"><a href="#Token-329"><span class="linenos">329</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a STRING token with `string` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token-330"><a href="#Token-330"><span class="linenos">330</span></a> <span class="k">return</span> <span class="bp">cls</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">string</span><span class="p">)</span>
-</span><span id="Token-331"><a href="#Token-331"><span class="linenos">331</span></a>
-</span><span id="Token-332"><a href="#Token-332"><span class="linenos">332</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token-333"><a href="#Token-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token-334"><a href="#Token-334"><span class="linenos">334</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an IDENTIFIER token with `identifier` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token-335"><a href="#Token-335"><span class="linenos">335</span></a> <span class="k">return</span> <span class="bp">cls</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">identifier</span><span class="p">)</span>
-</span><span id="Token-336"><a href="#Token-336"><span class="linenos">336</span></a>
-</span><span id="Token-337"><a href="#Token-337"><span class="linenos">337</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token-338"><a href="#Token-338"><span class="linenos">338</span></a> <span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">var</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token-339"><a href="#Token-339"><span class="linenos">339</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an VAR token with `var` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token-340"><a href="#Token-340"><span class="linenos">340</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">var</span><span class="p">)</span>
-</span><span id="Token-341"><a href="#Token-341"><span class="linenos">341</span></a>
-</span><span id="Token-342"><a href="#Token-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Token-343"><a href="#Token-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Token-344"><a href="#Token-344"><span class="linenos">344</span></a> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span>
-</span><span id="Token-345"><a href="#Token-345"><span class="linenos">345</span></a> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Token-346"><a href="#Token-346"><span class="linenos">346</span></a> <span class="n">line</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="Token-347"><a href="#Token-347"><span class="linenos">347</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="Token-348"><a href="#Token-348"><span class="linenos">348</span></a> <span class="n">end</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="Token-349"><a href="#Token-349"><span class="linenos">349</span></a> <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="Token-350"><a href="#Token-350"><span class="linenos">350</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Token-351"><a href="#Token-351"><span class="linenos">351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">token_type</span>
-</span><span id="Token-352"><a href="#Token-352"><span class="linenos">352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
-</span><span id="Token-353"><a href="#Token-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">line</span> <span class="o">=</span> <span class="n">line</span>
-</span><span id="Token-354"><a href="#Token-354"><span class="linenos">354</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Token-355"><a href="#Token-355"><span class="linenos">355</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="Token-356"><a href="#Token-356"><span class="linenos">356</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 class="k">if</span> <span class="n">end</span> <span class="k">else</span> <span class="n">size</span>
-</span><span id="Token-357"><a href="#Token-357"><span class="linenos">357</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="Token-358"><a href="#Token-358"><span class="linenos">358</span></a>
-</span><span id="Token-359"><a href="#Token-359"><span class="linenos">359</span></a> <span class="nd">@property</span>
-</span><span id="Token-360"><a href="#Token-360"><span class="linenos">360</span></a> <span class="k">def</span> <span class="nf">start</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="Token-361"><a href="#Token-361"><span class="linenos">361</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the start of the token.&quot;&quot;&quot;</span>
-</span><span id="Token-362"><a href="#Token-362"><span class="linenos">362</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</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">text</span><span class="p">)</span>
-</span><span id="Token-363"><a href="#Token-363"><span class="linenos">363</span></a>
-</span><span id="Token-364"><a href="#Token-364"><span class="linenos">364</span></a> <span class="k">def</span> <span class="fm">__repr__</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="Token-365"><a href="#Token-365"><span class="linenos">365</span></a> <span class="n">attributes</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">k</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">k</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__slots__</span><span class="p">)</span>
-</span><span id="Token-366"><a href="#Token-366"><span class="linenos">366</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Token </span><span class="si">{</span><span class="n">attributes</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Token-321"><a href="#Token-321"><span class="linenos">321</span></a><span class="k">class</span> <span class="nc">Token</span><span class="p">:</span>
+</span><span id="Token-322"><a href="#Token-322"><span class="linenos">322</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;token_type&quot;</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">,</span> <span class="s2">&quot;end&quot;</span><span class="p">,</span> <span class="s2">&quot;comments&quot;</span><span class="p">)</span>
+</span><span id="Token-323"><a href="#Token-323"><span class="linenos">323</span></a>
+</span><span id="Token-324"><a href="#Token-324"><span class="linenos">324</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-325"><a href="#Token-325"><span class="linenos">325</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token-326"><a href="#Token-326"><span class="linenos">326</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a NUMBER token with `number` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token-327"><a href="#Token-327"><span class="linenos">327</span></a> <span class="k">return</span> <span class="bp">cls</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="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">))</span>
+</span><span id="Token-328"><a href="#Token-328"><span class="linenos">328</span></a>
+</span><span id="Token-329"><a href="#Token-329"><span class="linenos">329</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-330"><a href="#Token-330"><span class="linenos">330</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token-331"><a href="#Token-331"><span class="linenos">331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a STRING token with `string` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token-332"><a href="#Token-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="bp">cls</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">string</span><span class="p">)</span>
+</span><span id="Token-333"><a href="#Token-333"><span class="linenos">333</span></a>
+</span><span id="Token-334"><a href="#Token-334"><span class="linenos">334</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-335"><a href="#Token-335"><span class="linenos">335</span></a> <span class="k">def</span> <span class="nf">identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token-336"><a href="#Token-336"><span class="linenos">336</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an IDENTIFIER token with `identifier` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token-337"><a href="#Token-337"><span class="linenos">337</span></a> <span class="k">return</span> <span class="bp">cls</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">identifier</span><span class="p">)</span>
+</span><span id="Token-338"><a href="#Token-338"><span class="linenos">338</span></a>
+</span><span id="Token-339"><a href="#Token-339"><span class="linenos">339</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token-340"><a href="#Token-340"><span class="linenos">340</span></a> <span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">var</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token-341"><a href="#Token-341"><span class="linenos">341</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an VAR token with `var` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token-342"><a href="#Token-342"><span class="linenos">342</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">var</span><span class="p">)</span>
+</span><span id="Token-343"><a href="#Token-343"><span class="linenos">343</span></a>
+</span><span id="Token-344"><a href="#Token-344"><span class="linenos">344</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Token-345"><a href="#Token-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Token-346"><a href="#Token-346"><span class="linenos">346</span></a> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span>
+</span><span id="Token-347"><a href="#Token-347"><span class="linenos">347</span></a> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Token-348"><a href="#Token-348"><span class="linenos">348</span></a> <span class="n">line</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="Token-349"><a href="#Token-349"><span class="linenos">349</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="Token-350"><a href="#Token-350"><span class="linenos">350</span></a> <span class="n">end</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="Token-351"><a href="#Token-351"><span class="linenos">351</span></a> <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="Token-352"><a href="#Token-352"><span class="linenos">352</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Token-353"><a href="#Token-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">token_type</span>
+</span><span id="Token-354"><a href="#Token-354"><span class="linenos">354</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
+</span><span id="Token-355"><a href="#Token-355"><span class="linenos">355</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">line</span> <span class="o">=</span> <span class="n">line</span>
+</span><span id="Token-356"><a href="#Token-356"><span class="linenos">356</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Token-357"><a href="#Token-357"><span class="linenos">357</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="Token-358"><a href="#Token-358"><span class="linenos">358</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 class="k">if</span> <span class="n">end</span> <span class="k">else</span> <span class="n">size</span>
+</span><span id="Token-359"><a href="#Token-359"><span class="linenos">359</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="Token-360"><a href="#Token-360"><span class="linenos">360</span></a>
+</span><span id="Token-361"><a href="#Token-361"><span class="linenos">361</span></a> <span class="nd">@property</span>
+</span><span id="Token-362"><a href="#Token-362"><span class="linenos">362</span></a> <span class="k">def</span> <span class="nf">start</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="Token-363"><a href="#Token-363"><span class="linenos">363</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns the start of the token.&quot;&quot;&quot;</span>
+</span><span id="Token-364"><a href="#Token-364"><span class="linenos">364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</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">text</span><span class="p">)</span>
+</span><span id="Token-365"><a href="#Token-365"><span class="linenos">365</span></a>
+</span><span id="Token-366"><a href="#Token-366"><span class="linenos">366</span></a> <span class="k">def</span> <span class="fm">__repr__</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="Token-367"><a href="#Token-367"><span class="linenos">367</span></a> <span class="n">attributes</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">k</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">k</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__slots__</span><span class="p">)</span>
+</span><span id="Token-368"><a href="#Token-368"><span class="linenos">368</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;Token </span><span class="si">{</span><span class="n">attributes</span><span class="si">}</span><span class="s2">&gt;&quot;</span>
</span></pre></div>
@@ -6138,22 +6174,22 @@
</div>
<a class="headerlink" href="#Token.__init__"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Token.__init__-342"><a href="#Token.__init__-342"><span class="linenos">342</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
-</span><span id="Token.__init__-343"><a href="#Token.__init__-343"><span class="linenos">343</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Token.__init__-344"><a href="#Token.__init__-344"><span class="linenos">344</span></a> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span>
-</span><span id="Token.__init__-345"><a href="#Token.__init__-345"><span class="linenos">345</span></a> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="Token.__init__-346"><a href="#Token.__init__-346"><span class="linenos">346</span></a> <span class="n">line</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="Token.__init__-347"><a href="#Token.__init__-347"><span class="linenos">347</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
-</span><span id="Token.__init__-348"><a href="#Token.__init__-348"><span class="linenos">348</span></a> <span class="n">end</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="Token.__init__-349"><a href="#Token.__init__-349"><span class="linenos">349</span></a> <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="Token.__init__-350"><a href="#Token.__init__-350"><span class="linenos">350</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Token.__init__-351"><a href="#Token.__init__-351"><span class="linenos">351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">token_type</span>
-</span><span id="Token.__init__-352"><a href="#Token.__init__-352"><span class="linenos">352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
-</span><span id="Token.__init__-353"><a href="#Token.__init__-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">line</span> <span class="o">=</span> <span class="n">line</span>
-</span><span id="Token.__init__-354"><a href="#Token.__init__-354"><span class="linenos">354</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Token.__init__-355"><a href="#Token.__init__-355"><span class="linenos">355</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="Token.__init__-356"><a href="#Token.__init__-356"><span class="linenos">356</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 class="k">if</span> <span class="n">end</span> <span class="k">else</span> <span class="n">size</span>
-</span><span id="Token.__init__-357"><a href="#Token.__init__-357"><span class="linenos">357</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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Token.__init__-344"><a href="#Token.__init__-344"><span class="linenos">344</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
+</span><span id="Token.__init__-345"><a href="#Token.__init__-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Token.__init__-346"><a href="#Token.__init__-346"><span class="linenos">346</span></a> <span class="n">token_type</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span>
+</span><span id="Token.__init__-347"><a href="#Token.__init__-347"><span class="linenos">347</span></a> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="Token.__init__-348"><a href="#Token.__init__-348"><span class="linenos">348</span></a> <span class="n">line</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="Token.__init__-349"><a href="#Token.__init__-349"><span class="linenos">349</span></a> <span class="n">col</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+</span><span id="Token.__init__-350"><a href="#Token.__init__-350"><span class="linenos">350</span></a> <span class="n">end</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="Token.__init__-351"><a href="#Token.__init__-351"><span class="linenos">351</span></a> <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="Token.__init__-352"><a href="#Token.__init__-352"><span class="linenos">352</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Token.__init__-353"><a href="#Token.__init__-353"><span class="linenos">353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">token_type</span> <span class="o">=</span> <span class="n">token_type</span>
+</span><span id="Token.__init__-354"><a href="#Token.__init__-354"><span class="linenos">354</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
+</span><span id="Token.__init__-355"><a href="#Token.__init__-355"><span class="linenos">355</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">line</span> <span class="o">=</span> <span class="n">line</span>
+</span><span id="Token.__init__-356"><a href="#Token.__init__-356"><span class="linenos">356</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Token.__init__-357"><a href="#Token.__init__-357"><span class="linenos">357</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="Token.__init__-358"><a href="#Token.__init__-358"><span class="linenos">358</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 class="k">if</span> <span class="n">end</span> <span class="k">else</span> <span class="n">size</span>
+</span><span id="Token.__init__-359"><a href="#Token.__init__-359"><span class="linenos">359</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></pre></div>
@@ -6172,10 +6208,10 @@
</div>
<a class="headerlink" href="#Token.number"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Token.number-322"><a href="#Token.number-322"><span class="linenos">322</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token.number-323"><a href="#Token.number-323"><span class="linenos">323</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token.number-324"><a href="#Token.number-324"><span class="linenos">324</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a NUMBER token with `number` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token.number-325"><a href="#Token.number-325"><span class="linenos">325</span></a> <span class="k">return</span> <span class="bp">cls</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="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">))</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Token.number-324"><a href="#Token.number-324"><span class="linenos">324</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.number-325"><a href="#Token.number-325"><span class="linenos">325</span></a> <span class="k">def</span> <span class="nf">number</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">number</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token.number-326"><a href="#Token.number-326"><span class="linenos">326</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a NUMBER token with `number` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token.number-327"><a href="#Token.number-327"><span class="linenos">327</span></a> <span class="k">return</span> <span class="bp">cls</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="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">))</span>
</span></pre></div>
@@ -6196,10 +6232,10 @@
</div>
<a class="headerlink" href="#Token.string"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Token.string-327"><a href="#Token.string-327"><span class="linenos">327</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token.string-328"><a href="#Token.string-328"><span class="linenos">328</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token.string-329"><a href="#Token.string-329"><span class="linenos">329</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a STRING token with `string` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token.string-330"><a href="#Token.string-330"><span class="linenos">330</span></a> <span class="k">return</span> <span class="bp">cls</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">string</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Token.string-329"><a href="#Token.string-329"><span class="linenos">329</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.string-330"><a href="#Token.string-330"><span class="linenos">330</span></a> <span class="k">def</span> <span class="nf">string</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">string</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token.string-331"><a href="#Token.string-331"><span class="linenos">331</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns a STRING token with `string` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token.string-332"><a href="#Token.string-332"><span class="linenos">332</span></a> <span class="k">return</span> <span class="bp">cls</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">string</span><span class="p">)</span>
</span></pre></div>
@@ -6220,10 +6256,10 @@
</div>
<a class="headerlink" href="#Token.identifier"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Token.identifier-332"><a href="#Token.identifier-332"><span class="linenos">332</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token.identifier-333"><a href="#Token.identifier-333"><span class="linenos">333</span></a> <span class="k">def</span> <span class="nf">identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token.identifier-334"><a href="#Token.identifier-334"><span class="linenos">334</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an IDENTIFIER token with `identifier` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token.identifier-335"><a href="#Token.identifier-335"><span class="linenos">335</span></a> <span class="k">return</span> <span class="bp">cls</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">identifier</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Token.identifier-334"><a href="#Token.identifier-334"><span class="linenos">334</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.identifier-335"><a href="#Token.identifier-335"><span class="linenos">335</span></a> <span class="k">def</span> <span class="nf">identifier</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">identifier</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token.identifier-336"><a href="#Token.identifier-336"><span class="linenos">336</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an IDENTIFIER token with `identifier` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token.identifier-337"><a href="#Token.identifier-337"><span class="linenos">337</span></a> <span class="k">return</span> <span class="bp">cls</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">identifier</span><span class="p">)</span>
</span></pre></div>
@@ -6244,10 +6280,10 @@
</div>
<a class="headerlink" href="#Token.var"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Token.var-337"><a href="#Token.var-337"><span class="linenos">337</span></a> <span class="nd">@classmethod</span>
-</span><span id="Token.var-338"><a href="#Token.var-338"><span class="linenos">338</span></a> <span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">var</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
-</span><span id="Token.var-339"><a href="#Token.var-339"><span class="linenos">339</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an VAR token with `var` as its text.&quot;&quot;&quot;</span>
-</span><span id="Token.var-340"><a href="#Token.var-340"><span class="linenos">340</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">var</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Token.var-339"><a href="#Token.var-339"><span class="linenos">339</span></a> <span class="nd">@classmethod</span>
+</span><span id="Token.var-340"><a href="#Token.var-340"><span class="linenos">340</span></a> <span class="k">def</span> <span class="nf">var</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">var</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Token</span><span class="p">:</span>
+</span><span id="Token.var-341"><a href="#Token.var-341"><span class="linenos">341</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Returns an VAR token with `var` as its text.&quot;&quot;&quot;</span>
+</span><span id="Token.var-342"><a href="#Token.var-342"><span class="linenos">342</span></a> <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">var</span><span class="p">)</span>
</span></pre></div>
@@ -6281,759 +6317,761 @@
</div>
<a class="headerlink" href="#Tokenizer"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer-409"><a href="#Tokenizer-409"><span class="linenos"> 409</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-410"><a href="#Tokenizer-410"><span class="linenos"> 410</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tokenizer-411"><a href="#Tokenizer-411"><span class="linenos"> 411</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-412"><a href="#Tokenizer-412"><span class="linenos"> 412</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-413"><a href="#Tokenizer-413"><span class="linenos"> 413</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-414"><a href="#Tokenizer-414"><span class="linenos"> 414</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-415"><a href="#Tokenizer-415"><span class="linenos"> 415</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-416"><a href="#Tokenizer-416"><span class="linenos"> 416</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-417"><a href="#Tokenizer-417"><span class="linenos"> 417</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-418"><a href="#Tokenizer-418"><span class="linenos"> 418</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-419"><a href="#Tokenizer-419"><span class="linenos"> 419</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-420"><a href="#Tokenizer-420"><span class="linenos"> 420</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-421"><a href="#Tokenizer-421"><span class="linenos"> 421</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-422"><a href="#Tokenizer-422"><span class="linenos"> 422</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-423"><a href="#Tokenizer-423"><span class="linenos"> 423</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-424"><a href="#Tokenizer-424"><span class="linenos"> 424</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-425"><a href="#Tokenizer-425"><span class="linenos"> 425</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-426"><a href="#Tokenizer-426"><span class="linenos"> 426</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-427"><a href="#Tokenizer-427"><span class="linenos"> 427</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-428"><a href="#Tokenizer-428"><span class="linenos"> 428</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-429"><a href="#Tokenizer-429"><span class="linenos"> 429</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-430"><a href="#Tokenizer-430"><span class="linenos"> 430</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-431"><a href="#Tokenizer-431"><span class="linenos"> 431</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-432"><a href="#Tokenizer-432"><span class="linenos"> 432</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-433"><a href="#Tokenizer-433"><span class="linenos"> 433</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-434"><a href="#Tokenizer-434"><span class="linenos"> 434</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-435"><a href="#Tokenizer-435"><span class="linenos"> 435</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-436"><a href="#Tokenizer-436"><span class="linenos"> 436</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-437"><a href="#Tokenizer-437"><span class="linenos"> 437</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
-</span><span id="Tokenizer-438"><a href="#Tokenizer-438"><span class="linenos"> 438</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
-</span><span id="Tokenizer-439"><a href="#Tokenizer-439"><span class="linenos"> 439</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-440"><a href="#Tokenizer-440"><span class="linenos"> 440</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-441"><a href="#Tokenizer-441"><span class="linenos"> 441</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-442"><a href="#Tokenizer-442"><span class="linenos"> 442</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-443"><a href="#Tokenizer-443"><span class="linenos"> 443</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-444"><a href="#Tokenizer-444"><span class="linenos"> 444</span></a>
-</span><span id="Tokenizer-445"><a href="#Tokenizer-445"><span class="linenos"> 445</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-446"><a href="#Tokenizer-446"><span class="linenos"> 446</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-447"><a href="#Tokenizer-447"><span class="linenos"> 447</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-448"><a href="#Tokenizer-448"><span class="linenos"> 448</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-449"><a href="#Tokenizer-449"><span class="linenos"> 449</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-450"><a href="#Tokenizer-450"><span class="linenos"> 450</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-451"><a href="#Tokenizer-451"><span class="linenos"> 451</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-452"><a href="#Tokenizer-452"><span class="linenos"> 452</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-453"><a href="#Tokenizer-453"><span class="linenos"> 453</span></a>
-</span><span id="Tokenizer-454"><a href="#Tokenizer-454"><span class="linenos"> 454</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-455"><a href="#Tokenizer-455"><span class="linenos"> 455</span></a> <span class="n">_BIT_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-456"><a href="#Tokenizer-456"><span class="linenos"> 456</span></a> <span class="n">_BYTE_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-457"><a href="#Tokenizer-457"><span class="linenos"> 457</span></a> <span class="n">_HEX_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Tokenizer-458"><a href="#Tokenizer-458"><span class="linenos"> 458</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-459"><a href="#Tokenizer-459"><span class="linenos"> 459</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-460"><a href="#Tokenizer-460"><span class="linenos"> 460</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-461"><a href="#Tokenizer-461"><span class="linenos"> 461</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-462"><a href="#Tokenizer-462"><span class="linenos"> 462</span></a>
-</span><span id="Tokenizer-463"><a href="#Tokenizer-463"><span class="linenos"> 463</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="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-464"><a href="#Tokenizer-464"><span class="linenos"> 464</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-465"><a href="#Tokenizer-465"><span class="linenos"> 465</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-466"><a href="#Tokenizer-466"><span class="linenos"> 466</span></a> <span class="s2">&quot;{{+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
-</span><span id="Tokenizer-467"><a href="#Tokenizer-467"><span class="linenos"> 467</span></a> <span class="s2">&quot;{{-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
-</span><span id="Tokenizer-468"><a href="#Tokenizer-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;+}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
-</span><span id="Tokenizer-469"><a href="#Tokenizer-469"><span class="linenos"> 469</span></a> <span class="s2">&quot;-}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
-</span><span id="Tokenizer-470"><a href="#Tokenizer-470"><span class="linenos"> 470</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-471"><a href="#Tokenizer-471"><span class="linenos"> 471</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-472"><a href="#Tokenizer-472"><span class="linenos"> 472</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-473"><a href="#Tokenizer-473"><span class="linenos"> 473</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-474"><a href="#Tokenizer-474"><span class="linenos"> 474</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-475"><a href="#Tokenizer-475"><span class="linenos"> 475</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-476"><a href="#Tokenizer-476"><span class="linenos"> 476</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-477"><a href="#Tokenizer-477"><span class="linenos"> 477</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-478"><a href="#Tokenizer-478"><span class="linenos"> 478</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-479"><a href="#Tokenizer-479"><span class="linenos"> 479</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-480"><a href="#Tokenizer-480"><span class="linenos"> 480</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-481"><a href="#Tokenizer-481"><span class="linenos"> 481</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-482"><a href="#Tokenizer-482"><span class="linenos"> 482</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-483"><a href="#Tokenizer-483"><span class="linenos"> 483</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-484"><a href="#Tokenizer-484"><span class="linenos"> 484</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-485"><a href="#Tokenizer-485"><span class="linenos"> 485</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-486"><a href="#Tokenizer-486"><span class="linenos"> 486</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-487"><a href="#Tokenizer-487"><span class="linenos"> 487</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-488"><a href="#Tokenizer-488"><span class="linenos"> 488</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-489"><a href="#Tokenizer-489"><span class="linenos"> 489</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-490"><a href="#Tokenizer-490"><span class="linenos"> 490</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-491"><a href="#Tokenizer-491"><span class="linenos"> 491</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-492"><a href="#Tokenizer-492"><span class="linenos"> 492</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-493"><a href="#Tokenizer-493"><span class="linenos"> 493</span></a> <span class="s2">&quot;AT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_TIME_ZONE</span><span class="p">,</span>
-</span><span id="Tokenizer-494"><a href="#Tokenizer-494"><span class="linenos"> 494</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-495"><a href="#Tokenizer-495"><span class="linenos"> 495</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-496"><a href="#Tokenizer-496"><span class="linenos"> 496</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-497"><a href="#Tokenizer-497"><span class="linenos"> 497</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-498"><a href="#Tokenizer-498"><span class="linenos"> 498</span></a> <span class="s2">&quot;BOTH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</span><span class="p">,</span>
-</span><span id="Tokenizer-499"><a href="#Tokenizer-499"><span class="linenos"> 499</span></a> <span class="s2">&quot;BUCKET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">,</span>
-</span><span id="Tokenizer-500"><a href="#Tokenizer-500"><span class="linenos"> 500</span></a> <span class="s2">&quot;BY DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BY_DEFAULT</span><span class="p">,</span>
-</span><span id="Tokenizer-501"><a href="#Tokenizer-501"><span class="linenos"> 501</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-502"><a href="#Tokenizer-502"><span class="linenos"> 502</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-503"><a href="#Tokenizer-503"><span class="linenos"> 503</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-504"><a href="#Tokenizer-504"><span class="linenos"> 504</span></a> <span class="s2">&quot;CASCADE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
-</span><span id="Tokenizer-505"><a href="#Tokenizer-505"><span class="linenos"> 505</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-506"><a href="#Tokenizer-506"><span class="linenos"> 506</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-507"><a href="#Tokenizer-507"><span class="linenos"> 507</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-508"><a href="#Tokenizer-508"><span class="linenos"> 508</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-509"><a href="#Tokenizer-509"><span class="linenos"> 509</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-510"><a href="#Tokenizer-510"><span class="linenos"> 510</span></a> <span class="s2">&quot;COMPOUND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMPOUND</span><span class="p">,</span>
-</span><span id="Tokenizer-511"><a href="#Tokenizer-511"><span class="linenos"> 511</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-512"><a href="#Tokenizer-512"><span class="linenos"> 512</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-513"><a href="#Tokenizer-513"><span class="linenos"> 513</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-514"><a href="#Tokenizer-514"><span class="linenos"> 514</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-515"><a href="#Tokenizer-515"><span class="linenos"> 515</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-516"><a href="#Tokenizer-516"><span class="linenos"> 516</span></a> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</span><span class="p">,</span>
-</span><span id="Tokenizer-517"><a href="#Tokenizer-517"><span class="linenos"> 517</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-518"><a href="#Tokenizer-518"><span class="linenos"> 518</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-519"><a href="#Tokenizer-519"><span class="linenos"> 519</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-520"><a href="#Tokenizer-520"><span class="linenos"> 520</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-521"><a href="#Tokenizer-521"><span class="linenos"> 521</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-522"><a href="#Tokenizer-522"><span class="linenos"> 522</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-523"><a href="#Tokenizer-523"><span class="linenos"> 523</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-524"><a href="#Tokenizer-524"><span class="linenos"> 524</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-525"><a href="#Tokenizer-525"><span class="linenos"> 525</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-526"><a href="#Tokenizer-526"><span class="linenos"> 526</span></a> <span class="s2">&quot;DISTINCT FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT_FROM</span><span class="p">,</span>
-</span><span id="Tokenizer-527"><a href="#Tokenizer-527"><span class="linenos"> 527</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-528"><a href="#Tokenizer-528"><span class="linenos"> 528</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-529"><a href="#Tokenizer-529"><span class="linenos"> 529</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-530"><a href="#Tokenizer-530"><span class="linenos"> 530</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-531"><a href="#Tokenizer-531"><span class="linenos"> 531</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-532"><a href="#Tokenizer-532"><span class="linenos"> 532</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-533"><a href="#Tokenizer-533"><span class="linenos"> 533</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-534"><a href="#Tokenizer-534"><span class="linenos"> 534</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-535"><a href="#Tokenizer-535"><span class="linenos"> 535</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-536"><a href="#Tokenizer-536"><span class="linenos"> 536</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-537"><a href="#Tokenizer-537"><span class="linenos"> 537</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-538"><a href="#Tokenizer-538"><span class="linenos"> 538</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-539"><a href="#Tokenizer-539"><span class="linenos"> 539</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-540"><a href="#Tokenizer-540"><span class="linenos"> 540</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-541"><a href="#Tokenizer-541"><span class="linenos"> 541</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-542"><a href="#Tokenizer-542"><span class="linenos"> 542</span></a> <span class="s2">&quot;FOLLOWING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</span><span class="p">,</span>
-</span><span id="Tokenizer-543"><a href="#Tokenizer-543"><span class="linenos"> 543</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-544"><a href="#Tokenizer-544"><span class="linenos"> 544</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-545"><a href="#Tokenizer-545"><span class="linenos"> 545</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-546"><a href="#Tokenizer-546"><span class="linenos"> 546</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-547"><a href="#Tokenizer-547"><span class="linenos"> 547</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-548"><a href="#Tokenizer-548"><span class="linenos"> 548</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-549"><a href="#Tokenizer-549"><span class="linenos"> 549</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-550"><a href="#Tokenizer-550"><span class="linenos"> 550</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-551"><a href="#Tokenizer-551"><span class="linenos"> 551</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IF</span><span class="p">,</span>
-</span><span id="Tokenizer-552"><a href="#Tokenizer-552"><span class="linenos"> 552</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-553"><a href="#Tokenizer-553"><span class="linenos"> 553</span></a> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">,</span>
-</span><span id="Tokenizer-554"><a href="#Tokenizer-554"><span class="linenos"> 554</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-555"><a href="#Tokenizer-555"><span class="linenos"> 555</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-556"><a href="#Tokenizer-556"><span class="linenos"> 556</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-557"><a href="#Tokenizer-557"><span class="linenos"> 557</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-558"><a href="#Tokenizer-558"><span class="linenos"> 558</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-559"><a href="#Tokenizer-559"><span class="linenos"> 559</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-560"><a href="#Tokenizer-560"><span class="linenos"> 560</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-561"><a href="#Tokenizer-561"><span class="linenos"> 561</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-562"><a href="#Tokenizer-562"><span class="linenos"> 562</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-563"><a href="#Tokenizer-563"><span class="linenos"> 563</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-564"><a href="#Tokenizer-564"><span class="linenos"> 564</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-565"><a href="#Tokenizer-565"><span class="linenos"> 565</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-566"><a href="#Tokenizer-566"><span class="linenos"> 566</span></a> <span class="s2">&quot;LAZY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
-</span><span id="Tokenizer-567"><a href="#Tokenizer-567"><span class="linenos"> 567</span></a> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
-</span><span id="Tokenizer-568"><a href="#Tokenizer-568"><span class="linenos"> 568</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-569"><a href="#Tokenizer-569"><span class="linenos"> 569</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-570"><a href="#Tokenizer-570"><span class="linenos"> 570</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-571"><a href="#Tokenizer-571"><span class="linenos"> 571</span></a> <span class="s2">&quot;LOAD DATA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</span><span class="p">,</span>
-</span><span id="Tokenizer-572"><a href="#Tokenizer-572"><span class="linenos"> 572</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
-</span><span id="Tokenizer-573"><a href="#Tokenizer-573"><span class="linenos"> 573</span></a> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
-</span><span id="Tokenizer-574"><a href="#Tokenizer-574"><span class="linenos"> 574</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-575"><a href="#Tokenizer-575"><span class="linenos"> 575</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-576"><a href="#Tokenizer-576"><span class="linenos"> 576</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-577"><a href="#Tokenizer-577"><span class="linenos"> 577</span></a> <span class="s2">&quot;NO ACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">,</span>
-</span><span id="Tokenizer-578"><a href="#Tokenizer-578"><span class="linenos"> 578</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-579"><a href="#Tokenizer-579"><span class="linenos"> 579</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-580"><a href="#Tokenizer-580"><span class="linenos"> 580</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-581"><a href="#Tokenizer-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;NULLS FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">,</span>
-</span><span id="Tokenizer-582"><a href="#Tokenizer-582"><span class="linenos"> 582</span></a> <span class="s2">&quot;NULLS LAST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">,</span>
-</span><span id="Tokenizer-583"><a href="#Tokenizer-583"><span class="linenos"> 583</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-584"><a href="#Tokenizer-584"><span class="linenos"> 584</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-585"><a href="#Tokenizer-585"><span class="linenos"> 585</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-586"><a href="#Tokenizer-586"><span class="linenos"> 586</span></a> <span class="s2">&quot;ONLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
-</span><span id="Tokenizer-587"><a href="#Tokenizer-587"><span class="linenos"> 587</span></a> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
-</span><span id="Tokenizer-588"><a href="#Tokenizer-588"><span class="linenos"> 588</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-589"><a href="#Tokenizer-589"><span class="linenos"> 589</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-590"><a href="#Tokenizer-590"><span class="linenos"> 590</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-591"><a href="#Tokenizer-591"><span class="linenos"> 591</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-592"><a href="#Tokenizer-592"><span class="linenos"> 592</span></a> <span class="s2">&quot;OUT OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUT_OF</span><span class="p">,</span>
-</span><span id="Tokenizer-593"><a href="#Tokenizer-593"><span class="linenos"> 593</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-594"><a href="#Tokenizer-594"><span class="linenos"> 594</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-595"><a href="#Tokenizer-595"><span class="linenos"> 595</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-596"><a href="#Tokenizer-596"><span class="linenos"> 596</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-597"><a href="#Tokenizer-597"><span class="linenos"> 597</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-598"><a href="#Tokenizer-598"><span class="linenos"> 598</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-599"><a href="#Tokenizer-599"><span class="linenos"> 599</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-600"><a href="#Tokenizer-600"><span class="linenos"> 600</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-601"><a href="#Tokenizer-601"><span class="linenos"> 601</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-602"><a href="#Tokenizer-602"><span class="linenos"> 602</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-603"><a href="#Tokenizer-603"><span class="linenos"> 603</span></a> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
-</span><span id="Tokenizer-604"><a href="#Tokenizer-604"><span class="linenos"> 604</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-605"><a href="#Tokenizer-605"><span class="linenos"> 605</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-606"><a href="#Tokenizer-606"><span class="linenos"> 606</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-607"><a href="#Tokenizer-607"><span class="linenos"> 607</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-608"><a href="#Tokenizer-608"><span class="linenos"> 608</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-609"><a href="#Tokenizer-609"><span class="linenos"> 609</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-610"><a href="#Tokenizer-610"><span class="linenos"> 610</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-611"><a href="#Tokenizer-611"><span class="linenos"> 611</span></a> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RESPECT_NULLS</span><span class="p">,</span>
-</span><span id="Tokenizer-612"><a href="#Tokenizer-612"><span class="linenos"> 612</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-613"><a href="#Tokenizer-613"><span class="linenos"> 613</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-614"><a href="#Tokenizer-614"><span class="linenos"> 614</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-615"><a href="#Tokenizer-615"><span class="linenos"> 615</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-616"><a href="#Tokenizer-616"><span class="linenos"> 616</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-617"><a href="#Tokenizer-617"><span class="linenos"> 617</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-618"><a href="#Tokenizer-618"><span class="linenos"> 618</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-619"><a href="#Tokenizer-619"><span class="linenos"> 619</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-620"><a href="#Tokenizer-620"><span class="linenos"> 620</span></a> <span class="s2">&quot;SEED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
-</span><span id="Tokenizer-621"><a href="#Tokenizer-621"><span class="linenos"> 621</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-622"><a href="#Tokenizer-622"><span class="linenos"> 622</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-623"><a href="#Tokenizer-623"><span class="linenos"> 623</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-624"><a href="#Tokenizer-624"><span class="linenos"> 624</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-625"><a href="#Tokenizer-625"><span class="linenos"> 625</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-626"><a href="#Tokenizer-626"><span class="linenos"> 626</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-627"><a href="#Tokenizer-627"><span class="linenos"> 627</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
-</span><span id="Tokenizer-628"><a href="#Tokenizer-628"><span class="linenos"> 628</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-629"><a href="#Tokenizer-629"><span class="linenos"> 629</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-630"><a href="#Tokenizer-630"><span class="linenos"> 630</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-631"><a href="#Tokenizer-631"><span class="linenos"> 631</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-632"><a href="#Tokenizer-632"><span class="linenos"> 632</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-633"><a href="#Tokenizer-633"><span class="linenos"> 633</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-634"><a href="#Tokenizer-634"><span class="linenos"> 634</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-635"><a href="#Tokenizer-635"><span class="linenos"> 635</span></a> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
-</span><span id="Tokenizer-636"><a href="#Tokenizer-636"><span class="linenos"> 636</span></a> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
-</span><span id="Tokenizer-637"><a href="#Tokenizer-637"><span class="linenos"> 637</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-638"><a href="#Tokenizer-638"><span class="linenos"> 638</span></a> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
-</span><span id="Tokenizer-639"><a href="#Tokenizer-639"><span class="linenos"> 639</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-640"><a href="#Tokenizer-640"><span class="linenos"> 640</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-641"><a href="#Tokenizer-641"><span class="linenos"> 641</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-642"><a href="#Tokenizer-642"><span class="linenos"> 642</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-643"><a href="#Tokenizer-643"><span class="linenos"> 643</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-644"><a href="#Tokenizer-644"><span class="linenos"> 644</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-645"><a href="#Tokenizer-645"><span class="linenos"> 645</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-646"><a href="#Tokenizer-646"><span class="linenos"> 646</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-647"><a href="#Tokenizer-647"><span class="linenos"> 647</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-648"><a href="#Tokenizer-648"><span class="linenos"> 648</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-649"><a href="#Tokenizer-649"><span class="linenos"> 649</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-650"><a href="#Tokenizer-650"><span class="linenos"> 650</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-651"><a href="#Tokenizer-651"><span class="linenos"> 651</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-652"><a href="#Tokenizer-652"><span class="linenos"> 652</span></a> <span class="s2">&quot;WITH TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_TIME_ZONE</span><span class="p">,</span>
-</span><span id="Tokenizer-653"><a href="#Tokenizer-653"><span class="linenos"> 653</span></a> <span class="s2">&quot;WITH LOCAL TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_LOCAL_TIME_ZONE</span><span class="p">,</span>
-</span><span id="Tokenizer-654"><a href="#Tokenizer-654"><span class="linenos"> 654</span></a> <span class="s2">&quot;WITHIN GROUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">,</span>
-</span><span id="Tokenizer-655"><a href="#Tokenizer-655"><span class="linenos"> 655</span></a> <span class="s2">&quot;WITHOUT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHOUT_TIME_ZONE</span><span class="p">,</span>
-</span><span id="Tokenizer-656"><a href="#Tokenizer-656"><span class="linenos"> 656</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-657"><a href="#Tokenizer-657"><span class="linenos"> 657</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-658"><a href="#Tokenizer-658"><span class="linenos"> 658</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-659"><a href="#Tokenizer-659"><span class="linenos"> 659</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-660"><a href="#Tokenizer-660"><span class="linenos"> 660</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-661"><a href="#Tokenizer-661"><span class="linenos"> 661</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-662"><a href="#Tokenizer-662"><span class="linenos"> 662</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-663"><a href="#Tokenizer-663"><span class="linenos"> 663</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-664"><a href="#Tokenizer-664"><span class="linenos"> 664</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-665"><a href="#Tokenizer-665"><span class="linenos"> 665</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-666"><a href="#Tokenizer-666"><span class="linenos"> 666</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-667"><a href="#Tokenizer-667"><span class="linenos"> 667</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-668"><a href="#Tokenizer-668"><span class="linenos"> 668</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-669"><a href="#Tokenizer-669"><span class="linenos"> 669</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-670"><a href="#Tokenizer-670"><span class="linenos"> 670</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-671"><a href="#Tokenizer-671"><span class="linenos"> 671</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">BIGINT</span><span class="p">,</span>
-</span><span id="Tokenizer-672"><a href="#Tokenizer-672"><span class="linenos"> 672</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-673"><a href="#Tokenizer-673"><span class="linenos"> 673</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-674"><a href="#Tokenizer-674"><span class="linenos"> 674</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-675"><a href="#Tokenizer-675"><span class="linenos"> 675</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-676"><a href="#Tokenizer-676"><span class="linenos"> 676</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-677"><a href="#Tokenizer-677"><span class="linenos"> 677</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-678"><a href="#Tokenizer-678"><span class="linenos"> 678</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-679"><a href="#Tokenizer-679"><span class="linenos"> 679</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-680"><a href="#Tokenizer-680"><span class="linenos"> 680</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-681"><a href="#Tokenizer-681"><span class="linenos"> 681</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-682"><a href="#Tokenizer-682"><span class="linenos"> 682</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-683"><a href="#Tokenizer-683"><span class="linenos"> 683</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-684"><a href="#Tokenizer-684"><span class="linenos"> 684</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-685"><a href="#Tokenizer-685"><span class="linenos"> 685</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-686"><a href="#Tokenizer-686"><span class="linenos"> 686</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-687"><a href="#Tokenizer-687"><span class="linenos"> 687</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-688"><a href="#Tokenizer-688"><span class="linenos"> 688</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-689"><a href="#Tokenizer-689"><span class="linenos"> 689</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-690"><a href="#Tokenizer-690"><span class="linenos"> 690</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-691"><a href="#Tokenizer-691"><span class="linenos"> 691</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-692"><a href="#Tokenizer-692"><span class="linenos"> 692</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-693"><a href="#Tokenizer-693"><span class="linenos"> 693</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-694"><a href="#Tokenizer-694"><span class="linenos"> 694</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-695"><a href="#Tokenizer-695"><span class="linenos"> 695</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-696"><a href="#Tokenizer-696"><span class="linenos"> 696</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-697"><a href="#Tokenizer-697"><span class="linenos"> 697</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-698"><a href="#Tokenizer-698"><span class="linenos"> 698</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-699"><a href="#Tokenizer-699"><span class="linenos"> 699</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-700"><a href="#Tokenizer-700"><span class="linenos"> 700</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-701"><a href="#Tokenizer-701"><span class="linenos"> 701</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-702"><a href="#Tokenizer-702"><span class="linenos"> 702</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-703"><a href="#Tokenizer-703"><span class="linenos"> 703</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-704"><a href="#Tokenizer-704"><span class="linenos"> 704</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-705"><a href="#Tokenizer-705"><span class="linenos"> 705</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-706"><a href="#Tokenizer-706"><span class="linenos"> 706</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-707"><a href="#Tokenizer-707"><span class="linenos"> 707</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-708"><a href="#Tokenizer-708"><span class="linenos"> 708</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-709"><a href="#Tokenizer-709"><span class="linenos"> 709</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-710"><a href="#Tokenizer-710"><span class="linenos"> 710</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-711"><a href="#Tokenizer-711"><span class="linenos"> 711</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-712"><a href="#Tokenizer-712"><span class="linenos"> 712</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-713"><a href="#Tokenizer-713"><span class="linenos"> 713</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-714"><a href="#Tokenizer-714"><span class="linenos"> 714</span></a> <span class="s2">&quot;ALTER AGGREGATE&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-715"><a href="#Tokenizer-715"><span class="linenos"> 715</span></a> <span class="s2">&quot;ALTER DEFAULT&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-716"><a href="#Tokenizer-716"><span class="linenos"> 716</span></a> <span class="s2">&quot;ALTER DOMAIN&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-717"><a href="#Tokenizer-717"><span class="linenos"> 717</span></a> <span class="s2">&quot;ALTER ROLE&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-718"><a href="#Tokenizer-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;ALTER RULE&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-719"><a href="#Tokenizer-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;ALTER SEQUENCE&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-720"><a href="#Tokenizer-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;ALTER TYPE&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-721"><a href="#Tokenizer-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;ALTER USER&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-722"><a href="#Tokenizer-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;ALTER VIEW&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-723"><a href="#Tokenizer-723"><span class="linenos"> 723</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-724"><a href="#Tokenizer-724"><span class="linenos"> 724</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-725"><a href="#Tokenizer-725"><span class="linenos"> 725</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-726"><a href="#Tokenizer-726"><span class="linenos"> 726</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-727"><a href="#Tokenizer-727"><span class="linenos"> 727</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-728"><a href="#Tokenizer-728"><span class="linenos"> 728</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-729"><a href="#Tokenizer-729"><span class="linenos"> 729</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-730"><a href="#Tokenizer-730"><span class="linenos"> 730</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-731"><a href="#Tokenizer-731"><span class="linenos"> 731</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-732"><a href="#Tokenizer-732"><span class="linenos"> 732</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-733"><a href="#Tokenizer-733"><span class="linenos"> 733</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-734"><a href="#Tokenizer-734"><span class="linenos"> 734</span></a>
-</span><span id="Tokenizer-735"><a href="#Tokenizer-735"><span class="linenos"> 735</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-736"><a href="#Tokenizer-736"><span class="linenos"> 736</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-737"><a href="#Tokenizer-737"><span class="linenos"> 737</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-738"><a href="#Tokenizer-738"><span class="linenos"> 738</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-739"><a href="#Tokenizer-739"><span class="linenos"> 739</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-740"><a href="#Tokenizer-740"><span class="linenos"> 740</span></a> <span class="s2">&quot;</span><span class="se">\r\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-741"><a href="#Tokenizer-741"><span class="linenos"> 741</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-742"><a href="#Tokenizer-742"><span class="linenos"> 742</span></a>
-</span><span id="Tokenizer-743"><a href="#Tokenizer-743"><span class="linenos"> 743</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="Tokenizer-744"><a href="#Tokenizer-744"><span class="linenos"> 744</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
-</span><span id="Tokenizer-745"><a href="#Tokenizer-745"><span class="linenos"> 745</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
-</span><span id="Tokenizer-746"><a href="#Tokenizer-746"><span class="linenos"> 746</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
-</span><span id="Tokenizer-747"><a href="#Tokenizer-747"><span class="linenos"> 747</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
-</span><span id="Tokenizer-748"><a href="#Tokenizer-748"><span class="linenos"> 748</span></a> <span class="p">}</span>
-</span><span id="Tokenizer-749"><a href="#Tokenizer-749"><span class="linenos"> 749</span></a>
-</span><span id="Tokenizer-750"><a href="#Tokenizer-750"><span class="linenos"> 750</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-751"><a href="#Tokenizer-751"><span class="linenos"> 751</span></a>
-</span><span id="Tokenizer-752"><a href="#Tokenizer-752"><span class="linenos"> 752</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
-</span><span id="Tokenizer-753"><a href="#Tokenizer-753"><span class="linenos"> 753</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-754"><a href="#Tokenizer-754"><span class="linenos"> 754</span></a> <span class="n">ENCODE</span><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>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer-411"><a href="#Tokenizer-411"><span class="linenos"> 411</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-412"><a href="#Tokenizer-412"><span class="linenos"> 412</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-413"><a href="#Tokenizer-413"><span class="linenos"> 413</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-414"><a href="#Tokenizer-414"><span class="linenos"> 414</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-415"><a href="#Tokenizer-415"><span class="linenos"> 415</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-416"><a href="#Tokenizer-416"><span class="linenos"> 416</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-417"><a href="#Tokenizer-417"><span class="linenos"> 417</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-418"><a href="#Tokenizer-418"><span class="linenos"> 418</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-419"><a href="#Tokenizer-419"><span class="linenos"> 419</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-420"><a href="#Tokenizer-420"><span class="linenos"> 420</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-421"><a href="#Tokenizer-421"><span class="linenos"> 421</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-422"><a href="#Tokenizer-422"><span class="linenos"> 422</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-423"><a href="#Tokenizer-423"><span class="linenos"> 423</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-424"><a href="#Tokenizer-424"><span class="linenos"> 424</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-425"><a href="#Tokenizer-425"><span class="linenos"> 425</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-426"><a href="#Tokenizer-426"><span class="linenos"> 426</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-427"><a href="#Tokenizer-427"><span class="linenos"> 427</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-428"><a href="#Tokenizer-428"><span class="linenos"> 428</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-429"><a href="#Tokenizer-429"><span class="linenos"> 429</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-430"><a href="#Tokenizer-430"><span class="linenos"> 430</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-431"><a href="#Tokenizer-431"><span class="linenos"> 431</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-432"><a href="#Tokenizer-432"><span class="linenos"> 432</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-433"><a href="#Tokenizer-433"><span class="linenos"> 433</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-434"><a href="#Tokenizer-434"><span class="linenos"> 434</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-435"><a href="#Tokenizer-435"><span class="linenos"> 435</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-436"><a href="#Tokenizer-436"><span class="linenos"> 436</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-437"><a href="#Tokenizer-437"><span class="linenos"> 437</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-438"><a href="#Tokenizer-438"><span class="linenos"> 438</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-439"><a href="#Tokenizer-439"><span class="linenos"> 439</span></a> <span class="c1"># used for breaking a var like x&#39;y&#39; but nothing else</span>
+</span><span id="Tokenizer-440"><a href="#Tokenizer-440"><span class="linenos"> 440</span></a> <span class="c1"># the token type doesn&#39;t matter</span>
+</span><span id="Tokenizer-441"><a href="#Tokenizer-441"><span class="linenos"> 441</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-442"><a href="#Tokenizer-442"><span class="linenos"> 442</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-443"><a href="#Tokenizer-443"><span class="linenos"> 443</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-444"><a href="#Tokenizer-444"><span class="linenos"> 444</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-445"><a href="#Tokenizer-445"><span class="linenos"> 445</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-446"><a href="#Tokenizer-446"><span class="linenos"> 446</span></a>
+</span><span id="Tokenizer-447"><a href="#Tokenizer-447"><span class="linenos"> 447</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-448"><a href="#Tokenizer-448"><span class="linenos"> 448</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-449"><a href="#Tokenizer-449"><span class="linenos"> 449</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-450"><a href="#Tokenizer-450"><span class="linenos"> 450</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-451"><a href="#Tokenizer-451"><span class="linenos"> 451</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-452"><a href="#Tokenizer-452"><span class="linenos"> 452</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-453"><a href="#Tokenizer-453"><span class="linenos"> 453</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-454"><a href="#Tokenizer-454"><span class="linenos"> 454</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-455"><a href="#Tokenizer-455"><span class="linenos"> 455</span></a>
+</span><span id="Tokenizer-456"><a href="#Tokenizer-456"><span class="linenos"> 456</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-457"><a href="#Tokenizer-457"><span class="linenos"> 457</span></a> <span class="n">_BIT_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-458"><a href="#Tokenizer-458"><span class="linenos"> 458</span></a> <span class="n">_BYTE_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-459"><a href="#Tokenizer-459"><span class="linenos"> 459</span></a> <span class="n">_HEX_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="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Tokenizer-460"><a href="#Tokenizer-460"><span class="linenos"> 460</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-461"><a href="#Tokenizer-461"><span class="linenos"> 461</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-462"><a href="#Tokenizer-462"><span class="linenos"> 462</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-463"><a href="#Tokenizer-463"><span class="linenos"> 463</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-464"><a href="#Tokenizer-464"><span class="linenos"> 464</span></a>
+</span><span id="Tokenizer-465"><a href="#Tokenizer-465"><span class="linenos"> 465</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="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-466"><a href="#Tokenizer-466"><span class="linenos"> 466</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-467"><a href="#Tokenizer-467"><span class="linenos"> 467</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-468"><a href="#Tokenizer-468"><span class="linenos"> 468</span></a> <span class="s2">&quot;{{+&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
+</span><span id="Tokenizer-469"><a href="#Tokenizer-469"><span class="linenos"> 469</span></a> <span class="s2">&quot;{{-&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_START</span><span class="p">,</span>
+</span><span id="Tokenizer-470"><a href="#Tokenizer-470"><span class="linenos"> 470</span></a> <span class="s2">&quot;+}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
+</span><span id="Tokenizer-471"><a href="#Tokenizer-471"><span class="linenos"> 471</span></a> <span class="s2">&quot;-}}&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOCK_END</span><span class="p">,</span>
+</span><span id="Tokenizer-472"><a href="#Tokenizer-472"><span class="linenos"> 472</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-473"><a href="#Tokenizer-473"><span class="linenos"> 473</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-474"><a href="#Tokenizer-474"><span class="linenos"> 474</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-475"><a href="#Tokenizer-475"><span class="linenos"> 475</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-476"><a href="#Tokenizer-476"><span class="linenos"> 476</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-477"><a href="#Tokenizer-477"><span class="linenos"> 477</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-478"><a href="#Tokenizer-478"><span class="linenos"> 478</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-479"><a href="#Tokenizer-479"><span class="linenos"> 479</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-480"><a href="#Tokenizer-480"><span class="linenos"> 480</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-481"><a href="#Tokenizer-481"><span class="linenos"> 481</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-482"><a href="#Tokenizer-482"><span class="linenos"> 482</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-483"><a href="#Tokenizer-483"><span class="linenos"> 483</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-484"><a href="#Tokenizer-484"><span class="linenos"> 484</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-485"><a href="#Tokenizer-485"><span class="linenos"> 485</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-486"><a href="#Tokenizer-486"><span class="linenos"> 486</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-487"><a href="#Tokenizer-487"><span class="linenos"> 487</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-488"><a href="#Tokenizer-488"><span class="linenos"> 488</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-489"><a href="#Tokenizer-489"><span class="linenos"> 489</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-490"><a href="#Tokenizer-490"><span class="linenos"> 490</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-491"><a href="#Tokenizer-491"><span class="linenos"> 491</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-492"><a href="#Tokenizer-492"><span class="linenos"> 492</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-493"><a href="#Tokenizer-493"><span class="linenos"> 493</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-494"><a href="#Tokenizer-494"><span class="linenos"> 494</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-495"><a href="#Tokenizer-495"><span class="linenos"> 495</span></a> <span class="s2">&quot;AT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_TIME_ZONE</span><span class="p">,</span>
+</span><span id="Tokenizer-496"><a href="#Tokenizer-496"><span class="linenos"> 496</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-497"><a href="#Tokenizer-497"><span class="linenos"> 497</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-498"><a href="#Tokenizer-498"><span class="linenos"> 498</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-499"><a href="#Tokenizer-499"><span class="linenos"> 499</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-500"><a href="#Tokenizer-500"><span class="linenos"> 500</span></a> <span class="s2">&quot;BOTH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOTH</span><span class="p">,</span>
+</span><span id="Tokenizer-501"><a href="#Tokenizer-501"><span class="linenos"> 501</span></a> <span class="s2">&quot;BUCKET&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BUCKET</span><span class="p">,</span>
+</span><span id="Tokenizer-502"><a href="#Tokenizer-502"><span class="linenos"> 502</span></a> <span class="s2">&quot;BY DEFAULT&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BY_DEFAULT</span><span class="p">,</span>
+</span><span id="Tokenizer-503"><a href="#Tokenizer-503"><span class="linenos"> 503</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-504"><a href="#Tokenizer-504"><span class="linenos"> 504</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-505"><a href="#Tokenizer-505"><span class="linenos"> 505</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-506"><a href="#Tokenizer-506"><span class="linenos"> 506</span></a> <span class="s2">&quot;CASCADE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+</span><span id="Tokenizer-507"><a href="#Tokenizer-507"><span class="linenos"> 507</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-508"><a href="#Tokenizer-508"><span class="linenos"> 508</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-509"><a href="#Tokenizer-509"><span class="linenos"> 509</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-510"><a href="#Tokenizer-510"><span class="linenos"> 510</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-511"><a href="#Tokenizer-511"><span class="linenos"> 511</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-512"><a href="#Tokenizer-512"><span class="linenos"> 512</span></a> <span class="s2">&quot;COMPOUND&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMPOUND</span><span class="p">,</span>
+</span><span id="Tokenizer-513"><a href="#Tokenizer-513"><span class="linenos"> 513</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-514"><a href="#Tokenizer-514"><span class="linenos"> 514</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-515"><a href="#Tokenizer-515"><span class="linenos"> 515</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-516"><a href="#Tokenizer-516"><span class="linenos"> 516</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-517"><a href="#Tokenizer-517"><span class="linenos"> 517</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-518"><a href="#Tokenizer-518"><span class="linenos"> 518</span></a> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_ROW</span><span class="p">,</span>
+</span><span id="Tokenizer-519"><a href="#Tokenizer-519"><span class="linenos"> 519</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-520"><a href="#Tokenizer-520"><span class="linenos"> 520</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-521"><a href="#Tokenizer-521"><span class="linenos"> 521</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-522"><a href="#Tokenizer-522"><span class="linenos"> 522</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-523"><a href="#Tokenizer-523"><span class="linenos"> 523</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-524"><a href="#Tokenizer-524"><span class="linenos"> 524</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-525"><a href="#Tokenizer-525"><span class="linenos"> 525</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-526"><a href="#Tokenizer-526"><span class="linenos"> 526</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-527"><a href="#Tokenizer-527"><span class="linenos"> 527</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-528"><a href="#Tokenizer-528"><span class="linenos"> 528</span></a> <span class="s2">&quot;DISTINCT FROM&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT_FROM</span><span class="p">,</span>
+</span><span id="Tokenizer-529"><a href="#Tokenizer-529"><span class="linenos"> 529</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-530"><a href="#Tokenizer-530"><span class="linenos"> 530</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-531"><a href="#Tokenizer-531"><span class="linenos"> 531</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-532"><a href="#Tokenizer-532"><span class="linenos"> 532</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-533"><a href="#Tokenizer-533"><span class="linenos"> 533</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-534"><a href="#Tokenizer-534"><span class="linenos"> 534</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-535"><a href="#Tokenizer-535"><span class="linenos"> 535</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-536"><a href="#Tokenizer-536"><span class="linenos"> 536</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-537"><a href="#Tokenizer-537"><span class="linenos"> 537</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-538"><a href="#Tokenizer-538"><span class="linenos"> 538</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-539"><a href="#Tokenizer-539"><span class="linenos"> 539</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-540"><a href="#Tokenizer-540"><span class="linenos"> 540</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-541"><a href="#Tokenizer-541"><span class="linenos"> 541</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-542"><a href="#Tokenizer-542"><span class="linenos"> 542</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-543"><a href="#Tokenizer-543"><span class="linenos"> 543</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-544"><a href="#Tokenizer-544"><span class="linenos"> 544</span></a> <span class="s2">&quot;FOLLOWING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOLLOWING</span><span class="p">,</span>
+</span><span id="Tokenizer-545"><a href="#Tokenizer-545"><span class="linenos"> 545</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-546"><a href="#Tokenizer-546"><span class="linenos"> 546</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-547"><a href="#Tokenizer-547"><span class="linenos"> 547</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-548"><a href="#Tokenizer-548"><span class="linenos"> 548</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-549"><a href="#Tokenizer-549"><span class="linenos"> 549</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-550"><a href="#Tokenizer-550"><span class="linenos"> 550</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-551"><a href="#Tokenizer-551"><span class="linenos"> 551</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-552"><a href="#Tokenizer-552"><span class="linenos"> 552</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-553"><a href="#Tokenizer-553"><span class="linenos"> 553</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IF</span><span class="p">,</span>
+</span><span id="Tokenizer-554"><a href="#Tokenizer-554"><span class="linenos"> 554</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-555"><a href="#Tokenizer-555"><span class="linenos"> 555</span></a> <span class="s2">&quot;IGNORE NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE_NULLS</span><span class="p">,</span>
+</span><span id="Tokenizer-556"><a href="#Tokenizer-556"><span class="linenos"> 556</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-557"><a href="#Tokenizer-557"><span class="linenos"> 557</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-558"><a href="#Tokenizer-558"><span class="linenos"> 558</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-559"><a href="#Tokenizer-559"><span class="linenos"> 559</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-560"><a href="#Tokenizer-560"><span class="linenos"> 560</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-561"><a href="#Tokenizer-561"><span class="linenos"> 561</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-562"><a href="#Tokenizer-562"><span class="linenos"> 562</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-563"><a href="#Tokenizer-563"><span class="linenos"> 563</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-564"><a href="#Tokenizer-564"><span class="linenos"> 564</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-565"><a href="#Tokenizer-565"><span class="linenos"> 565</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-566"><a href="#Tokenizer-566"><span class="linenos"> 566</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-567"><a href="#Tokenizer-567"><span class="linenos"> 567</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-568"><a href="#Tokenizer-568"><span class="linenos"> 568</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-569"><a href="#Tokenizer-569"><span class="linenos"> 569</span></a> <span class="s2">&quot;LAZY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LAZY</span><span class="p">,</span>
+</span><span id="Tokenizer-570"><a href="#Tokenizer-570"><span class="linenos"> 570</span></a> <span class="s2">&quot;LEADING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEADING</span><span class="p">,</span>
+</span><span id="Tokenizer-571"><a href="#Tokenizer-571"><span class="linenos"> 571</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-572"><a href="#Tokenizer-572"><span class="linenos"> 572</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-573"><a href="#Tokenizer-573"><span class="linenos"> 573</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-574"><a href="#Tokenizer-574"><span class="linenos"> 574</span></a> <span class="s2">&quot;LOAD DATA&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD_DATA</span><span class="p">,</span>
+</span><span id="Tokenizer-575"><a href="#Tokenizer-575"><span class="linenos"> 575</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCAL</span><span class="p">,</span>
+</span><span id="Tokenizer-576"><a href="#Tokenizer-576"><span class="linenos"> 576</span></a> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATERIALIZED</span><span class="p">,</span>
+</span><span id="Tokenizer-577"><a href="#Tokenizer-577"><span class="linenos"> 577</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-578"><a href="#Tokenizer-578"><span class="linenos"> 578</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-579"><a href="#Tokenizer-579"><span class="linenos"> 579</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-580"><a href="#Tokenizer-580"><span class="linenos"> 580</span></a> <span class="s2">&quot;NEXT VALUE FOR&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT_VALUE_FOR</span><span class="p">,</span>
+</span><span id="Tokenizer-581"><a href="#Tokenizer-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;NO ACTION&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NO_ACTION</span><span class="p">,</span>
+</span><span id="Tokenizer-582"><a href="#Tokenizer-582"><span class="linenos"> 582</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-583"><a href="#Tokenizer-583"><span class="linenos"> 583</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-584"><a href="#Tokenizer-584"><span class="linenos"> 584</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-585"><a href="#Tokenizer-585"><span class="linenos"> 585</span></a> <span class="s2">&quot;NULLS FIRST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_FIRST</span><span class="p">,</span>
+</span><span id="Tokenizer-586"><a href="#Tokenizer-586"><span class="linenos"> 586</span></a> <span class="s2">&quot;NULLS LAST&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLS_LAST</span><span class="p">,</span>
+</span><span id="Tokenizer-587"><a href="#Tokenizer-587"><span class="linenos"> 587</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-588"><a href="#Tokenizer-588"><span class="linenos"> 588</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-589"><a href="#Tokenizer-589"><span class="linenos"> 589</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-590"><a href="#Tokenizer-590"><span class="linenos"> 590</span></a> <span class="s2">&quot;ONLY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">,</span>
+</span><span id="Tokenizer-591"><a href="#Tokenizer-591"><span class="linenos"> 591</span></a> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPTIONS</span><span class="p">,</span>
+</span><span id="Tokenizer-592"><a href="#Tokenizer-592"><span class="linenos"> 592</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-593"><a href="#Tokenizer-593"><span class="linenos"> 593</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-594"><a href="#Tokenizer-594"><span class="linenos"> 594</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-595"><a href="#Tokenizer-595"><span class="linenos"> 595</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-596"><a href="#Tokenizer-596"><span class="linenos"> 596</span></a> <span class="s2">&quot;OUT OF&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUT_OF</span><span class="p">,</span>
+</span><span id="Tokenizer-597"><a href="#Tokenizer-597"><span class="linenos"> 597</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-598"><a href="#Tokenizer-598"><span class="linenos"> 598</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-599"><a href="#Tokenizer-599"><span class="linenos"> 599</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-600"><a href="#Tokenizer-600"><span class="linenos"> 600</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-601"><a href="#Tokenizer-601"><span class="linenos"> 601</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-602"><a href="#Tokenizer-602"><span class="linenos"> 602</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-603"><a href="#Tokenizer-603"><span class="linenos"> 603</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-604"><a href="#Tokenizer-604"><span class="linenos"> 604</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-605"><a href="#Tokenizer-605"><span class="linenos"> 605</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-606"><a href="#Tokenizer-606"><span class="linenos"> 606</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-607"><a href="#Tokenizer-607"><span class="linenos"> 607</span></a> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRECEDING</span><span class="p">,</span>
+</span><span id="Tokenizer-608"><a href="#Tokenizer-608"><span class="linenos"> 608</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-609"><a href="#Tokenizer-609"><span class="linenos"> 609</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-610"><a href="#Tokenizer-610"><span class="linenos"> 610</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-611"><a href="#Tokenizer-611"><span class="linenos"> 611</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-612"><a href="#Tokenizer-612"><span class="linenos"> 612</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-613"><a href="#Tokenizer-613"><span class="linenos"> 613</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-614"><a href="#Tokenizer-614"><span class="linenos"> 614</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-615"><a href="#Tokenizer-615"><span class="linenos"> 615</span></a> <span class="s2">&quot;RESPECT NULLS&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RESPECT_NULLS</span><span class="p">,</span>
+</span><span id="Tokenizer-616"><a href="#Tokenizer-616"><span class="linenos"> 616</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-617"><a href="#Tokenizer-617"><span class="linenos"> 617</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-618"><a href="#Tokenizer-618"><span class="linenos"> 618</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-619"><a href="#Tokenizer-619"><span class="linenos"> 619</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-620"><a href="#Tokenizer-620"><span class="linenos"> 620</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-621"><a href="#Tokenizer-621"><span class="linenos"> 621</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-622"><a href="#Tokenizer-622"><span class="linenos"> 622</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-623"><a href="#Tokenizer-623"><span class="linenos"> 623</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-624"><a href="#Tokenizer-624"><span class="linenos"> 624</span></a> <span class="s2">&quot;SEED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEED</span><span class="p">,</span>
+</span><span id="Tokenizer-625"><a href="#Tokenizer-625"><span class="linenos"> 625</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-626"><a href="#Tokenizer-626"><span class="linenos"> 626</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-627"><a href="#Tokenizer-627"><span class="linenos"> 627</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-628"><a href="#Tokenizer-628"><span class="linenos"> 628</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-629"><a href="#Tokenizer-629"><span class="linenos"> 629</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-630"><a href="#Tokenizer-630"><span class="linenos"> 630</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-631"><a href="#Tokenizer-631"><span class="linenos"> 631</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORTKEY</span><span class="p">,</span>
+</span><span id="Tokenizer-632"><a href="#Tokenizer-632"><span class="linenos"> 632</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-633"><a href="#Tokenizer-633"><span class="linenos"> 633</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-634"><a href="#Tokenizer-634"><span class="linenos"> 634</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-635"><a href="#Tokenizer-635"><span class="linenos"> 635</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-636"><a href="#Tokenizer-636"><span class="linenos"> 636</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-637"><a href="#Tokenizer-637"><span class="linenos"> 637</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-638"><a href="#Tokenizer-638"><span class="linenos"> 638</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-639"><a href="#Tokenizer-639"><span class="linenos"> 639</span></a> <span class="s2">&quot;TRAILING&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRAILING</span><span class="p">,</span>
+</span><span id="Tokenizer-640"><a href="#Tokenizer-640"><span class="linenos"> 640</span></a> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNBOUNDED</span><span class="p">,</span>
+</span><span id="Tokenizer-641"><a href="#Tokenizer-641"><span class="linenos"> 641</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-642"><a href="#Tokenizer-642"><span class="linenos"> 642</span></a> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNLOGGED</span><span class="p">,</span>
+</span><span id="Tokenizer-643"><a href="#Tokenizer-643"><span class="linenos"> 643</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-644"><a href="#Tokenizer-644"><span class="linenos"> 644</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-645"><a href="#Tokenizer-645"><span class="linenos"> 645</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-646"><a href="#Tokenizer-646"><span class="linenos"> 646</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-647"><a href="#Tokenizer-647"><span class="linenos"> 647</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-648"><a href="#Tokenizer-648"><span class="linenos"> 648</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-649"><a href="#Tokenizer-649"><span class="linenos"> 649</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-650"><a href="#Tokenizer-650"><span class="linenos"> 650</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-651"><a href="#Tokenizer-651"><span class="linenos"> 651</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-652"><a href="#Tokenizer-652"><span class="linenos"> 652</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-653"><a href="#Tokenizer-653"><span class="linenos"> 653</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-654"><a href="#Tokenizer-654"><span class="linenos"> 654</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-655"><a href="#Tokenizer-655"><span class="linenos"> 655</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-656"><a href="#Tokenizer-656"><span class="linenos"> 656</span></a> <span class="s2">&quot;WITH TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_TIME_ZONE</span><span class="p">,</span>
+</span><span id="Tokenizer-657"><a href="#Tokenizer-657"><span class="linenos"> 657</span></a> <span class="s2">&quot;WITH LOCAL TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH_LOCAL_TIME_ZONE</span><span class="p">,</span>
+</span><span id="Tokenizer-658"><a href="#Tokenizer-658"><span class="linenos"> 658</span></a> <span class="s2">&quot;WITHIN GROUP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHIN_GROUP</span><span class="p">,</span>
+</span><span id="Tokenizer-659"><a href="#Tokenizer-659"><span class="linenos"> 659</span></a> <span class="s2">&quot;WITHOUT TIME ZONE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITHOUT_TIME_ZONE</span><span class="p">,</span>
+</span><span id="Tokenizer-660"><a href="#Tokenizer-660"><span class="linenos"> 660</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-661"><a href="#Tokenizer-661"><span class="linenos"> 661</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-662"><a href="#Tokenizer-662"><span class="linenos"> 662</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-663"><a href="#Tokenizer-663"><span class="linenos"> 663</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-664"><a href="#Tokenizer-664"><span class="linenos"> 664</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-665"><a href="#Tokenizer-665"><span class="linenos"> 665</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-666"><a href="#Tokenizer-666"><span class="linenos"> 666</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-667"><a href="#Tokenizer-667"><span class="linenos"> 667</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-668"><a href="#Tokenizer-668"><span class="linenos"> 668</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-669"><a href="#Tokenizer-669"><span class="linenos"> 669</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-670"><a href="#Tokenizer-670"><span class="linenos"> 670</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-671"><a href="#Tokenizer-671"><span class="linenos"> 671</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-672"><a href="#Tokenizer-672"><span class="linenos"> 672</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-673"><a href="#Tokenizer-673"><span class="linenos"> 673</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-674"><a href="#Tokenizer-674"><span class="linenos"> 674</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-675"><a href="#Tokenizer-675"><span class="linenos"> 675</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">BIGINT</span><span class="p">,</span>
+</span><span id="Tokenizer-676"><a href="#Tokenizer-676"><span class="linenos"> 676</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-677"><a href="#Tokenizer-677"><span class="linenos"> 677</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-678"><a href="#Tokenizer-678"><span class="linenos"> 678</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-679"><a href="#Tokenizer-679"><span class="linenos"> 679</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-680"><a href="#Tokenizer-680"><span class="linenos"> 680</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-681"><a href="#Tokenizer-681"><span class="linenos"> 681</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-682"><a href="#Tokenizer-682"><span class="linenos"> 682</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-683"><a href="#Tokenizer-683"><span class="linenos"> 683</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-684"><a href="#Tokenizer-684"><span class="linenos"> 684</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-685"><a href="#Tokenizer-685"><span class="linenos"> 685</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-686"><a href="#Tokenizer-686"><span class="linenos"> 686</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-687"><a href="#Tokenizer-687"><span class="linenos"> 687</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-688"><a href="#Tokenizer-688"><span class="linenos"> 688</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-689"><a href="#Tokenizer-689"><span class="linenos"> 689</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-690"><a href="#Tokenizer-690"><span class="linenos"> 690</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-691"><a href="#Tokenizer-691"><span class="linenos"> 691</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-692"><a href="#Tokenizer-692"><span class="linenos"> 692</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-693"><a href="#Tokenizer-693"><span class="linenos"> 693</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-694"><a href="#Tokenizer-694"><span class="linenos"> 694</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-695"><a href="#Tokenizer-695"><span class="linenos"> 695</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-696"><a href="#Tokenizer-696"><span class="linenos"> 696</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-697"><a href="#Tokenizer-697"><span class="linenos"> 697</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-698"><a href="#Tokenizer-698"><span class="linenos"> 698</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-699"><a href="#Tokenizer-699"><span class="linenos"> 699</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-700"><a href="#Tokenizer-700"><span class="linenos"> 700</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-701"><a href="#Tokenizer-701"><span class="linenos"> 701</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-702"><a href="#Tokenizer-702"><span class="linenos"> 702</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-703"><a href="#Tokenizer-703"><span class="linenos"> 703</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-704"><a href="#Tokenizer-704"><span class="linenos"> 704</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-705"><a href="#Tokenizer-705"><span class="linenos"> 705</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-706"><a href="#Tokenizer-706"><span class="linenos"> 706</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-707"><a href="#Tokenizer-707"><span class="linenos"> 707</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-708"><a href="#Tokenizer-708"><span class="linenos"> 708</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-709"><a href="#Tokenizer-709"><span class="linenos"> 709</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-710"><a href="#Tokenizer-710"><span class="linenos"> 710</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-711"><a href="#Tokenizer-711"><span class="linenos"> 711</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-712"><a href="#Tokenizer-712"><span class="linenos"> 712</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-713"><a href="#Tokenizer-713"><span class="linenos"> 713</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-714"><a href="#Tokenizer-714"><span class="linenos"> 714</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-715"><a href="#Tokenizer-715"><span class="linenos"> 715</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-716"><a href="#Tokenizer-716"><span class="linenos"> 716</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-717"><a href="#Tokenizer-717"><span class="linenos"> 717</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-718"><a href="#Tokenizer-718"><span class="linenos"> 718</span></a> <span class="s2">&quot;ALTER AGGREGATE&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-719"><a href="#Tokenizer-719"><span class="linenos"> 719</span></a> <span class="s2">&quot;ALTER DEFAULT&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-720"><a href="#Tokenizer-720"><span class="linenos"> 720</span></a> <span class="s2">&quot;ALTER DOMAIN&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-721"><a href="#Tokenizer-721"><span class="linenos"> 721</span></a> <span class="s2">&quot;ALTER ROLE&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-722"><a href="#Tokenizer-722"><span class="linenos"> 722</span></a> <span class="s2">&quot;ALTER RULE&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-723"><a href="#Tokenizer-723"><span class="linenos"> 723</span></a> <span class="s2">&quot;ALTER SEQUENCE&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-724"><a href="#Tokenizer-724"><span class="linenos"> 724</span></a> <span class="s2">&quot;ALTER TYPE&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-725"><a href="#Tokenizer-725"><span class="linenos"> 725</span></a> <span class="s2">&quot;ALTER USER&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-726"><a href="#Tokenizer-726"><span class="linenos"> 726</span></a> <span class="s2">&quot;ALTER VIEW&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-727"><a href="#Tokenizer-727"><span class="linenos"> 727</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-728"><a href="#Tokenizer-728"><span class="linenos"> 728</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-729"><a href="#Tokenizer-729"><span class="linenos"> 729</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-730"><a href="#Tokenizer-730"><span class="linenos"> 730</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-731"><a href="#Tokenizer-731"><span class="linenos"> 731</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-732"><a href="#Tokenizer-732"><span class="linenos"> 732</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-733"><a href="#Tokenizer-733"><span class="linenos"> 733</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-734"><a href="#Tokenizer-734"><span class="linenos"> 734</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-735"><a href="#Tokenizer-735"><span class="linenos"> 735</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-736"><a href="#Tokenizer-736"><span class="linenos"> 736</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-737"><a href="#Tokenizer-737"><span class="linenos"> 737</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-738"><a href="#Tokenizer-738"><span class="linenos"> 738</span></a>
+</span><span id="Tokenizer-739"><a href="#Tokenizer-739"><span class="linenos"> 739</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-740"><a href="#Tokenizer-740"><span class="linenos"> 740</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-741"><a href="#Tokenizer-741"><span class="linenos"> 741</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-742"><a href="#Tokenizer-742"><span class="linenos"> 742</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-743"><a href="#Tokenizer-743"><span class="linenos"> 743</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-744"><a href="#Tokenizer-744"><span class="linenos"> 744</span></a> <span class="s2">&quot;</span><span class="se">\r\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-745"><a href="#Tokenizer-745"><span class="linenos"> 745</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-746"><a href="#Tokenizer-746"><span class="linenos"> 746</span></a>
+</span><span id="Tokenizer-747"><a href="#Tokenizer-747"><span class="linenos"> 747</span></a> <span class="n">COMMANDS</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="Tokenizer-748"><a href="#Tokenizer-748"><span class="linenos"> 748</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
+</span><span id="Tokenizer-749"><a href="#Tokenizer-749"><span class="linenos"> 749</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
+</span><span id="Tokenizer-750"><a href="#Tokenizer-750"><span class="linenos"> 750</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">,</span>
+</span><span id="Tokenizer-751"><a href="#Tokenizer-751"><span class="linenos"> 751</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
+</span><span id="Tokenizer-752"><a href="#Tokenizer-752"><span class="linenos"> 752</span></a> <span class="p">}</span>
+</span><span id="Tokenizer-753"><a href="#Tokenizer-753"><span class="linenos"> 753</span></a>
+</span><span id="Tokenizer-754"><a href="#Tokenizer-754"><span class="linenos"> 754</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-755"><a href="#Tokenizer-755"><span class="linenos"> 755</span></a>
-</span><span id="Tokenizer-756"><a href="#Tokenizer-756"><span class="linenos"> 756</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 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-757"><a href="#Tokenizer-757"><span class="linenos"> 757</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 class="c1"># autofilled</span>
-</span><span id="Tokenizer-758"><a href="#Tokenizer-758"><span class="linenos"> 758</span></a>
-</span><span id="Tokenizer-759"><a href="#Tokenizer-759"><span class="linenos"> 759</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-760"><a href="#Tokenizer-760"><span class="linenos"> 760</span></a>
-</span><span id="Tokenizer-761"><a href="#Tokenizer-761"><span class="linenos"> 761</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Tokenizer-762"><a href="#Tokenizer-762"><span class="linenos"> 762</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-763"><a href="#Tokenizer-763"><span class="linenos"> 763</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-764"><a href="#Tokenizer-764"><span class="linenos"> 764</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-765"><a href="#Tokenizer-765"><span class="linenos"> 765</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-766"><a href="#Tokenizer-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-767"><a href="#Tokenizer-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-768"><a href="#Tokenizer-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-769"><a href="#Tokenizer-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-770"><a href="#Tokenizer-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-771"><a href="#Tokenizer-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-772"><a href="#Tokenizer-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-773"><a href="#Tokenizer-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-774"><a href="#Tokenizer-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;_prev_token_comments&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-775"><a href="#Tokenizer-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;_prev_token_type&quot;</span><span class="p">,</span>
-</span><span id="Tokenizer-776"><a href="#Tokenizer-776"><span class="linenos"> 776</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-777"><a href="#Tokenizer-777"><span class="linenos"> 777</span></a>
-</span><span id="Tokenizer-778"><a href="#Tokenizer-778"><span class="linenos"> 778</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-779"><a href="#Tokenizer-779"><span class="linenos"> 779</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="Tokenizer-780"><a href="#Tokenizer-780"><span class="linenos"> 780</span></a>
-</span><span id="Tokenizer-781"><a href="#Tokenizer-781"><span class="linenos"> 781</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-782"><a href="#Tokenizer-782"><span class="linenos"> 782</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-783"><a href="#Tokenizer-783"><span class="linenos"> 783</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-784"><a href="#Tokenizer-784"><span class="linenos"> 784</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-785"><a href="#Tokenizer-785"><span class="linenos"> 785</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-786"><a href="#Tokenizer-786"><span class="linenos"> 786</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-787"><a href="#Tokenizer-787"><span class="linenos"> 787</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-788"><a href="#Tokenizer-788"><span class="linenos"> 788</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-789"><a href="#Tokenizer-789"><span class="linenos"> 789</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-790"><a href="#Tokenizer-790"><span class="linenos"> 790</span></a>
-</span><span id="Tokenizer-791"><a href="#Tokenizer-791"><span class="linenos"> 791</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-792"><a href="#Tokenizer-792"><span class="linenos"> 792</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-793"><a href="#Tokenizer-793"><span class="linenos"> 793</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-794"><a href="#Tokenizer-794"><span class="linenos"> 794</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-795"><a href="#Tokenizer-795"><span class="linenos"> 795</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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-796"><a href="#Tokenizer-796"><span class="linenos"> 796</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-797"><a href="#Tokenizer-797"><span class="linenos"> 797</span></a>
-</span><span id="Tokenizer-798"><a href="#Tokenizer-798"><span class="linenos"> 798</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-799"><a href="#Tokenizer-799"><span class="linenos"> 799</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-800"><a href="#Tokenizer-800"><span class="linenos"> 800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
-</span><span id="Tokenizer-801"><a href="#Tokenizer-801"><span class="linenos"> 801</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-802"><a href="#Tokenizer-802"><span class="linenos"> 802</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-803"><a href="#Tokenizer-803"><span class="linenos"> 803</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-804"><a href="#Tokenizer-804"><span class="linenos"> 804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
-</span><span id="Tokenizer-805"><a href="#Tokenizer-805"><span class="linenos"> 805</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-806"><a href="#Tokenizer-806"><span class="linenos"> 806</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">50</span>
-</span><span id="Tokenizer-807"><a href="#Tokenizer-807"><span class="linenos"> 807</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">50</span>
-</span><span id="Tokenizer-808"><a href="#Tokenizer-808"><span class="linenos"> 808</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
-</span><span id="Tokenizer-809"><a href="#Tokenizer-809"><span class="linenos"> 809</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">end</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="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Tokenizer-810"><a href="#Tokenizer-810"><span class="linenos"> 810</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-811"><a href="#Tokenizer-811"><span class="linenos"> 811</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;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-812"><a href="#Tokenizer-812"><span class="linenos"> 812</span></a>
-</span><span id="Tokenizer-813"><a href="#Tokenizer-813"><span class="linenos"> 813</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-814"><a href="#Tokenizer-814"><span class="linenos"> 814</span></a>
-</span><span id="Tokenizer-815"><a href="#Tokenizer-815"><span class="linenos"> 815</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-816"><a href="#Tokenizer-816"><span class="linenos"> 816</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-817"><a href="#Tokenizer-817"><span class="linenos"> 817</span></a> <span class="bp">self</span><span class="o">.</span><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-818"><a href="#Tokenizer-818"><span class="linenos"> 818</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-819"><a href="#Tokenizer-819"><span class="linenos"> 819</span></a>
-</span><span id="Tokenizer-820"><a href="#Tokenizer-820"><span class="linenos"> 820</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-821"><a href="#Tokenizer-821"><span class="linenos"> 821</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-822"><a href="#Tokenizer-822"><span class="linenos"> 822</span></a>
-</span><span id="Tokenizer-823"><a href="#Tokenizer-823"><span class="linenos"> 823</span></a> <span class="k">if</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">WHITE_SPACE</span><span class="p">:</span>
-</span><span id="Tokenizer-824"><a href="#Tokenizer-824"><span class="linenos"> 824</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-825"><a href="#Tokenizer-825"><span class="linenos"> 825</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-826"><a href="#Tokenizer-826"><span class="linenos"> 826</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-827"><a href="#Tokenizer-827"><span class="linenos"> 827</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-828"><a href="#Tokenizer-828"><span class="linenos"> 828</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-829"><a href="#Tokenizer-829"><span class="linenos"> 829</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-830"><a href="#Tokenizer-830"><span class="linenos"> 830</span></a>
-</span><span id="Tokenizer-831"><a href="#Tokenizer-831"><span class="linenos"> 831</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-832"><a href="#Tokenizer-832"><span class="linenos"> 832</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-833"><a href="#Tokenizer-833"><span class="linenos"> 833</span></a>
-</span><span id="Tokenizer-834"><a href="#Tokenizer-834"><span class="linenos"> 834</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
-</span><span id="Tokenizer-835"><a href="#Tokenizer-835"><span class="linenos"> 835</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-836"><a href="#Tokenizer-836"><span class="linenos"> 836</span></a>
-</span><span id="Tokenizer-837"><a href="#Tokenizer-837"><span class="linenos"> 837</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-838"><a href="#Tokenizer-838"><span class="linenos"> 838</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-839"><a href="#Tokenizer-839"><span class="linenos"> 839</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-840"><a href="#Tokenizer-840"><span class="linenos"> 840</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-841"><a href="#Tokenizer-841"><span class="linenos"> 841</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-842"><a href="#Tokenizer-842"><span class="linenos"> 842</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-843"><a href="#Tokenizer-843"><span class="linenos"> 843</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><span id="Tokenizer-844"><a href="#Tokenizer-844"><span class="linenos"> 844</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-845"><a href="#Tokenizer-845"><span class="linenos"> 845</span></a>
-</span><span id="Tokenizer-846"><a href="#Tokenizer-846"><span class="linenos"> 846</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-847"><a href="#Tokenizer-847"><span class="linenos"> 847</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-848"><a href="#Tokenizer-848"><span class="linenos"> 848</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-849"><a href="#Tokenizer-849"><span class="linenos"> 849</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-850"><a href="#Tokenizer-850"><span class="linenos"> 850</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-851"><a href="#Tokenizer-851"><span class="linenos"> 851</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-852"><a href="#Tokenizer-852"><span class="linenos"> 852</span></a>
-</span><span id="Tokenizer-853"><a href="#Tokenizer-853"><span class="linenos"> 853</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-854"><a href="#Tokenizer-854"><span class="linenos"> 854</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-855"><a href="#Tokenizer-855"><span class="linenos"> 855</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-856"><a href="#Tokenizer-856"><span class="linenos"> 856</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-857"><a href="#Tokenizer-857"><span class="linenos"> 857</span></a>
-</span><span id="Tokenizer-858"><a href="#Tokenizer-858"><span class="linenos"> 858</span></a> <span class="nd">@property</span>
-</span><span id="Tokenizer-859"><a href="#Tokenizer-859"><span class="linenos"> 859</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-860"><a href="#Tokenizer-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="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-756"><a href="#Tokenizer-756"><span class="linenos"> 756</span></a> <span class="c1"># handle numeric literals like in hive (3L = BIGINT)</span>
+</span><span id="Tokenizer-757"><a href="#Tokenizer-757"><span class="linenos"> 757</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-758"><a href="#Tokenizer-758"><span class="linenos"> 758</span></a> <span class="n">ENCODE</span><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="Tokenizer-759"><a href="#Tokenizer-759"><span class="linenos"> 759</span></a>
+</span><span id="Tokenizer-760"><a href="#Tokenizer-760"><span class="linenos"> 760</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 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-761"><a href="#Tokenizer-761"><span class="linenos"> 761</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 class="c1"># autofilled</span>
+</span><span id="Tokenizer-762"><a href="#Tokenizer-762"><span class="linenos"> 762</span></a>
+</span><span id="Tokenizer-763"><a href="#Tokenizer-763"><span class="linenos"> 763</span></a> <span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-764"><a href="#Tokenizer-764"><span class="linenos"> 764</span></a>
+</span><span id="Tokenizer-765"><a href="#Tokenizer-765"><span class="linenos"> 765</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Tokenizer-766"><a href="#Tokenizer-766"><span class="linenos"> 766</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-767"><a href="#Tokenizer-767"><span class="linenos"> 767</span></a> <span class="s2">&quot;size&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-768"><a href="#Tokenizer-768"><span class="linenos"> 768</span></a> <span class="s2">&quot;tokens&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-769"><a href="#Tokenizer-769"><span class="linenos"> 769</span></a> <span class="s2">&quot;_start&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-770"><a href="#Tokenizer-770"><span class="linenos"> 770</span></a> <span class="s2">&quot;_current&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-771"><a href="#Tokenizer-771"><span class="linenos"> 771</span></a> <span class="s2">&quot;_line&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-772"><a href="#Tokenizer-772"><span class="linenos"> 772</span></a> <span class="s2">&quot;_col&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-773"><a href="#Tokenizer-773"><span class="linenos"> 773</span></a> <span class="s2">&quot;_comments&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-774"><a href="#Tokenizer-774"><span class="linenos"> 774</span></a> <span class="s2">&quot;_char&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-775"><a href="#Tokenizer-775"><span class="linenos"> 775</span></a> <span class="s2">&quot;_end&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-776"><a href="#Tokenizer-776"><span class="linenos"> 776</span></a> <span class="s2">&quot;_peek&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-777"><a href="#Tokenizer-777"><span class="linenos"> 777</span></a> <span class="s2">&quot;_prev_token_line&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-778"><a href="#Tokenizer-778"><span class="linenos"> 778</span></a> <span class="s2">&quot;_prev_token_comments&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-779"><a href="#Tokenizer-779"><span class="linenos"> 779</span></a> <span class="s2">&quot;_prev_token_type&quot;</span><span class="p">,</span>
+</span><span id="Tokenizer-780"><a href="#Tokenizer-780"><span class="linenos"> 780</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-781"><a href="#Tokenizer-781"><span class="linenos"> 781</span></a>
+</span><span id="Tokenizer-782"><a href="#Tokenizer-782"><span class="linenos"> 782</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">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-783"><a href="#Tokenizer-783"><span class="linenos"> 783</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Tokenizer-784"><a href="#Tokenizer-784"><span class="linenos"> 784</span></a>
+</span><span id="Tokenizer-785"><a href="#Tokenizer-785"><span class="linenos"> 785</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-786"><a href="#Tokenizer-786"><span class="linenos"> 786</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-787"><a href="#Tokenizer-787"><span class="linenos"> 787</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-788"><a href="#Tokenizer-788"><span class="linenos"> 788</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-789"><a href="#Tokenizer-789"><span class="linenos"> 789</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-790"><a href="#Tokenizer-790"><span class="linenos"> 790</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-791"><a href="#Tokenizer-791"><span class="linenos"> 791</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-792"><a href="#Tokenizer-792"><span class="linenos"> 792</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-793"><a href="#Tokenizer-793"><span class="linenos"> 793</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-794"><a href="#Tokenizer-794"><span class="linenos"> 794</span></a>
+</span><span id="Tokenizer-795"><a href="#Tokenizer-795"><span class="linenos"> 795</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-796"><a href="#Tokenizer-796"><span class="linenos"> 796</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-797"><a href="#Tokenizer-797"><span class="linenos"> 797</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-798"><a href="#Tokenizer-798"><span class="linenos"> 798</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-799"><a href="#Tokenizer-799"><span class="linenos"> 799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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-800"><a href="#Tokenizer-800"><span class="linenos"> 800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-801"><a href="#Tokenizer-801"><span class="linenos"> 801</span></a>
+</span><span id="Tokenizer-802"><a href="#Tokenizer-802"><span class="linenos"> 802</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-803"><a href="#Tokenizer-803"><span class="linenos"> 803</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-804"><a href="#Tokenizer-804"><span class="linenos"> 804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+</span><span id="Tokenizer-805"><a href="#Tokenizer-805"><span class="linenos"> 805</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-806"><a href="#Tokenizer-806"><span class="linenos"> 806</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-807"><a href="#Tokenizer-807"><span class="linenos"> 807</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-808"><a href="#Tokenizer-808"><span class="linenos"> 808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_scan</span><span class="p">()</span>
+</span><span id="Tokenizer-809"><a href="#Tokenizer-809"><span class="linenos"> 809</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-810"><a href="#Tokenizer-810"><span class="linenos"> 810</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">50</span>
+</span><span id="Tokenizer-811"><a href="#Tokenizer-811"><span class="linenos"> 811</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">50</span>
+</span><span id="Tokenizer-812"><a href="#Tokenizer-812"><span class="linenos"> 812</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
+</span><span id="Tokenizer-813"><a href="#Tokenizer-813"><span class="linenos"> 813</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">end</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="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Tokenizer-814"><a href="#Tokenizer-814"><span class="linenos"> 814</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-815"><a href="#Tokenizer-815"><span class="linenos"> 815</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;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-816"><a href="#Tokenizer-816"><span class="linenos"> 816</span></a>
+</span><span id="Tokenizer-817"><a href="#Tokenizer-817"><span class="linenos"> 817</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-818"><a href="#Tokenizer-818"><span class="linenos"> 818</span></a>
+</span><span id="Tokenizer-819"><a href="#Tokenizer-819"><span class="linenos"> 819</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-820"><a href="#Tokenizer-820"><span class="linenos"> 820</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-821"><a href="#Tokenizer-821"><span class="linenos"> 821</span></a> <span class="bp">self</span><span class="o">.</span><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-822"><a href="#Tokenizer-822"><span class="linenos"> 822</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-823"><a href="#Tokenizer-823"><span class="linenos"> 823</span></a>
+</span><span id="Tokenizer-824"><a href="#Tokenizer-824"><span class="linenos"> 824</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-825"><a href="#Tokenizer-825"><span class="linenos"> 825</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-826"><a href="#Tokenizer-826"><span class="linenos"> 826</span></a>
+</span><span id="Tokenizer-827"><a href="#Tokenizer-827"><span class="linenos"> 827</span></a> <span class="k">if</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">WHITE_SPACE</span><span class="p">:</span>
+</span><span id="Tokenizer-828"><a href="#Tokenizer-828"><span class="linenos"> 828</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-829"><a href="#Tokenizer-829"><span class="linenos"> 829</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-830"><a href="#Tokenizer-830"><span class="linenos"> 830</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-831"><a href="#Tokenizer-831"><span class="linenos"> 831</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-832"><a href="#Tokenizer-832"><span class="linenos"> 832</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-833"><a href="#Tokenizer-833"><span class="linenos"> 833</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-834"><a href="#Tokenizer-834"><span class="linenos"> 834</span></a>
+</span><span id="Tokenizer-835"><a href="#Tokenizer-835"><span class="linenos"> 835</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-836"><a href="#Tokenizer-836"><span class="linenos"> 836</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-837"><a href="#Tokenizer-837"><span class="linenos"> 837</span></a>
+</span><span id="Tokenizer-838"><a href="#Tokenizer-838"><span class="linenos"> 838</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span><span class="p">:</span>
+</span><span id="Tokenizer-839"><a href="#Tokenizer-839"><span class="linenos"> 839</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-840"><a href="#Tokenizer-840"><span class="linenos"> 840</span></a>
+</span><span id="Tokenizer-841"><a href="#Tokenizer-841"><span class="linenos"> 841</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-842"><a href="#Tokenizer-842"><span class="linenos"> 842</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-843"><a href="#Tokenizer-843"><span class="linenos"> 843</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-844"><a href="#Tokenizer-844"><span class="linenos"> 844</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-845"><a href="#Tokenizer-845"><span class="linenos"> 845</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-846"><a href="#Tokenizer-846"><span class="linenos"> 846</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-847"><a href="#Tokenizer-847"><span class="linenos"> 847</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><span id="Tokenizer-848"><a href="#Tokenizer-848"><span class="linenos"> 848</span></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-849"><a href="#Tokenizer-849"><span class="linenos"> 849</span></a>
+</span><span id="Tokenizer-850"><a href="#Tokenizer-850"><span class="linenos"> 850</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="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-851"><a href="#Tokenizer-851"><span class="linenos"> 851</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-852"><a href="#Tokenizer-852"><span class="linenos"> 852</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-853"><a href="#Tokenizer-853"><span class="linenos"> 853</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-854"><a href="#Tokenizer-854"><span class="linenos"> 854</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-855"><a href="#Tokenizer-855"><span class="linenos"> 855</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-856"><a href="#Tokenizer-856"><span class="linenos"> 856</span></a>
+</span><span id="Tokenizer-857"><a href="#Tokenizer-857"><span class="linenos"> 857</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-858"><a href="#Tokenizer-858"><span class="linenos"> 858</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-859"><a href="#Tokenizer-859"><span class="linenos"> 859</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-860"><a href="#Tokenizer-860"><span class="linenos"> 860</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-861"><a href="#Tokenizer-861"><span class="linenos"> 861</span></a>
-</span><span id="Tokenizer-862"><a href="#Tokenizer-862"><span class="linenos"> 862</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-863"><a href="#Tokenizer-863"><span class="linenos"> 863</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-864"><a href="#Tokenizer-864"><span class="linenos"> 864</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span>
-</span><span id="Tokenizer-865"><a href="#Tokenizer-865"><span class="linenos"> 865</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_type</span> <span class="o">=</span> <span class="n">token_type</span>
-</span><span id="Tokenizer-866"><a href="#Tokenizer-866"><span class="linenos"> 866</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-867"><a href="#Tokenizer-867"><span class="linenos"> 867</span></a> <span class="n">Token</span><span class="p">(</span>
-</span><span id="Tokenizer-868"><a href="#Tokenizer-868"><span class="linenos"> 868</span></a> <span class="n">token_type</span><span class="p">,</span>
-</span><span id="Tokenizer-869"><a href="#Tokenizer-869"><span class="linenos"> 869</span></a> <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-870"><a href="#Tokenizer-870"><span class="linenos"> 870</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
-</span><span id="Tokenizer-871"><a href="#Tokenizer-871"><span class="linenos"> 871</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
-</span><span id="Tokenizer-872"><a href="#Tokenizer-872"><span class="linenos"> 872</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">,</span>
-</span><span id="Tokenizer-873"><a href="#Tokenizer-873"><span class="linenos"> 873</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
-</span><span id="Tokenizer-874"><a href="#Tokenizer-874"><span class="linenos"> 874</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-875"><a href="#Tokenizer-875"><span class="linenos"> 875</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-876"><a href="#Tokenizer-876"><span class="linenos"> 876</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-877"><a href="#Tokenizer-877"><span class="linenos"> 877</span></a>
-</span><span id="Tokenizer-878"><a href="#Tokenizer-878"><span class="linenos"> 878</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-879"><a href="#Tokenizer-879"><span class="linenos"> 879</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
-</span><span id="Tokenizer-880"><a href="#Tokenizer-880"><span class="linenos"> 880</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Tokenizer-881"><a href="#Tokenizer-881"><span class="linenos"> 881</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-882"><a href="#Tokenizer-882"><span class="linenos"> 882</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-883"><a href="#Tokenizer-883"><span class="linenos"> 883</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-884"><a href="#Tokenizer-884"><span class="linenos"> 884</span></a> <span class="p">):</span>
-</span><span id="Tokenizer-885"><a href="#Tokenizer-885"><span class="linenos"> 885</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-886"><a href="#Tokenizer-886"><span class="linenos"> 886</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-887"><a href="#Tokenizer-887"><span class="linenos"> 887</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-888"><a href="#Tokenizer-888"><span class="linenos"> 888</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-889"><a href="#Tokenizer-889"><span class="linenos"> 889</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-890"><a href="#Tokenizer-890"><span class="linenos"> 890</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="Tokenizer-891"><a href="#Tokenizer-891"><span class="linenos"> 891</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-892"><a href="#Tokenizer-892"><span class="linenos"> 892</span></a>
-</span><span id="Tokenizer-893"><a href="#Tokenizer-893"><span class="linenos"> 893</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-894"><a href="#Tokenizer-894"><span class="linenos"> 894</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="Tokenizer-895"><a href="#Tokenizer-895"><span class="linenos"> 895</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-896"><a href="#Tokenizer-896"><span class="linenos"> 896</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-897"><a href="#Tokenizer-897"><span class="linenos"> 897</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="Tokenizer-898"><a href="#Tokenizer-898"><span class="linenos"> 898</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-899"><a href="#Tokenizer-899"><span class="linenos"> 899</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-900"><a href="#Tokenizer-900"><span class="linenos"> 900</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-901"><a href="#Tokenizer-901"><span class="linenos"> 901</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-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">while</span> <span class="n">chars</span><span class="p">:</span>
-</span><span id="Tokenizer-904"><a href="#Tokenizer-904"><span class="linenos"> 904</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
-</span><span id="Tokenizer-905"><a href="#Tokenizer-905"><span class="linenos"> 905</span></a> <span class="n">result</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-906"><a href="#Tokenizer-906"><span class="linenos"> 906</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-907"><a href="#Tokenizer-907"><span class="linenos"> 907</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-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="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Tokenizer-910"><a href="#Tokenizer-910"><span class="linenos"> 910</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-911"><a href="#Tokenizer-911"><span class="linenos"> 911</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Tokenizer-912"><a href="#Tokenizer-912"><span class="linenos"> 912</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
-</span><span id="Tokenizer-913"><a href="#Tokenizer-913"><span class="linenos"> 913</span></a> <span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Tokenizer-914"><a href="#Tokenizer-914"><span class="linenos"> 914</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="o">+</span> <span class="n">size</span>
-</span><span id="Tokenizer-915"><a href="#Tokenizer-915"><span class="linenos"> 915</span></a>
-</span><span id="Tokenizer-916"><a href="#Tokenizer-916"><span class="linenos"> 916</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-917"><a href="#Tokenizer-917"><span class="linenos"> 917</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-918"><a href="#Tokenizer-918"><span class="linenos"> 918</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-919"><a href="#Tokenizer-919"><span class="linenos"> 919</span></a> <span class="n">is_space</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">WHITE_SPACE</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="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-922"><a href="#Tokenizer-922"><span class="linenos"> 922</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
-</span><span id="Tokenizer-923"><a href="#Tokenizer-923"><span class="linenos"> 923</span></a> <span class="n">char</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="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
-</span><span id="Tokenizer-925"><a href="#Tokenizer-925"><span class="linenos"> 925</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
-</span><span id="Tokenizer-926"><a href="#Tokenizer-926"><span class="linenos"> 926</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-927"><a href="#Tokenizer-927"><span class="linenos"> 927</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-928"><a href="#Tokenizer-928"><span class="linenos"> 928</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Tokenizer-929"><a href="#Tokenizer-929"><span class="linenos"> 929</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-930"><a href="#Tokenizer-930"><span class="linenos"> 930</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
-</span><span id="Tokenizer-931"><a href="#Tokenizer-931"><span class="linenos"> 931</span></a>
-</span><span id="Tokenizer-932"><a href="#Tokenizer-932"><span class="linenos"> 932</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">single_token</span> <span class="ow">and</span> <span class="n">chars</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span> <span class="k">else</span> <span class="n">word</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">if</span> <span class="ow">not</span> <span class="n">word</span><span class="p">:</span>
-</span><span id="Tokenizer-935"><a href="#Tokenizer-935"><span class="linenos"> 935</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-936"><a href="#Tokenizer-936"><span class="linenos"> 936</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-937"><a href="#Tokenizer-937"><span class="linenos"> 937</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-938"><a href="#Tokenizer-938"><span class="linenos"> 938</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-939"><a href="#Tokenizer-939"><span class="linenos"> 939</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-940"><a href="#Tokenizer-940"><span class="linenos"> 940</span></a>
-</span><span id="Tokenizer-941"><a href="#Tokenizer-941"><span class="linenos"> 941</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-942"><a href="#Tokenizer-942"><span class="linenos"> 942</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-943"><a href="#Tokenizer-943"><span class="linenos"> 943</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_formatted_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
-</span><span id="Tokenizer-944"><a href="#Tokenizer-944"><span class="linenos"> 944</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-945"><a href="#Tokenizer-945"><span class="linenos"> 945</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-862"><a href="#Tokenizer-862"><span class="linenos"> 862</span></a> <span class="nd">@property</span>
+</span><span id="Tokenizer-863"><a href="#Tokenizer-863"><span class="linenos"> 863</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-864"><a href="#Tokenizer-864"><span class="linenos"> 864</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-865"><a href="#Tokenizer-865"><span class="linenos"> 865</span></a>
+</span><span id="Tokenizer-866"><a href="#Tokenizer-866"><span class="linenos"> 866</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-867"><a href="#Tokenizer-867"><span class="linenos"> 867</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-868"><a href="#Tokenizer-868"><span class="linenos"> 868</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span>
+</span><span id="Tokenizer-869"><a href="#Tokenizer-869"><span class="linenos"> 869</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_type</span> <span class="o">=</span> <span class="n">token_type</span>
+</span><span id="Tokenizer-870"><a href="#Tokenizer-870"><span class="linenos"> 870</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-871"><a href="#Tokenizer-871"><span class="linenos"> 871</span></a> <span class="n">Token</span><span class="p">(</span>
+</span><span id="Tokenizer-872"><a href="#Tokenizer-872"><span class="linenos"> 872</span></a> <span class="n">token_type</span><span class="p">,</span>
+</span><span id="Tokenizer-873"><a href="#Tokenizer-873"><span class="linenos"> 873</span></a> <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-874"><a href="#Tokenizer-874"><span class="linenos"> 874</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_line</span><span class="p">,</span>
+</span><span id="Tokenizer-875"><a href="#Tokenizer-875"><span class="linenos"> 875</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_col</span><span class="p">,</span>
+</span><span id="Tokenizer-876"><a href="#Tokenizer-876"><span class="linenos"> 876</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_current</span><span class="p">,</span>
+</span><span id="Tokenizer-877"><a href="#Tokenizer-877"><span class="linenos"> 877</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_comments</span><span class="p">,</span>
+</span><span id="Tokenizer-878"><a href="#Tokenizer-878"><span class="linenos"> 878</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-879"><a href="#Tokenizer-879"><span class="linenos"> 879</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-880"><a href="#Tokenizer-880"><span class="linenos"> 880</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-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="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-883"><a href="#Tokenizer-883"><span class="linenos"> 883</span></a> <span class="c1"># whatever follows the command&#39;s token as a string</span>
+</span><span id="Tokenizer-884"><a href="#Tokenizer-884"><span class="linenos"> 884</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Tokenizer-885"><a href="#Tokenizer-885"><span class="linenos"> 885</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-886"><a href="#Tokenizer-886"><span class="linenos"> 886</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-887"><a href="#Tokenizer-887"><span class="linenos"> 887</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-888"><a href="#Tokenizer-888"><span class="linenos"> 888</span></a> <span class="p">):</span>
+</span><span id="Tokenizer-889"><a href="#Tokenizer-889"><span class="linenos"> 889</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-890"><a href="#Tokenizer-890"><span class="linenos"> 890</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-891"><a href="#Tokenizer-891"><span class="linenos"> 891</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-892"><a href="#Tokenizer-892"><span class="linenos"> 892</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-893"><a href="#Tokenizer-893"><span class="linenos"> 893</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-894"><a href="#Tokenizer-894"><span class="linenos"> 894</span></a> <span class="k">if</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="Tokenizer-895"><a href="#Tokenizer-895"><span class="linenos"> 895</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-896"><a href="#Tokenizer-896"><span class="linenos"> 896</span></a>
+</span><span id="Tokenizer-897"><a href="#Tokenizer-897"><span class="linenos"> 897</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-898"><a href="#Tokenizer-898"><span class="linenos"> 898</span></a> <span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-899"><a href="#Tokenizer-899"><span class="linenos"> 899</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-900"><a href="#Tokenizer-900"><span class="linenos"> 900</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-901"><a href="#Tokenizer-901"><span class="linenos"> 901</span></a> <span class="n">char</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="Tokenizer-902"><a href="#Tokenizer-902"><span class="linenos"> 902</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-903"><a href="#Tokenizer-903"><span class="linenos"> 903</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-904"><a href="#Tokenizer-904"><span class="linenos"> 904</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-905"><a href="#Tokenizer-905"><span class="linenos"> 905</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-906"><a href="#Tokenizer-906"><span class="linenos"> 906</span></a>
+</span><span id="Tokenizer-907"><a href="#Tokenizer-907"><span class="linenos"> 907</span></a> <span class="k">while</span> <span class="n">chars</span><span class="p">:</span>
+</span><span id="Tokenizer-908"><a href="#Tokenizer-908"><span class="linenos"> 908</span></a> <span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
+</span><span id="Tokenizer-909"><a href="#Tokenizer-909"><span class="linenos"> 909</span></a> <span class="n">result</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Tokenizer-910"><a href="#Tokenizer-910"><span class="linenos"> 910</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-911"><a href="#Tokenizer-911"><span class="linenos"> 911</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-912"><a href="#Tokenizer-912"><span class="linenos"> 912</span></a>
+</span><span id="Tokenizer-913"><a href="#Tokenizer-913"><span class="linenos"> 913</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Tokenizer-914"><a href="#Tokenizer-914"><span class="linenos"> 914</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-915"><a href="#Tokenizer-915"><span class="linenos"> 915</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Tokenizer-916"><a href="#Tokenizer-916"><span class="linenos"> 916</span></a> <span class="n">word</span> <span class="o">=</span> <span class="n">chars</span>
+</span><span id="Tokenizer-917"><a href="#Tokenizer-917"><span class="linenos"> 917</span></a> <span class="n">size</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="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="o">+</span> <span class="n">size</span>
+</span><span id="Tokenizer-919"><a href="#Tokenizer-919"><span class="linenos"> 919</span></a>
+</span><span id="Tokenizer-920"><a href="#Tokenizer-920"><span class="linenos"> 920</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-921"><a href="#Tokenizer-921"><span class="linenos"> 921</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-922"><a href="#Tokenizer-922"><span class="linenos"> 922</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-923"><a href="#Tokenizer-923"><span class="linenos"> 923</span></a> <span class="n">is_space</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">WHITE_SPACE</span>
+</span><span id="Tokenizer-924"><a href="#Tokenizer-924"><span class="linenos"> 924</span></a>
+</span><span id="Tokenizer-925"><a href="#Tokenizer-925"><span class="linenos"> 925</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-926"><a href="#Tokenizer-926"><span class="linenos"> 926</span></a> <span class="k">if</span> <span class="n">is_space</span><span class="p">:</span>
+</span><span id="Tokenizer-927"><a href="#Tokenizer-927"><span class="linenos"> 927</span></a> <span class="n">char</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Tokenizer-928"><a href="#Tokenizer-928"><span class="linenos"> 928</span></a> <span class="n">chars</span> <span class="o">+=</span> <span class="n">char</span>
+</span><span id="Tokenizer-929"><a href="#Tokenizer-929"><span class="linenos"> 929</span></a> <span class="n">prev_space</span> <span class="o">=</span> <span class="n">is_space</span>
+</span><span id="Tokenizer-930"><a href="#Tokenizer-930"><span class="linenos"> 930</span></a> <span class="n">skip</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="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-932"><a href="#Tokenizer-932"><span class="linenos"> 932</span></a> <span class="n">skip</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Tokenizer-933"><a href="#Tokenizer-933"><span class="linenos"> 933</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-934"><a href="#Tokenizer-934"><span class="linenos"> 934</span></a> <span class="n">chars</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+</span><span id="Tokenizer-935"><a href="#Tokenizer-935"><span class="linenos"> 935</span></a>
+</span><span id="Tokenizer-936"><a href="#Tokenizer-936"><span class="linenos"> 936</span></a> <span class="n">word</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">single_token</span> <span class="ow">and</span> <span class="n">chars</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">WHITE_SPACE</span> <span class="k">else</span> <span class="n">word</span>
+</span><span id="Tokenizer-937"><a href="#Tokenizer-937"><span class="linenos"> 937</span></a>
+</span><span id="Tokenizer-938"><a href="#Tokenizer-938"><span class="linenos"> 938</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">word</span><span class="p">:</span>
+</span><span id="Tokenizer-939"><a href="#Tokenizer-939"><span class="linenos"> 939</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-940"><a href="#Tokenizer-940"><span class="linenos"> 940</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-941"><a href="#Tokenizer-941"><span class="linenos"> 941</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-942"><a href="#Tokenizer-942"><span class="linenos"> 942</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-943"><a href="#Tokenizer-943"><span class="linenos"> 943</span></a> <span class="k">return</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">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-946"><a href="#Tokenizer-946"><span class="linenos"> 946</span></a> <span class="k">return</span>
-</span><span id="Tokenizer-947"><a href="#Tokenizer-947"><span class="linenos"> 947</span></a>
-</span><span id="Tokenizer-948"><a href="#Tokenizer-948"><span class="linenos"> 948</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-949"><a href="#Tokenizer-949"><span class="linenos"> 949</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-950"><a href="#Tokenizer-950"><span class="linenos"> 950</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-947"><a href="#Tokenizer-947"><span class="linenos"> 947</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_scan_formatted_string</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
+</span><span id="Tokenizer-948"><a href="#Tokenizer-948"><span class="linenos"> 948</span></a> <span class="k">return</span>
+</span><span id="Tokenizer-949"><a href="#Tokenizer-949"><span class="linenos"> 949</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-950"><a href="#Tokenizer-950"><span class="linenos"> 950</span></a> <span class="k">return</span>
</span><span id="Tokenizer-951"><a href="#Tokenizer-951"><span class="linenos"> 951</span></a>
-</span><span id="Tokenizer-952"><a href="#Tokenizer-952"><span class="linenos"> 952</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-953"><a href="#Tokenizer-953"><span class="linenos"> 953</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-954"><a href="#Tokenizer-954"><span class="linenos"> 954</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Tokenizer-952"><a href="#Tokenizer-952"><span class="linenos"> 952</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-953"><a href="#Tokenizer-953"><span class="linenos"> 953</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-954"><a href="#Tokenizer-954"><span class="linenos"> 954</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-955"><a href="#Tokenizer-955"><span class="linenos"> 955</span></a>
-</span><span id="Tokenizer-956"><a href="#Tokenizer-956"><span class="linenos"> 956</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-957"><a href="#Tokenizer-957"><span class="linenos"> 957</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-958"><a href="#Tokenizer-958"><span class="linenos"> 958</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-956"><a href="#Tokenizer-956"><span class="linenos"> 956</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-957"><a href="#Tokenizer-957"><span class="linenos"> 957</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-958"><a href="#Tokenizer-958"><span class="linenos"> 958</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Tokenizer-959"><a href="#Tokenizer-959"><span class="linenos"> 959</span></a>
-</span><span id="Tokenizer-960"><a href="#Tokenizer-960"><span class="linenos"> 960</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
-</span><span id="Tokenizer-961"><a href="#Tokenizer-961"><span class="linenos"> 961</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
-</span><span id="Tokenizer-962"><a href="#Tokenizer-962"><span class="linenos"> 962</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-960"><a href="#Tokenizer-960"><span class="linenos"> 960</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-961"><a href="#Tokenizer-961"><span class="linenos"> 961</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-962"><a href="#Tokenizer-962"><span class="linenos"> 962</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-963"><a href="#Tokenizer-963"><span class="linenos"> 963</span></a>
-</span><span id="Tokenizer-964"><a href="#Tokenizer-964"><span class="linenos"> 964</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-965"><a href="#Tokenizer-965"><span class="linenos"> 965</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-966"><a href="#Tokenizer-966"><span class="linenos"> 966</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-964"><a href="#Tokenizer-964"><span class="linenos"> 964</span></a> <span class="k">if</span> <span class="n">comment_end</span><span class="p">:</span>
+</span><span id="Tokenizer-965"><a href="#Tokenizer-965"><span class="linenos"> 965</span></a> <span class="c1"># Skip the comment&#39;s start delimiter</span>
+</span><span id="Tokenizer-966"><a href="#Tokenizer-966"><span class="linenos"> 966</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-967"><a href="#Tokenizer-967"><span class="linenos"> 967</span></a>
-</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">_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-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">comment_end_size</span> <span class="o">-</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 class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-971"><a href="#Tokenizer-971"><span class="linenos"> 971</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="ow">not</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="n">TokenType</span><span class="o">.</span><span class="n">BREAK</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">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-973"><a href="#Tokenizer-973"><span class="linenos"> 973</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-974"><a href="#Tokenizer-974"><span class="linenos"> 974</span></a>
-</span><span id="Tokenizer-975"><a href="#Tokenizer-975"><span class="linenos"> 975</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
-</span><span id="Tokenizer-976"><a href="#Tokenizer-976"><span class="linenos"> 976</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
-</span><span id="Tokenizer-977"><a href="#Tokenizer-977"><span class="linenos"> 977</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-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 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-980"><a href="#Tokenizer-980"><span class="linenos"> 980</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-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">return</span> <span class="kc">True</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="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-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">_char</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span><span class="p">:</span>
-</span><span id="Tokenizer-986"><a href="#Tokenizer-986"><span class="linenos"> 986</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-987"><a href="#Tokenizer-987"><span class="linenos"> 987</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-988"><a href="#Tokenizer-988"><span class="linenos"> 988</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><span id="Tokenizer-989"><a href="#Tokenizer-989"><span class="linenos"> 989</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-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">_scan_hex</span><span class="p">()</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">decimal</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Tokenizer-993"><a href="#Tokenizer-993"><span class="linenos"> 993</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</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">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-996"><a href="#Tokenizer-996"><span class="linenos"> 996</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-997"><a href="#Tokenizer-997"><span class="linenos"> 997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-998"><a href="#Tokenizer-998"><span class="linenos"> 998</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-999"><a href="#Tokenizer-999"><span class="linenos"> 999</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Tokenizer-1000"><a href="#Tokenizer-1000"><span class="linenos">1000</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1001"><a href="#Tokenizer-1001"><span class="linenos">1001</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-1002"><a href="#Tokenizer-1002"><span class="linenos">1002</span></a> <span class="n">scientific</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 class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1004"><a href="#Tokenizer-1004"><span class="linenos">1004</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-1005"><a href="#Tokenizer-1005"><span class="linenos">1005</span></a> <span class="n">scientific</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="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1007"><a href="#Tokenizer-1007"><span class="linenos">1007</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-1008"><a href="#Tokenizer-1008"><span class="linenos">1008</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-1009"><a href="#Tokenizer-1009"><span class="linenos">1009</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1010"><a href="#Tokenizer-1010"><span class="linenos">1010</span></a>
-</span><span id="Tokenizer-1011"><a href="#Tokenizer-1011"><span class="linenos">1011</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-1012"><a href="#Tokenizer-1012"><span class="linenos">1012</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Tokenizer-1013"><a href="#Tokenizer-1013"><span class="linenos">1013</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-968"><a href="#Tokenizer-968"><span class="linenos"> 968</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-969"><a href="#Tokenizer-969"><span class="linenos"> 969</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-970"><a href="#Tokenizer-970"><span class="linenos"> 970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-971"><a href="#Tokenizer-971"><span class="linenos"> 971</span></a>
+</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">_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-973"><a href="#Tokenizer-973"><span class="linenos"> 973</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-974"><a href="#Tokenizer-974"><span class="linenos"> 974</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-975"><a href="#Tokenizer-975"><span class="linenos"> 975</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="ow">not</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="n">TokenType</span><span class="o">.</span><span class="n">BREAK</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">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-977"><a href="#Tokenizer-977"><span class="linenos"> 977</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-978"><a href="#Tokenizer-978"><span class="linenos"> 978</span></a>
+</span><span id="Tokenizer-979"><a href="#Tokenizer-979"><span class="linenos"> 979</span></a> <span class="c1"># Leading comment is attached to the succeeding token, whilst trailing comment to the preceding.</span>
+</span><span id="Tokenizer-980"><a href="#Tokenizer-980"><span class="linenos"> 980</span></a> <span class="c1"># Multiple consecutive comments are preserved by appending them to the current comments list.</span>
+</span><span id="Tokenizer-981"><a href="#Tokenizer-981"><span class="linenos"> 981</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-982"><a href="#Tokenizer-982"><span class="linenos"> 982</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-983"><a href="#Tokenizer-983"><span class="linenos"> 983</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-984"><a href="#Tokenizer-984"><span class="linenos"> 984</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-985"><a href="#Tokenizer-985"><span class="linenos"> 985</span></a>
+</span><span id="Tokenizer-986"><a href="#Tokenizer-986"><span class="linenos"> 986</span></a> <span class="k">return</span> <span class="kc">True</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">_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-989"><a href="#Tokenizer-989"><span class="linenos"> 989</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-990"><a href="#Tokenizer-990"><span class="linenos"> 990</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-991"><a href="#Tokenizer-991"><span class="linenos"> 991</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-992"><a href="#Tokenizer-992"><span class="linenos"> 992</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><span id="Tokenizer-993"><a href="#Tokenizer-993"><span class="linenos"> 993</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-994"><a href="#Tokenizer-994"><span class="linenos"> 994</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><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="n">decimal</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Tokenizer-997"><a href="#Tokenizer-997"><span class="linenos"> 997</span></a> <span class="n">scientific</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="Tokenizer-998"><a href="#Tokenizer-998"><span class="linenos"> 998</span></a>
+</span><span id="Tokenizer-999"><a href="#Tokenizer-999"><span class="linenos"> 999</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</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">_peek</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
+</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">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1002"><a href="#Tokenizer-1002"><span class="linenos">1002</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-1003"><a href="#Tokenizer-1003"><span class="linenos">1003</span></a> <span class="n">decimal</span> <span class="o">=</span> <span class="kc">True</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">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1005"><a href="#Tokenizer-1005"><span class="linenos">1005</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-1006"><a href="#Tokenizer-1006"><span class="linenos">1006</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</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">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1008"><a href="#Tokenizer-1008"><span class="linenos">1008</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-1009"><a href="#Tokenizer-1009"><span class="linenos">1009</span></a> <span class="n">scientific</span> <span class="o">+=</span> <span class="mi">1</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">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1011"><a href="#Tokenizer-1011"><span class="linenos">1011</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-1012"><a href="#Tokenizer-1012"><span class="linenos">1012</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-1013"><a href="#Tokenizer-1013"><span class="linenos">1013</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Tokenizer-1014"><a href="#Tokenizer-1014"><span class="linenos">1014</span></a>
-</span><span id="Tokenizer-1015"><a href="#Tokenizer-1015"><span class="linenos">1015</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="p">))</span>
-</span><span id="Tokenizer-1016"><a href="#Tokenizer-1016"><span class="linenos">1016</span></a>
-</span><span id="Tokenizer-1017"><a href="#Tokenizer-1017"><span class="linenos">1017</span></a> <span class="k">if</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="Tokenizer-1018"><a href="#Tokenizer-1018"><span class="linenos">1018</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-1019"><a href="#Tokenizer-1019"><span class="linenos">1019</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-1020"><a href="#Tokenizer-1020"><span class="linenos">1020</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-1021"><a href="#Tokenizer-1021"><span class="linenos">1021</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span><span class="p">:</span>
-</span><span id="Tokenizer-1022"><a href="#Tokenizer-1022"><span class="linenos">1022</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-1023"><a href="#Tokenizer-1023"><span class="linenos">1023</span></a>
-</span><span id="Tokenizer-1024"><a href="#Tokenizer-1024"><span class="linenos">1024</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-1025"><a href="#Tokenizer-1025"><span class="linenos">1025</span></a> <span class="k">return</span> <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-1026"><a href="#Tokenizer-1026"><span class="linenos">1026</span></a> <span class="k">else</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">_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-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">_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-1030"><a href="#Tokenizer-1030"><span class="linenos">1030</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1031"><a href="#Tokenizer-1031"><span class="linenos">1031</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-1032"><a href="#Tokenizer-1032"><span class="linenos">1032</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1033"><a href="#Tokenizer-1033"><span class="linenos">1033</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
-</span><span id="Tokenizer-1034"><a href="#Tokenizer-1034"><span class="linenos">1034</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="Tokenizer-1035"><a href="#Tokenizer-1035"><span class="linenos">1035</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-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">_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-1038"><a href="#Tokenizer-1038"><span class="linenos">1038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1039"><a href="#Tokenizer-1039"><span class="linenos">1039</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-1040"><a href="#Tokenizer-1040"><span class="linenos">1040</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1041"><a href="#Tokenizer-1041"><span class="linenos">1041</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
-</span><span id="Tokenizer-1042"><a href="#Tokenizer-1042"><span class="linenos">1042</span></a> <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
-</span><span id="Tokenizer-1043"><a href="#Tokenizer-1043"><span class="linenos">1043</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-1044"><a href="#Tokenizer-1044"><span class="linenos">1044</span></a>
-</span><span id="Tokenizer-1045"><a href="#Tokenizer-1045"><span class="linenos">1045</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-1046"><a href="#Tokenizer-1046"><span class="linenos">1046</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1047"><a href="#Tokenizer-1047"><span class="linenos">1047</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-1048"><a href="#Tokenizer-1048"><span class="linenos">1048</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-1049"><a href="#Tokenizer-1049"><span class="linenos">1049</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1050"><a href="#Tokenizer-1050"><span class="linenos">1050</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1051"><a href="#Tokenizer-1051"><span class="linenos">1051</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1052"><a href="#Tokenizer-1052"><span class="linenos">1052</span></a>
-</span><span id="Tokenizer-1053"><a href="#Tokenizer-1053"><span class="linenos">1053</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-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="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">quote</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-1056"><a href="#Tokenizer-1056"><span class="linenos">1056</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">quote</span><span class="p">)</span>
-</span><span id="Tokenizer-1057"><a href="#Tokenizer-1057"><span class="linenos">1057</span></a> <span class="k">if</span> <span class="n">quote_end</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1058"><a href="#Tokenizer-1058"><span class="linenos">1058</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1059"><a href="#Tokenizer-1059"><span class="linenos">1059</span></a>
-</span><span id="Tokenizer-1060"><a href="#Tokenizer-1060"><span class="linenos">1060</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">quote</span><span class="p">))</span>
-</span><span id="Tokenizer-1061"><a href="#Tokenizer-1061"><span class="linenos">1061</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">quote_end</span><span class="p">)</span>
-</span><span id="Tokenizer-1062"><a href="#Tokenizer-1062"><span class="linenos">1062</span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span> <span class="k">else</span> <span class="n">text</span>
-</span><span id="Tokenizer-1063"><a href="#Tokenizer-1063"><span class="linenos">1063</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">NATIONAL</span> <span class="k">if</span> <span class="n">quote</span><span class="p">[</span><span class="mi">0</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;N&quot;</span> <span class="k">else</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-1064"><a href="#Tokenizer-1064"><span class="linenos">1064</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Tokenizer-1065"><a href="#Tokenizer-1065"><span class="linenos">1065</span></a>
-</span><span id="Tokenizer-1066"><a href="#Tokenizer-1066"><span class="linenos">1066</span></a> <span class="c1"># X&#39;1234, b&#39;0110&#39;, E&#39;\\\\\&#39; etc.</span>
-</span><span id="Tokenizer-1067"><a href="#Tokenizer-1067"><span class="linenos">1067</span></a> <span class="k">def</span> <span class="nf">_scan_formatted_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string_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-1068"><a href="#Tokenizer-1068"><span class="linenos">1068</span></a> <span class="k">if</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span><span class="p">:</span>
-</span><span id="Tokenizer-1069"><a href="#Tokenizer-1069"><span class="linenos">1069</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span>
-</span><span id="Tokenizer-1070"><a href="#Tokenizer-1070"><span class="linenos">1070</span></a> <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><span id="Tokenizer-1071"><a href="#Tokenizer-1071"><span class="linenos">1071</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
-</span><span id="Tokenizer-1072"><a href="#Tokenizer-1072"><span class="linenos">1072</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span><span class="p">:</span>
-</span><span id="Tokenizer-1073"><a href="#Tokenizer-1073"><span class="linenos">1073</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span>
-</span><span id="Tokenizer-1074"><a href="#Tokenizer-1074"><span class="linenos">1074</span></a> <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><span id="Tokenizer-1075"><a href="#Tokenizer-1075"><span class="linenos">1075</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
-</span><span id="Tokenizer-1076"><a href="#Tokenizer-1076"><span class="linenos">1076</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span><span class="p">:</span>
-</span><span id="Tokenizer-1077"><a href="#Tokenizer-1077"><span class="linenos">1077</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span>
-</span><span id="Tokenizer-1078"><a href="#Tokenizer-1078"><span class="linenos">1078</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span>
-</span><span id="Tokenizer-1079"><a href="#Tokenizer-1079"><span class="linenos">1079</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Tokenizer-1080"><a href="#Tokenizer-1080"><span class="linenos">1080</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1081"><a href="#Tokenizer-1081"><span class="linenos">1081</span></a> <span class="k">return</span> <span class="kc">False</span>
-</span><span id="Tokenizer-1082"><a href="#Tokenizer-1082"><span class="linenos">1082</span></a>
-</span><span id="Tokenizer-1083"><a href="#Tokenizer-1083"><span class="linenos">1083</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">string_start</span><span class="p">))</span>
-</span><span id="Tokenizer-1084"><a href="#Tokenizer-1084"><span class="linenos">1084</span></a> <span class="n">string_end</span> <span class="o">=</span> <span class="n">delimiters</span><span class="p">[</span><span class="n">string_start</span><span class="p">]</span>
-</span><span id="Tokenizer-1085"><a href="#Tokenizer-1085"><span class="linenos">1085</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">string_end</span><span class="p">)</span>
+</span><span id="Tokenizer-1015"><a href="#Tokenizer-1015"><span class="linenos">1015</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-1016"><a href="#Tokenizer-1016"><span class="linenos">1016</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 class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Tokenizer-1017"><a href="#Tokenizer-1017"><span class="linenos">1017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</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="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="p">))</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">if</span> <span class="n">token_type</span><span class="p">:</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">_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-1023"><a href="#Tokenizer-1023"><span class="linenos">1023</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-1024"><a href="#Tokenizer-1024"><span class="linenos">1024</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-1025"><a href="#Tokenizer-1025"><span class="linenos">1025</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFIER_CAN_START_WITH_DIGIT</span><span class="p">:</span>
+</span><span id="Tokenizer-1026"><a href="#Tokenizer-1026"><span class="linenos">1026</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-1027"><a href="#Tokenizer-1027"><span class="linenos">1027</span></a>
+</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">_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-1029"><a href="#Tokenizer-1029"><span class="linenos">1029</span></a> <span class="k">return</span> <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-1030"><a href="#Tokenizer-1030"><span class="linenos">1030</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1031"><a href="#Tokenizer-1031"><span class="linenos">1031</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-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="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-1034"><a href="#Tokenizer-1034"><span class="linenos">1034</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1035"><a href="#Tokenizer-1035"><span class="linenos">1035</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-1036"><a href="#Tokenizer-1036"><span class="linenos">1036</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1037"><a href="#Tokenizer-1037"><span class="linenos">1037</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
+</span><span id="Tokenizer-1038"><a href="#Tokenizer-1038"><span class="linenos">1038</span></a> <span class="k">except</span> <span class="ne">ValueError</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">_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-1040"><a href="#Tokenizer-1040"><span class="linenos">1040</span></a>
+</span><span id="Tokenizer-1041"><a href="#Tokenizer-1041"><span class="linenos">1041</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-1042"><a href="#Tokenizer-1042"><span class="linenos">1042</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1043"><a href="#Tokenizer-1043"><span class="linenos">1043</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-1044"><a href="#Tokenizer-1044"><span class="linenos">1044</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1045"><a href="#Tokenizer-1045"><span class="linenos">1045</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">value</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 class="p">)</span>
+</span><span id="Tokenizer-1046"><a href="#Tokenizer-1046"><span class="linenos">1046</span></a> <span class="k">except</span> <span class="ne">ValueError</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">_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-1048"><a href="#Tokenizer-1048"><span class="linenos">1048</span></a>
+</span><span id="Tokenizer-1049"><a href="#Tokenizer-1049"><span class="linenos">1049</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-1050"><a href="#Tokenizer-1050"><span class="linenos">1050</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1051"><a href="#Tokenizer-1051"><span class="linenos">1051</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-1052"><a href="#Tokenizer-1052"><span class="linenos">1052</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-1053"><a href="#Tokenizer-1053"><span class="linenos">1053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1054"><a href="#Tokenizer-1054"><span class="linenos">1054</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1055"><a href="#Tokenizer-1055"><span class="linenos">1055</span></a> <span class="k">break</span>
+</span><span id="Tokenizer-1056"><a href="#Tokenizer-1056"><span class="linenos">1056</span></a>
+</span><span id="Tokenizer-1057"><a href="#Tokenizer-1057"><span class="linenos">1057</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-1058"><a href="#Tokenizer-1058"><span class="linenos">1058</span></a>
+</span><span id="Tokenizer-1059"><a href="#Tokenizer-1059"><span class="linenos">1059</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">quote</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-1060"><a href="#Tokenizer-1060"><span class="linenos">1060</span></a> <span class="n">quote_end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_QUOTES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">quote</span><span class="p">)</span>
+</span><span id="Tokenizer-1061"><a href="#Tokenizer-1061"><span class="linenos">1061</span></a> <span class="k">if</span> <span class="n">quote_end</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1062"><a href="#Tokenizer-1062"><span class="linenos">1062</span></a> <span class="k">return</span> <span class="kc">False</span>
+</span><span id="Tokenizer-1063"><a href="#Tokenizer-1063"><span class="linenos">1063</span></a>
+</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">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">quote</span><span class="p">))</span>
+</span><span id="Tokenizer-1065"><a href="#Tokenizer-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">_extract_string</span><span class="p">(</span><span class="n">quote_end</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="n">text</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENCODE</span> <span class="k">else</span> <span class="n">text</span>
+</span><span id="Tokenizer-1067"><a href="#Tokenizer-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">NATIONAL</span> <span class="k">if</span> <span class="n">quote</span><span class="p">[</span><span class="mi">0</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;N&quot;</span> <span class="k">else</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-1068"><a href="#Tokenizer-1068"><span class="linenos">1068</span></a> <span class="k">return</span> <span class="kc">True</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="c1"># X&#39;1234, b&#39;0110&#39;, E&#39;\\\\\&#39; etc.</span>
+</span><span id="Tokenizer-1071"><a href="#Tokenizer-1071"><span class="linenos">1071</span></a> <span class="k">def</span> <span class="nf">_scan_formatted_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string_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-1072"><a href="#Tokenizer-1072"><span class="linenos">1072</span></a> <span class="k">if</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span><span class="p">:</span>
+</span><span id="Tokenizer-1073"><a href="#Tokenizer-1073"><span class="linenos">1073</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_HEX_STRINGS</span>
+</span><span id="Tokenizer-1074"><a href="#Tokenizer-1074"><span class="linenos">1074</span></a> <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><span id="Tokenizer-1075"><a href="#Tokenizer-1075"><span class="linenos">1075</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">16</span>
+</span><span id="Tokenizer-1076"><a href="#Tokenizer-1076"><span class="linenos">1076</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span><span class="p">:</span>
+</span><span id="Tokenizer-1077"><a href="#Tokenizer-1077"><span class="linenos">1077</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BIT_STRINGS</span>
+</span><span id="Tokenizer-1078"><a href="#Tokenizer-1078"><span class="linenos">1078</span></a> <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><span id="Tokenizer-1079"><a href="#Tokenizer-1079"><span class="linenos">1079</span></a> <span class="n">base</span> <span class="o">=</span> <span class="mi">2</span>
+</span><span id="Tokenizer-1080"><a href="#Tokenizer-1080"><span class="linenos">1080</span></a> <span class="k">elif</span> <span class="n">string_start</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span><span class="p">:</span>
+</span><span id="Tokenizer-1081"><a href="#Tokenizer-1081"><span class="linenos">1081</span></a> <span class="n">delimiters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_BYTE_STRINGS</span>
+</span><span id="Tokenizer-1082"><a href="#Tokenizer-1082"><span class="linenos">1082</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span>
+</span><span id="Tokenizer-1083"><a href="#Tokenizer-1083"><span class="linenos">1083</span></a> <span class="n">base</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Tokenizer-1084"><a href="#Tokenizer-1084"><span class="linenos">1084</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1085"><a href="#Tokenizer-1085"><span class="linenos">1085</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Tokenizer-1086"><a href="#Tokenizer-1086"><span class="linenos">1086</span></a>
-</span><span id="Tokenizer-1087"><a href="#Tokenizer-1087"><span class="linenos">1087</span></a> <span class="k">if</span> <span class="n">base</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Tokenizer-1088"><a href="#Tokenizer-1088"><span class="linenos">1088</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-1089"><a href="#Tokenizer-1089"><span class="linenos">1089</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1090"><a href="#Tokenizer-1090"><span class="linenos">1090</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer-1091"><a href="#Tokenizer-1091"><span class="linenos">1091</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">base</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Tokenizer-1092"><a href="#Tokenizer-1092"><span class="linenos">1092</span></a> <span class="k">except</span><span class="p">:</span>
-</span><span id="Tokenizer-1093"><a href="#Tokenizer-1093"><span class="linenos">1093</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
-</span><span id="Tokenizer-1094"><a href="#Tokenizer-1094"><span class="linenos">1094</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-1095"><a href="#Tokenizer-1095"><span class="linenos">1095</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1096"><a href="#Tokenizer-1096"><span class="linenos">1096</span></a>
-</span><span id="Tokenizer-1097"><a href="#Tokenizer-1097"><span class="linenos">1097</span></a> <span class="k">return</span> <span class="kc">True</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">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-1100"><a href="#Tokenizer-1100"><span class="linenos">1100</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1101"><a href="#Tokenizer-1101"><span class="linenos">1101</span></a> <span class="n">identifier_end_is_escape</span> <span class="o">=</span> <span class="n">identifier_end</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</span>
+</span><span id="Tokenizer-1087"><a href="#Tokenizer-1087"><span class="linenos">1087</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">string_start</span><span class="p">))</span>
+</span><span id="Tokenizer-1088"><a href="#Tokenizer-1088"><span class="linenos">1088</span></a> <span class="n">string_end</span> <span class="o">=</span> <span class="n">delimiters</span><span class="p">[</span><span class="n">string_start</span><span class="p">]</span>
+</span><span id="Tokenizer-1089"><a href="#Tokenizer-1089"><span class="linenos">1089</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">string_end</span><span class="p">)</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="k">if</span> <span class="n">base</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Tokenizer-1092"><a href="#Tokenizer-1092"><span class="linenos">1092</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-1093"><a href="#Tokenizer-1093"><span class="linenos">1093</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1094"><a href="#Tokenizer-1094"><span class="linenos">1094</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer-1095"><a href="#Tokenizer-1095"><span class="linenos">1095</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">base</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Tokenizer-1096"><a href="#Tokenizer-1096"><span class="linenos">1096</span></a> <span class="k">except</span><span class="p">:</span>
+</span><span id="Tokenizer-1097"><a href="#Tokenizer-1097"><span class="linenos">1097</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
+</span><span id="Tokenizer-1098"><a href="#Tokenizer-1098"><span class="linenos">1098</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-1099"><a href="#Tokenizer-1099"><span class="linenos">1099</span></a> <span class="p">)</span>
+</span><span id="Tokenizer-1100"><a href="#Tokenizer-1100"><span class="linenos">1100</span></a>
+</span><span id="Tokenizer-1101"><a href="#Tokenizer-1101"><span class="linenos">1101</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Tokenizer-1102"><a href="#Tokenizer-1102"><span class="linenos">1102</span></a>
-</span><span id="Tokenizer-1103"><a href="#Tokenizer-1103"><span class="linenos">1103</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1104"><a href="#Tokenizer-1104"><span class="linenos">1104</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-1105"><a href="#Tokenizer-1105"><span class="linenos">1105</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">identifier_end</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-1103"><a href="#Tokenizer-1103"><span class="linenos">1103</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-1104"><a href="#Tokenizer-1104"><span class="linenos">1104</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-1105"><a href="#Tokenizer-1105"><span class="linenos">1105</span></a> <span class="n">identifier_end_is_escape</span> <span class="o">=</span> <span class="n">identifier_end</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_IDENTIFIER_ESCAPES</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="bp">self</span><span class="o">.</span><span class="n">_advance</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="bp">self</span><span class="o">.</span><span class="n">_char</span> <span class="o">==</span> <span class="n">identifier_end</span><span class="p">:</span>
-</span><span id="Tokenizer-1109"><a href="#Tokenizer-1109"><span class="linenos">1109</span></a> <span class="k">if</span> <span class="n">identifier_end_is_escape</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="n">identifier_end</span><span class="p">:</span>
-</span><span id="Tokenizer-1110"><a href="#Tokenizer-1110"><span class="linenos">1110</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">identifier_end</span>
-</span><span id="Tokenizer-1111"><a href="#Tokenizer-1111"><span class="linenos">1111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1112"><a href="#Tokenizer-1112"><span class="linenos">1112</span></a> <span class="k">continue</span>
-</span><span id="Tokenizer-1113"><a href="#Tokenizer-1113"><span class="linenos">1113</span></a>
-</span><span id="Tokenizer-1114"><a href="#Tokenizer-1114"><span class="linenos">1114</span></a> <span class="k">break</span>
-</span><span id="Tokenizer-1115"><a href="#Tokenizer-1115"><span class="linenos">1115</span></a>
-</span><span id="Tokenizer-1116"><a href="#Tokenizer-1116"><span class="linenos">1116</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><span id="Tokenizer-1107"><a href="#Tokenizer-1107"><span class="linenos">1107</span></a> <span class="k">while</span> <span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1109"><a href="#Tokenizer-1109"><span class="linenos">1109</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">identifier_end</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-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="bp">self</span><span class="o">.</span><span class="n">_advance</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">_char</span> <span class="o">==</span> <span class="n">identifier_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1113"><a href="#Tokenizer-1113"><span class="linenos">1113</span></a> <span class="k">if</span> <span class="n">identifier_end_is_escape</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="n">identifier_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1114"><a href="#Tokenizer-1114"><span class="linenos">1114</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">identifier_end</span>
+</span><span id="Tokenizer-1115"><a href="#Tokenizer-1115"><span class="linenos">1115</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1116"><a href="#Tokenizer-1116"><span class="linenos">1116</span></a> <span class="k">continue</span>
</span><span id="Tokenizer-1117"><a href="#Tokenizer-1117"><span class="linenos">1117</span></a>
-</span><span id="Tokenizer-1118"><a href="#Tokenizer-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="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-1118"><a href="#Tokenizer-1118"><span class="linenos">1118</span></a> <span class="k">break</span>
</span><span id="Tokenizer-1119"><a href="#Tokenizer-1119"><span class="linenos">1119</span></a>
-</span><span id="Tokenizer-1120"><a href="#Tokenizer-1120"><span class="linenos">1120</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-1121"><a href="#Tokenizer-1121"><span class="linenos">1121</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1122"><a href="#Tokenizer-1122"><span class="linenos">1122</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-1123"><a href="#Tokenizer-1123"><span class="linenos">1123</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-1124"><a href="#Tokenizer-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><span id="Tokenizer-1125"><a href="#Tokenizer-1125"><span class="linenos">1125</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1126"><a href="#Tokenizer-1126"><span class="linenos">1126</span></a> <span class="k">break</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><span id="Tokenizer-1128"><a href="#Tokenizer-1128"><span class="linenos">1128</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
-</span><span id="Tokenizer-1129"><a href="#Tokenizer-1129"><span class="linenos">1129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_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-1130"><a href="#Tokenizer-1130"><span class="linenos">1130</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-1131"><a href="#Tokenizer-1131"><span class="linenos">1131</span></a> <span class="p">)</span>
-</span><span id="Tokenizer-1132"><a href="#Tokenizer-1132"><span class="linenos">1132</span></a>
-</span><span id="Tokenizer-1133"><a href="#Tokenizer-1133"><span class="linenos">1133</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="Tokenizer-1134"><a href="#Tokenizer-1134"><span class="linenos">1134</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Tokenizer-1135"><a href="#Tokenizer-1135"><span class="linenos">1135</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-1120"><a href="#Tokenizer-1120"><span class="linenos">1120</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><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="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-1123"><a href="#Tokenizer-1123"><span class="linenos">1123</span></a>
+</span><span id="Tokenizer-1124"><a href="#Tokenizer-1124"><span class="linenos">1124</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-1125"><a href="#Tokenizer-1125"><span class="linenos">1125</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1126"><a href="#Tokenizer-1126"><span class="linenos">1126</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-1127"><a href="#Tokenizer-1127"><span class="linenos">1127</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-1128"><a href="#Tokenizer-1128"><span class="linenos">1128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1129"><a href="#Tokenizer-1129"><span class="linenos">1129</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1130"><a href="#Tokenizer-1130"><span class="linenos">1130</span></a> <span class="k">break</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><span id="Tokenizer-1132"><a href="#Tokenizer-1132"><span class="linenos">1132</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
+</span><span id="Tokenizer-1133"><a href="#Tokenizer-1133"><span class="linenos">1133</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_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-1134"><a href="#Tokenizer-1134"><span class="linenos">1134</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-1135"><a href="#Tokenizer-1135"><span class="linenos">1135</span></a> <span class="p">)</span>
</span><span id="Tokenizer-1136"><a href="#Tokenizer-1136"><span class="linenos">1136</span></a>
-</span><span id="Tokenizer-1137"><a href="#Tokenizer-1137"><span class="linenos">1137</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Tokenizer-1138"><a href="#Tokenizer-1138"><span class="linenos">1138</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">_STRING_ESCAPES</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Tokenizer-1139"><a href="#Tokenizer-1139"><span class="linenos">1139</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span>
-</span><span id="Tokenizer-1140"><a href="#Tokenizer-1140"><span class="linenos">1140</span></a> <span class="p">):</span>
-</span><span id="Tokenizer-1141"><a href="#Tokenizer-1141"><span class="linenos">1141</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-1142"><a href="#Tokenizer-1142"><span class="linenos">1142</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-1143"><a href="#Tokenizer-1143"><span class="linenos">1143</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1144"><a href="#Tokenizer-1144"><span class="linenos">1144</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-1145"><a href="#Tokenizer-1145"><span class="linenos">1145</span></a>
-</span><span id="Tokenizer-1146"><a href="#Tokenizer-1146"><span class="linenos">1146</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-1147"><a href="#Tokenizer-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="mi">2</span><span class="p">)</span>
-</span><span id="Tokenizer-1148"><a href="#Tokenizer-1148"><span class="linenos">1148</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1149"><a href="#Tokenizer-1149"><span class="linenos">1149</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-1150"><a href="#Tokenizer-1150"><span class="linenos">1150</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Tokenizer-1151"><a href="#Tokenizer-1151"><span class="linenos">1151</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-1152"><a href="#Tokenizer-1152"><span class="linenos">1152</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-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">delim_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">break</span>
-</span><span id="Tokenizer-1155"><a href="#Tokenizer-1155"><span class="linenos">1155</span></a>
-</span><span id="Tokenizer-1156"><a href="#Tokenizer-1156"><span class="linenos">1156</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-1157"><a href="#Tokenizer-1157"><span class="linenos">1157</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-1158"><a href="#Tokenizer-1158"><span class="linenos">1158</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><span id="Tokenizer-1159"><a href="#Tokenizer-1159"><span class="linenos">1159</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Tokenizer-1160"><a href="#Tokenizer-1160"><span class="linenos">1160</span></a>
-</span><span id="Tokenizer-1161"><a href="#Tokenizer-1161"><span class="linenos">1161</span></a> <span class="k">return</span> <span class="n">text</span>
+</span><span id="Tokenizer-1137"><a href="#Tokenizer-1137"><span class="linenos">1137</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="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="Tokenizer-1138"><a href="#Tokenizer-1138"><span class="linenos">1138</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Tokenizer-1139"><a href="#Tokenizer-1139"><span class="linenos">1139</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-1140"><a href="#Tokenizer-1140"><span class="linenos">1140</span></a>
+</span><span id="Tokenizer-1141"><a href="#Tokenizer-1141"><span class="linenos">1141</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Tokenizer-1142"><a href="#Tokenizer-1142"><span class="linenos">1142</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">_STRING_ESCAPES</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Tokenizer-1143"><a href="#Tokenizer-1143"><span class="linenos">1143</span></a> <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="bp">self</span><span class="o">.</span><span class="n">_STRING_ESCAPES</span>
+</span><span id="Tokenizer-1144"><a href="#Tokenizer-1144"><span class="linenos">1144</span></a> <span class="p">):</span>
+</span><span id="Tokenizer-1145"><a href="#Tokenizer-1145"><span class="linenos">1145</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-1146"><a href="#Tokenizer-1146"><span class="linenos">1146</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-1147"><a href="#Tokenizer-1147"><span class="linenos">1147</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1148"><a href="#Tokenizer-1148"><span class="linenos">1148</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-1149"><a href="#Tokenizer-1149"><span class="linenos">1149</span></a>
+</span><span id="Tokenizer-1150"><a href="#Tokenizer-1150"><span class="linenos">1150</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-1151"><a href="#Tokenizer-1151"><span class="linenos">1151</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-1152"><a href="#Tokenizer-1152"><span class="linenos">1152</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Tokenizer-1153"><a href="#Tokenizer-1153"><span class="linenos">1153</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-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">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-1156"><a href="#Tokenizer-1156"><span class="linenos">1156</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-1157"><a href="#Tokenizer-1157"><span class="linenos">1157</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-1158"><a href="#Tokenizer-1158"><span class="linenos">1158</span></a> <span class="k">break</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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_end</span><span class="p">:</span>
+</span><span id="Tokenizer-1161"><a href="#Tokenizer-1161"><span class="linenos">1161</span></a> <span class="k">raise</span> <span class="ne">RuntimeError</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-1162"><a href="#Tokenizer-1162"><span class="linenos">1162</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><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">_advance</span><span class="p">()</span>
+</span><span id="Tokenizer-1164"><a href="#Tokenizer-1164"><span class="linenos">1164</span></a>
+</span><span id="Tokenizer-1165"><a href="#Tokenizer-1165"><span class="linenos">1165</span></a> <span class="k">return</span> <span class="n">text</span>
</span></pre></div>
@@ -7050,22 +7088,22 @@
</div>
<a class="headerlink" href="#Tokenizer.reset"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.reset-781"><a href="#Tokenizer.reset-781"><span class="linenos">781</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-782"><a href="#Tokenizer.reset-782"><span class="linenos">782</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-783"><a href="#Tokenizer.reset-783"><span class="linenos">783</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-784"><a href="#Tokenizer.reset-784"><span class="linenos">784</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-785"><a href="#Tokenizer.reset-785"><span class="linenos">785</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-786"><a href="#Tokenizer.reset-786"><span class="linenos">786</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-787"><a href="#Tokenizer.reset-787"><span class="linenos">787</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-788"><a href="#Tokenizer.reset-788"><span class="linenos">788</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.reset-789"><a href="#Tokenizer.reset-789"><span class="linenos">789</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-790"><a href="#Tokenizer.reset-790"><span class="linenos">790</span></a>
-</span><span id="Tokenizer.reset-791"><a href="#Tokenizer.reset-791"><span class="linenos">791</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-792"><a href="#Tokenizer.reset-792"><span class="linenos">792</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-793"><a href="#Tokenizer.reset-793"><span class="linenos">793</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-794"><a href="#Tokenizer.reset-794"><span class="linenos">794</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.reset-795"><a href="#Tokenizer.reset-795"><span class="linenos">795</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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-796"><a href="#Tokenizer.reset-796"><span class="linenos">796</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.reset-785"><a href="#Tokenizer.reset-785"><span class="linenos">785</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-786"><a href="#Tokenizer.reset-786"><span class="linenos">786</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-787"><a href="#Tokenizer.reset-787"><span class="linenos">787</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-788"><a href="#Tokenizer.reset-788"><span class="linenos">788</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-789"><a href="#Tokenizer.reset-789"><span class="linenos">789</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-790"><a href="#Tokenizer.reset-790"><span class="linenos">790</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-791"><a href="#Tokenizer.reset-791"><span class="linenos">791</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-792"><a href="#Tokenizer.reset-792"><span class="linenos">792</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.reset-793"><a href="#Tokenizer.reset-793"><span class="linenos">793</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-794"><a href="#Tokenizer.reset-794"><span class="linenos">794</span></a>
+</span><span id="Tokenizer.reset-795"><a href="#Tokenizer.reset-795"><span class="linenos">795</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-796"><a href="#Tokenizer.reset-796"><span class="linenos">796</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-797"><a href="#Tokenizer.reset-797"><span class="linenos">797</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-798"><a href="#Tokenizer.reset-798"><span class="linenos">798</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.reset-799"><a href="#Tokenizer.reset-799"><span class="linenos">799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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-800"><a href="#Tokenizer.reset-800"><span class="linenos">800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_token_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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span></pre></div>
@@ -7083,22 +7121,22 @@
</div>
<a class="headerlink" href="#Tokenizer.tokenize"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.tokenize-798"><a href="#Tokenizer.tokenize-798"><span class="linenos">798</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-799"><a href="#Tokenizer.tokenize-799"><span class="linenos">799</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-800"><a href="#Tokenizer.tokenize-800"><span class="linenos">800</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-801"><a href="#Tokenizer.tokenize-801"><span class="linenos">801</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-802"><a href="#Tokenizer.tokenize-802"><span class="linenos">802</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-803"><a href="#Tokenizer.tokenize-803"><span class="linenos">803</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Tokenizer.tokenize-804"><a href="#Tokenizer.tokenize-804"><span class="linenos">804</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-805"><a href="#Tokenizer.tokenize-805"><span class="linenos">805</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-806"><a href="#Tokenizer.tokenize-806"><span class="linenos">806</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">50</span>
-</span><span id="Tokenizer.tokenize-807"><a href="#Tokenizer.tokenize-807"><span class="linenos">807</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">50</span>
-</span><span id="Tokenizer.tokenize-808"><a href="#Tokenizer.tokenize-808"><span class="linenos">808</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
-</span><span id="Tokenizer.tokenize-809"><a href="#Tokenizer.tokenize-809"><span class="linenos">809</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">end</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="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Tokenizer.tokenize-810"><a href="#Tokenizer.tokenize-810"><span class="linenos">810</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-811"><a href="#Tokenizer.tokenize-811"><span class="linenos">811</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;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-812"><a href="#Tokenizer.tokenize-812"><span class="linenos">812</span></a>
-</span><span id="Tokenizer.tokenize-813"><a href="#Tokenizer.tokenize-813"><span class="linenos">813</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="Tokenizer.tokenize-802"><a href="#Tokenizer.tokenize-802"><span class="linenos">802</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-803"><a href="#Tokenizer.tokenize-803"><span class="linenos">803</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-804"><a href="#Tokenizer.tokenize-804"><span class="linenos">804</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-805"><a href="#Tokenizer.tokenize-805"><span class="linenos">805</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-806"><a href="#Tokenizer.tokenize-806"><span class="linenos">806</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-807"><a href="#Tokenizer.tokenize-807"><span class="linenos">807</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Tokenizer.tokenize-808"><a href="#Tokenizer.tokenize-808"><span class="linenos">808</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-809"><a href="#Tokenizer.tokenize-809"><span class="linenos">809</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-810"><a href="#Tokenizer.tokenize-810"><span class="linenos">810</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">50</span>
+</span><span id="Tokenizer.tokenize-811"><a href="#Tokenizer.tokenize-811"><span class="linenos">811</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">50</span>
+</span><span id="Tokenizer.tokenize-812"><a href="#Tokenizer.tokenize-812"><span class="linenos">812</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span>
+</span><span id="Tokenizer.tokenize-813"><a href="#Tokenizer.tokenize-813"><span class="linenos">813</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">end</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="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Tokenizer.tokenize-814"><a href="#Tokenizer.tokenize-814"><span class="linenos">814</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-815"><a href="#Tokenizer.tokenize-815"><span class="linenos">815</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;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-816"><a href="#Tokenizer.tokenize-816"><span class="linenos">816</span></a>
+</span><span id="Tokenizer.tokenize-817"><a href="#Tokenizer.tokenize-817"><span class="linenos">817</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tokens</span>
</span></pre></div>
diff --git a/docs/sqlglot/transforms.html b/docs/sqlglot/transforms.html
index 9694adf..a077ed0 100644
--- a/docs/sqlglot/transforms.html
+++ b/docs/sqlglot/transforms.html
@@ -200,154 +200,135 @@
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="sd"> Some dialects only allow the precision for parameterized types to be defined in the DDL and not in</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="k">lambda</span> <span class="n">node</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-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="o">**</span><span class="n">node</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="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="p">[</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">node_expression</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">for</span> <span class="n">node_expression</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node_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><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="p">],</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span 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 class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">else</span> <span class="n">node</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-124"><a href="#L-124"><span class="linenos">124</span></a> <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">DataType</span><span class="p">):</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</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">DataType</span><span class="p">)])</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</span><span 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-130"><a href="#L-130"><span class="linenos">130</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert cross join unnest into lateral view explode (used in presto -&gt; hive).&quot;&quot;&quot;</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</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">Select</span><span class="p">):</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <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-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="nb">isinstance</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><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</span><span class="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-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</span><span class="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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</span><span 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-141"><a href="#L-141"><span class="linenos">141</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert cross join unnest into lateral view explode (used in presto -&gt; hive).&quot;&quot;&quot;</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</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">Select</span><span class="p">):</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <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-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">isinstance</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><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</span><span class="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-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</span><span class="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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</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="n">expression</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="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">expression</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="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">e</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 class="n">unnest</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">columns</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="p">[]):</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</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="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">alias</span><span class="o">=</span><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">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="p">),</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="p">)</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">return</span> <span class="n">expression</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">for</span> <span class="n">e</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 class="n">unnest</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">columns</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</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">append</span><span class="p">(</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">(</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="n">this</span><span class="o">=</span><span class="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="n">alias</span><span class="o">=</span><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">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="p">),</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span 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">expression</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</span><span 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-154"><a href="#L-154"><span class="linenos">154</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert explode/posexplode into unnest (used in hive -&gt; presto).&quot;&quot;&quot;</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">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><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">build_scope</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="n">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">build_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">)</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</span><span 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-165"><a href="#L-165"><span class="linenos">165</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert explode/posexplode into unnest (used in hive -&gt; presto).&quot;&quot;&quot;</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</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">Select</span><span class="p">):</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">build_scope</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">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">build_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">selected_sources</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">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</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">pos_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</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">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</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">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</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">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</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="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">unnest</span> <span class="o">=</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="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</span><span class="p">)</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">unnest</span> <span class="o">=</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="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</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="c1"># This ensures that we won&#39;t use [POS]EXPLODE&#39;s argument as a new selection</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">&quot;_u&quot;</span><span class="p">)</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</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="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">)</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</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="c1"># This ensures that we won&#39;t use [POS]EXPLODE&#39;s argument as a new selection</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;pos&quot;</span><span class="p">)</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">&quot;_u&quot;</span><span class="p">)</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">)</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">)</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="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;pos&quot;</span><span class="p">)</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">))</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="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</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="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;from&quot;</span><span class="p">):</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">&quot;CROSS&quot;</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-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><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 class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</span><span class="p">)</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="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;from&quot;</span><span class="p">):</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">&quot;CROSS&quot;</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-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="k">return</span> <span class="n">expression</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><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a><span class="k">def</span> <span class="nf">remove_target_from_merge</span><span 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-215"><a href="#L-215"><span class="linenos">215</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove table refs from columns in when statements.&quot;&quot;&quot;</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</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">Merge</span><span class="p">):</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">alias</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">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-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">targets</span> <span class="o">=</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><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</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-221"><a href="#L-221"><span class="linenos">221</span></a>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">return</span> <span class="n">expression</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><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a><span class="k">def</span> <span class="nf">remove_target_from_merge</span><span 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-226"><a href="#L-226"><span class="linenos">226</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove table refs from columns in when statements.&quot;&quot;&quot;</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</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">Merge</span><span class="p">):</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">alias</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">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-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">targets</span> <span class="o">=</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><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</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-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="k">for</span> <span class="n">when</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-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">node</span><span class="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 class="ow">in</span> <span class="n">targets</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="p">)</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="k">for</span> <span class="n">when</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-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">node</span><span class="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 class="ow">in</span> <span class="n">targets</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="p">)</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>
+</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="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">transforms</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">Callable</span><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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</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">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a><span class="sd"> expression to SQL, using an appropriate `Generator.TRANSFORMS` function.</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="sd"> Args:</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</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><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">transforms</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">Callable</span><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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</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">Expression</span><span class="p">],</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="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a><span class="sd"> expression to SQL, using an appropriate `Generator.TRANSFORMS` function.</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="sd"> Args:</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a><span class="sd"> Returns:</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="sd"> Function that can be used as a generator transform.</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a><span class="sd"> &quot;&quot;&quot;</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">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</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">copy</span><span class="p">())</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</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">t</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="k">return</span> <span class="nb">getattr</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">key</span> <span class="o">+</span> <span class="s2">&quot;_sql&quot;</span><span class="p">)(</span><span class="n">expression</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">return</span> <span class="n">_to_sql</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><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a><span class="n">UNALIAS_GROUP</span> <span class="o">=</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="n">preprocess</span><span class="p">([</span><span class="n">unalias_group</span><span class="p">])}</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="n">ELIMINATE_DISTINCT_ON</span> <span class="o">=</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">preprocess</span><span class="p">([</span><span class="n">eliminate_distinct_on</span><span class="p">])}</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="n">ELIMINATE_QUALIFY</span> <span class="o">=</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">preprocess</span><span class="p">([</span><span class="n">eliminate_qualify</span><span class="p">])}</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a><span class="n">REMOVE_PRECISION_PARAMETERIZED_TYPES</span> <span class="o">=</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">Cast</span><span class="p">:</span> <span class="n">preprocess</span><span class="p">([</span><span class="n">remove_precision_parameterized_types</span><span class="p">])</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="p">}</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="sd"> Returns:</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="sd"> Function that can be used as a generator transform.</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a><span class="sd"> &quot;&quot;&quot;</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">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</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">copy</span><span class="p">())</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">t</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">getattr</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">key</span> <span class="o">+</span> <span class="s2">&quot;_sql&quot;</span><span class="p">)(</span><span class="n">expression</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">return</span> <span class="n">_to_sql</span>
</span></pre></div>
@@ -571,20 +552,9 @@ otherwise we won't be able to refer to it in the outer query's WHERE clause.</p>
</span><span id="remove_precision_parameterized_types-122"><a href="#remove_precision_parameterized_types-122"><span class="linenos">122</span></a><span class="sd"> Some dialects only allow the precision for parameterized types to be defined in the DDL and not in</span>
</span><span id="remove_precision_parameterized_types-123"><a href="#remove_precision_parameterized_types-123"><span class="linenos">123</span></a><span class="sd"> other expressions. This transforms removes the precision from parameterized types in expressions.</span>
</span><span id="remove_precision_parameterized_types-124"><a href="#remove_precision_parameterized_types-124"><span class="linenos">124</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="remove_precision_parameterized_types-125"><a href="#remove_precision_parameterized_types-125"><span class="linenos">125</span></a> <span class="k">return</span> <span class="n">expression</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="remove_precision_parameterized_types-126"><a href="#remove_precision_parameterized_types-126"><span class="linenos">126</span></a> <span class="k">lambda</span> <span class="n">node</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="remove_precision_parameterized_types-127"><a href="#remove_precision_parameterized_types-127"><span class="linenos">127</span></a> <span class="o">**</span><span class="p">{</span>
-</span><span id="remove_precision_parameterized_types-128"><a href="#remove_precision_parameterized_types-128"><span class="linenos">128</span></a> <span class="o">**</span><span class="n">node</span><span class="o">.</span><span class="n">args</span><span class="p">,</span>
-</span><span id="remove_precision_parameterized_types-129"><a href="#remove_precision_parameterized_types-129"><span class="linenos">129</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="p">[</span>
-</span><span id="remove_precision_parameterized_types-130"><a href="#remove_precision_parameterized_types-130"><span class="linenos">130</span></a> <span class="n">node_expression</span>
-</span><span id="remove_precision_parameterized_types-131"><a href="#remove_precision_parameterized_types-131"><span class="linenos">131</span></a> <span class="k">for</span> <span class="n">node_expression</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</span>
-</span><span id="remove_precision_parameterized_types-132"><a href="#remove_precision_parameterized_types-132"><span class="linenos">132</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node_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><span id="remove_precision_parameterized_types-133"><a href="#remove_precision_parameterized_types-133"><span class="linenos">133</span></a> <span class="p">],</span>
-</span><span id="remove_precision_parameterized_types-134"><a href="#remove_precision_parameterized_types-134"><span class="linenos">134</span></a> <span class="p">}</span>
-</span><span id="remove_precision_parameterized_types-135"><a href="#remove_precision_parameterized_types-135"><span class="linenos">135</span></a> <span class="p">)</span>
-</span><span id="remove_precision_parameterized_types-136"><a href="#remove_precision_parameterized_types-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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="remove_precision_parameterized_types-137"><a href="#remove_precision_parameterized_types-137"><span class="linenos">137</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="remove_precision_parameterized_types-138"><a href="#remove_precision_parameterized_types-138"><span class="linenos">138</span></a> <span class="p">)</span>
+</span><span id="remove_precision_parameterized_types-125"><a href="#remove_precision_parameterized_types-125"><span class="linenos">125</span></a> <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">DataType</span><span class="p">):</span>
+</span><span id="remove_precision_parameterized_types-126"><a href="#remove_precision_parameterized_types-126"><span class="linenos">126</span></a> <span class="n">node</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">expressions</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">DataType</span><span class="p">)])</span>
+</span><span id="remove_precision_parameterized_types-127"><a href="#remove_precision_parameterized_types-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -605,28 +575,28 @@ other expressions. This transforms removes the precision from parameterized type
</div>
<a class="headerlink" href="#unnest_to_explode"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="unnest_to_explode-141"><a href="#unnest_to_explode-141"><span class="linenos">141</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</span><span 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="unnest_to_explode-142"><a href="#unnest_to_explode-142"><span class="linenos">142</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert cross join unnest into lateral view explode (used in presto -&gt; hive).&quot;&quot;&quot;</span>
-</span><span id="unnest_to_explode-143"><a href="#unnest_to_explode-143"><span class="linenos">143</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">Select</span><span class="p">):</span>
-</span><span id="unnest_to_explode-144"><a href="#unnest_to_explode-144"><span class="linenos">144</span></a> <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="unnest_to_explode-145"><a href="#unnest_to_explode-145"><span class="linenos">145</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
-</span><span id="unnest_to_explode-146"><a href="#unnest_to_explode-146"><span class="linenos">146</span></a>
-</span><span id="unnest_to_explode-147"><a href="#unnest_to_explode-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="nb">isinstance</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><span id="unnest_to_explode-148"><a href="#unnest_to_explode-148"><span class="linenos">148</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</span><span class="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="unnest_to_explode-149"><a href="#unnest_to_explode-149"><span class="linenos">149</span></a> <span class="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</span><span class="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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span>
-</span><span id="unnest_to_explode-150"><a href="#unnest_to_explode-150"><span class="linenos">150</span></a>
-</span><span id="unnest_to_explode-151"><a href="#unnest_to_explode-151"><span class="linenos">151</span></a> <span class="n">expression</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="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
-</span><span id="unnest_to_explode-152"><a href="#unnest_to_explode-152"><span class="linenos">152</span></a>
-</span><span id="unnest_to_explode-153"><a href="#unnest_to_explode-153"><span class="linenos">153</span></a> <span class="k">for</span> <span class="n">e</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 class="n">unnest</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">columns</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="p">[]):</span>
-</span><span id="unnest_to_explode-154"><a href="#unnest_to_explode-154"><span class="linenos">154</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="unnest_to_explode-155"><a href="#unnest_to_explode-155"><span class="linenos">155</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
-</span><span id="unnest_to_explode-156"><a href="#unnest_to_explode-156"><span class="linenos">156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">(</span>
-</span><span id="unnest_to_explode-157"><a href="#unnest_to_explode-157"><span class="linenos">157</span></a> <span class="n">this</span><span class="o">=</span><span class="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
-</span><span id="unnest_to_explode-158"><a href="#unnest_to_explode-158"><span class="linenos">158</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="unnest_to_explode-159"><a href="#unnest_to_explode-159"><span class="linenos">159</span></a> <span class="n">alias</span><span class="o">=</span><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">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
-</span><span id="unnest_to_explode-160"><a href="#unnest_to_explode-160"><span class="linenos">160</span></a> <span class="p">),</span>
-</span><span id="unnest_to_explode-161"><a href="#unnest_to_explode-161"><span class="linenos">161</span></a> <span class="p">)</span>
-</span><span id="unnest_to_explode-162"><a href="#unnest_to_explode-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="unnest_to_explode-130"><a href="#unnest_to_explode-130"><span class="linenos">130</span></a><span class="k">def</span> <span class="nf">unnest_to_explode</span><span 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="unnest_to_explode-131"><a href="#unnest_to_explode-131"><span class="linenos">131</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert cross join unnest into lateral view explode (used in presto -&gt; hive).&quot;&quot;&quot;</span>
+</span><span id="unnest_to_explode-132"><a href="#unnest_to_explode-132"><span class="linenos">132</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">Select</span><span class="p">):</span>
+</span><span id="unnest_to_explode-133"><a href="#unnest_to_explode-133"><span class="linenos">133</span></a> <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="unnest_to_explode-134"><a href="#unnest_to_explode-134"><span class="linenos">134</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
+</span><span id="unnest_to_explode-135"><a href="#unnest_to_explode-135"><span class="linenos">135</span></a>
+</span><span id="unnest_to_explode-136"><a href="#unnest_to_explode-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="nb">isinstance</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><span id="unnest_to_explode-137"><a href="#unnest_to_explode-137"><span class="linenos">137</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">unnest</span><span class="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="unnest_to_explode-138"><a href="#unnest_to_explode-138"><span class="linenos">138</span></a> <span class="n">udtf</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span> <span class="k">if</span> <span class="n">unnest</span><span class="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="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Explode</span>
+</span><span id="unnest_to_explode-139"><a href="#unnest_to_explode-139"><span class="linenos">139</span></a>
+</span><span id="unnest_to_explode-140"><a href="#unnest_to_explode-140"><span class="linenos">140</span></a> <span class="n">expression</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="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">join</span><span class="p">)</span>
+</span><span id="unnest_to_explode-141"><a href="#unnest_to_explode-141"><span class="linenos">141</span></a>
+</span><span id="unnest_to_explode-142"><a href="#unnest_to_explode-142"><span class="linenos">142</span></a> <span class="k">for</span> <span class="n">e</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 class="n">unnest</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">columns</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="p">[]):</span>
+</span><span id="unnest_to_explode-143"><a href="#unnest_to_explode-143"><span class="linenos">143</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="unnest_to_explode-144"><a href="#unnest_to_explode-144"><span class="linenos">144</span></a> <span class="s2">&quot;laterals&quot;</span><span class="p">,</span>
+</span><span id="unnest_to_explode-145"><a href="#unnest_to_explode-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">(</span>
+</span><span id="unnest_to_explode-146"><a href="#unnest_to_explode-146"><span class="linenos">146</span></a> <span class="n">this</span><span class="o">=</span><span class="n">udtf</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">e</span><span class="p">),</span>
+</span><span id="unnest_to_explode-147"><a href="#unnest_to_explode-147"><span class="linenos">147</span></a> <span class="n">view</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="unnest_to_explode-148"><a href="#unnest_to_explode-148"><span class="linenos">148</span></a> <span class="n">alias</span><span class="o">=</span><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">alias</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">column</span><span class="p">]),</span> <span class="c1"># type: ignore</span>
+</span><span id="unnest_to_explode-149"><a href="#unnest_to_explode-149"><span class="linenos">149</span></a> <span class="p">),</span>
+</span><span id="unnest_to_explode-150"><a href="#unnest_to_explode-150"><span class="linenos">150</span></a> <span class="p">)</span>
+</span><span id="unnest_to_explode-151"><a href="#unnest_to_explode-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -646,65 +616,65 @@ other expressions. This transforms removes the precision from parameterized type
</div>
<a class="headerlink" href="#explode_to_unnest"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="explode_to_unnest-165"><a href="#explode_to_unnest-165"><span class="linenos">165</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</span><span 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="explode_to_unnest-166"><a href="#explode_to_unnest-166"><span class="linenos">166</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert explode/posexplode into unnest (used in hive -&gt; presto).&quot;&quot;&quot;</span>
-</span><span id="explode_to_unnest-167"><a href="#explode_to_unnest-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="explode_to_unnest-168"><a href="#explode_to_unnest-168"><span class="linenos">168</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">build_scope</span>
-</span><span id="explode_to_unnest-169"><a href="#explode_to_unnest-169"><span class="linenos">169</span></a>
-</span><span id="explode_to_unnest-170"><a href="#explode_to_unnest-170"><span class="linenos">170</span></a> <span class="n">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
-</span><span id="explode_to_unnest-171"><a href="#explode_to_unnest-171"><span class="linenos">171</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">build_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">)</span>
-</span><span id="explode_to_unnest-172"><a href="#explode_to_unnest-172"><span class="linenos">172</span></a>
-</span><span id="explode_to_unnest-173"><a href="#explode_to_unnest-173"><span class="linenos">173</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
-</span><span id="explode_to_unnest-174"><a href="#explode_to_unnest-174"><span class="linenos">174</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="explode_to_unnest-154"><a href="#explode_to_unnest-154"><span class="linenos">154</span></a><span class="k">def</span> <span class="nf">explode_to_unnest</span><span 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="explode_to_unnest-155"><a href="#explode_to_unnest-155"><span class="linenos">155</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Convert explode/posexplode into unnest (used in hive -&gt; presto).&quot;&quot;&quot;</span>
+</span><span id="explode_to_unnest-156"><a href="#explode_to_unnest-156"><span class="linenos">156</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">Select</span><span class="p">):</span>
+</span><span id="explode_to_unnest-157"><a href="#explode_to_unnest-157"><span class="linenos">157</span></a> <span class="kn">from</span> <span class="nn">sqlglot.optimizer.scope</span> <span class="kn">import</span> <span class="n">build_scope</span>
+</span><span id="explode_to_unnest-158"><a href="#explode_to_unnest-158"><span class="linenos">158</span></a>
+</span><span id="explode_to_unnest-159"><a href="#explode_to_unnest-159"><span class="linenos">159</span></a> <span class="n">taken_select_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">named_selects</span><span class="p">)</span>
+</span><span id="explode_to_unnest-160"><a href="#explode_to_unnest-160"><span class="linenos">160</span></a> <span class="n">taken_source_names</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">build_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span><span class="o">.</span><span class="n">selected_sources</span><span class="p">)</span>
+</span><span id="explode_to_unnest-161"><a href="#explode_to_unnest-161"><span class="linenos">161</span></a>
+</span><span id="explode_to_unnest-162"><a href="#explode_to_unnest-162"><span class="linenos">162</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">selects</span><span class="p">:</span>
+</span><span id="explode_to_unnest-163"><a href="#explode_to_unnest-163"><span class="linenos">163</span></a> <span class="n">to_replace</span> <span class="o">=</span> <span class="n">select</span>
+</span><span id="explode_to_unnest-164"><a href="#explode_to_unnest-164"><span class="linenos">164</span></a>
+</span><span id="explode_to_unnest-165"><a href="#explode_to_unnest-165"><span class="linenos">165</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="explode_to_unnest-166"><a href="#explode_to_unnest-166"><span class="linenos">166</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="explode_to_unnest-167"><a href="#explode_to_unnest-167"><span class="linenos">167</span></a>
+</span><span id="explode_to_unnest-168"><a href="#explode_to_unnest-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
+</span><span id="explode_to_unnest-169"><a href="#explode_to_unnest-169"><span class="linenos">169</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
+</span><span id="explode_to_unnest-170"><a href="#explode_to_unnest-170"><span class="linenos">170</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="explode_to_unnest-171"><a href="#explode_to_unnest-171"><span class="linenos">171</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
+</span><span id="explode_to_unnest-172"><a href="#explode_to_unnest-172"><span class="linenos">172</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
+</span><span id="explode_to_unnest-173"><a href="#explode_to_unnest-173"><span class="linenos">173</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
+</span><span id="explode_to_unnest-174"><a href="#explode_to_unnest-174"><span class="linenos">174</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
</span><span id="explode_to_unnest-175"><a href="#explode_to_unnest-175"><span class="linenos">175</span></a>
-</span><span id="explode_to_unnest-176"><a href="#explode_to_unnest-176"><span class="linenos">176</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
-</span><span id="explode_to_unnest-177"><a href="#explode_to_unnest-177"><span class="linenos">177</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+</span><span id="explode_to_unnest-176"><a href="#explode_to_unnest-176"><span class="linenos">176</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</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">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
+</span><span id="explode_to_unnest-177"><a href="#explode_to_unnest-177"><span class="linenos">177</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)</span>
</span><span id="explode_to_unnest-178"><a href="#explode_to_unnest-178"><span class="linenos">178</span></a>
-</span><span id="explode_to_unnest-179"><a href="#explode_to_unnest-179"><span class="linenos">179</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
-</span><span id="explode_to_unnest-180"><a href="#explode_to_unnest-180"><span class="linenos">180</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">alias</span>
-</span><span id="explode_to_unnest-181"><a href="#explode_to_unnest-181"><span class="linenos">181</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="explode_to_unnest-182"><a href="#explode_to_unnest-182"><span class="linenos">182</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">):</span>
-</span><span id="explode_to_unnest-183"><a href="#explode_to_unnest-183"><span class="linenos">183</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
-</span><span id="explode_to_unnest-184"><a href="#explode_to_unnest-184"><span class="linenos">184</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">aliases</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">name</span>
-</span><span id="explode_to_unnest-185"><a href="#explode_to_unnest-185"><span class="linenos">185</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="explode_to_unnest-186"><a href="#explode_to_unnest-186"><span class="linenos">186</span></a>
-</span><span id="explode_to_unnest-187"><a href="#explode_to_unnest-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</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">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)):</span>
-</span><span id="explode_to_unnest-188"><a href="#explode_to_unnest-188"><span class="linenos">188</span></a> <span class="n">is_posexplode</span> <span class="o">=</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Posexplode</span><span class="p">)</span>
-</span><span id="explode_to_unnest-189"><a href="#explode_to_unnest-189"><span class="linenos">189</span></a>
-</span><span id="explode_to_unnest-190"><a href="#explode_to_unnest-190"><span class="linenos">190</span></a> <span class="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
-</span><span id="explode_to_unnest-191"><a href="#explode_to_unnest-191"><span class="linenos">191</span></a> <span class="n">unnest</span> <span class="o">=</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="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</span><span class="p">)</span>
+</span><span id="explode_to_unnest-179"><a href="#explode_to_unnest-179"><span class="linenos">179</span></a> <span class="n">explode_arg</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span>
+</span><span id="explode_to_unnest-180"><a href="#explode_to_unnest-180"><span class="linenos">180</span></a> <span class="n">unnest</span> <span class="o">=</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="p">[</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">copy</span><span class="p">()],</span> <span class="n">ordinality</span><span class="o">=</span><span class="n">is_posexplode</span><span class="p">)</span>
+</span><span id="explode_to_unnest-181"><a href="#explode_to_unnest-181"><span class="linenos">181</span></a>
+</span><span id="explode_to_unnest-182"><a href="#explode_to_unnest-182"><span class="linenos">182</span></a> <span class="c1"># This ensures that we won&#39;t use [POS]EXPLODE&#39;s argument as a new selection</span>
+</span><span id="explode_to_unnest-183"><a href="#explode_to_unnest-183"><span class="linenos">183</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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="explode_to_unnest-184"><a href="#explode_to_unnest-184"><span class="linenos">184</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
+</span><span id="explode_to_unnest-185"><a href="#explode_to_unnest-185"><span class="linenos">185</span></a>
+</span><span id="explode_to_unnest-186"><a href="#explode_to_unnest-186"><span class="linenos">186</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">&quot;_u&quot;</span><span class="p">)</span>
+</span><span id="explode_to_unnest-187"><a href="#explode_to_unnest-187"><span class="linenos">187</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</span><span class="p">)</span>
+</span><span id="explode_to_unnest-188"><a href="#explode_to_unnest-188"><span class="linenos">188</span></a>
+</span><span id="explode_to_unnest-189"><a href="#explode_to_unnest-189"><span class="linenos">189</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
+</span><span id="explode_to_unnest-190"><a href="#explode_to_unnest-190"><span class="linenos">190</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">)</span>
+</span><span id="explode_to_unnest-191"><a href="#explode_to_unnest-191"><span class="linenos">191</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">)</span>
</span><span id="explode_to_unnest-192"><a href="#explode_to_unnest-192"><span class="linenos">192</span></a>
-</span><span id="explode_to_unnest-193"><a href="#explode_to_unnest-193"><span class="linenos">193</span></a> <span class="c1"># This ensures that we won&#39;t use [POS]EXPLODE&#39;s argument as a new selection</span>
-</span><span id="explode_to_unnest-194"><a href="#explode_to_unnest-194"><span class="linenos">194</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">explode_arg</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="explode_to_unnest-195"><a href="#explode_to_unnest-195"><span class="linenos">195</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_arg</span><span class="o">.</span><span class="n">output_name</span><span class="p">)</span>
+</span><span id="explode_to_unnest-193"><a href="#explode_to_unnest-193"><span class="linenos">193</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
+</span><span id="explode_to_unnest-194"><a href="#explode_to_unnest-194"><span class="linenos">194</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;pos&quot;</span><span class="p">)</span>
+</span><span id="explode_to_unnest-195"><a href="#explode_to_unnest-195"><span class="linenos">195</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
</span><span id="explode_to_unnest-196"><a href="#explode_to_unnest-196"><span class="linenos">196</span></a>
-</span><span id="explode_to_unnest-197"><a href="#explode_to_unnest-197"><span class="linenos">197</span></a> <span class="n">unnest_source_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_source_names</span><span class="p">,</span> <span class="s2">&quot;_u&quot;</span><span class="p">)</span>
-</span><span id="explode_to_unnest-198"><a href="#explode_to_unnest-198"><span class="linenos">198</span></a> <span class="n">taken_source_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">unnest_source_alias</span><span class="p">)</span>
-</span><span id="explode_to_unnest-199"><a href="#explode_to_unnest-199"><span class="linenos">199</span></a>
-</span><span id="explode_to_unnest-200"><a href="#explode_to_unnest-200"><span class="linenos">200</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">explode_alias</span><span class="p">:</span>
-</span><span id="explode_to_unnest-201"><a href="#explode_to_unnest-201"><span class="linenos">201</span></a> <span class="n">explode_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;col&quot;</span><span class="p">)</span>
-</span><span id="explode_to_unnest-202"><a href="#explode_to_unnest-202"><span class="linenos">202</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">)</span>
-</span><span id="explode_to_unnest-203"><a href="#explode_to_unnest-203"><span class="linenos">203</span></a>
-</span><span id="explode_to_unnest-204"><a href="#explode_to_unnest-204"><span class="linenos">204</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
-</span><span id="explode_to_unnest-205"><a href="#explode_to_unnest-205"><span class="linenos">205</span></a> <span class="n">pos_alias</span> <span class="o">=</span> <span class="n">find_new_name</span><span class="p">(</span><span class="n">taken_select_names</span><span class="p">,</span> <span class="s2">&quot;pos&quot;</span><span class="p">)</span>
-</span><span id="explode_to_unnest-206"><a href="#explode_to_unnest-206"><span class="linenos">206</span></a> <span class="n">taken_select_names</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">)</span>
-</span><span id="explode_to_unnest-207"><a href="#explode_to_unnest-207"><span class="linenos">207</span></a>
-</span><span id="explode_to_unnest-208"><a href="#explode_to_unnest-208"><span class="linenos">208</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
-</span><span id="explode_to_unnest-209"><a href="#explode_to_unnest-209"><span class="linenos">209</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
-</span><span id="explode_to_unnest-210"><a href="#explode_to_unnest-210"><span class="linenos">210</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="explode_to_unnest-211"><a href="#explode_to_unnest-211"><span class="linenos">211</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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="explode_to_unnest-212"><a href="#explode_to_unnest-212"><span class="linenos">212</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="explode_to_unnest-213"><a href="#explode_to_unnest-213"><span class="linenos">213</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
-</span><span id="explode_to_unnest-214"><a href="#explode_to_unnest-214"><span class="linenos">214</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">))</span>
-</span><span id="explode_to_unnest-215"><a href="#explode_to_unnest-215"><span class="linenos">215</span></a>
-</span><span id="explode_to_unnest-216"><a href="#explode_to_unnest-216"><span class="linenos">216</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</span><span class="p">)</span>
-</span><span id="explode_to_unnest-217"><a href="#explode_to_unnest-217"><span class="linenos">217</span></a>
-</span><span id="explode_to_unnest-218"><a href="#explode_to_unnest-218"><span class="linenos">218</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;from&quot;</span><span class="p">):</span>
-</span><span id="explode_to_unnest-219"><a href="#explode_to_unnest-219"><span class="linenos">219</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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="explode_to_unnest-220"><a href="#explode_to_unnest-220"><span class="linenos">220</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="explode_to_unnest-221"><a href="#explode_to_unnest-221"><span class="linenos">221</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">&quot;CROSS&quot;</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="explode_to_unnest-222"><a href="#explode_to_unnest-222"><span class="linenos">222</span></a>
-</span><span id="explode_to_unnest-223"><a href="#explode_to_unnest-223"><span class="linenos">223</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="explode_to_unnest-197"><a href="#explode_to_unnest-197"><span class="linenos">197</span></a> <span class="k">if</span> <span class="n">is_posexplode</span><span class="p">:</span>
+</span><span id="explode_to_unnest-198"><a href="#explode_to_unnest-198"><span class="linenos">198</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">,</span> <span class="n">pos_alias</span><span class="p">]</span>
+</span><span id="explode_to_unnest-199"><a href="#explode_to_unnest-199"><span class="linenos">199</span></a> <span class="n">to_replace</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="explode_to_unnest-200"><a href="#explode_to_unnest-200"><span class="linenos">200</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">pos_alias</span><span class="p">,</span> <span class="n">explode_alias</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="explode_to_unnest-201"><a href="#explode_to_unnest-201"><span class="linenos">201</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="explode_to_unnest-202"><a href="#explode_to_unnest-202"><span class="linenos">202</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">explode_alias</span><span class="p">]</span>
+</span><span id="explode_to_unnest-203"><a href="#explode_to_unnest-203"><span class="linenos">203</span></a> <span class="n">to_replace</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">column</span><span class="p">(</span><span class="n">explode_alias</span><span class="p">))</span>
+</span><span id="explode_to_unnest-204"><a href="#explode_to_unnest-204"><span class="linenos">204</span></a>
+</span><span id="explode_to_unnest-205"><a href="#explode_to_unnest-205"><span class="linenos">205</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">unnest_source_alias</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">column_names</span><span class="p">)</span>
+</span><span id="explode_to_unnest-206"><a href="#explode_to_unnest-206"><span class="linenos">206</span></a>
+</span><span id="explode_to_unnest-207"><a href="#explode_to_unnest-207"><span class="linenos">207</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;from&quot;</span><span class="p">):</span>
+</span><span id="explode_to_unnest-208"><a href="#explode_to_unnest-208"><span class="linenos">208</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">unnest</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="explode_to_unnest-209"><a href="#explode_to_unnest-209"><span class="linenos">209</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="explode_to_unnest-210"><a href="#explode_to_unnest-210"><span class="linenos">210</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="n">join_type</span><span class="o">=</span><span class="s2">&quot;CROSS&quot;</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="explode_to_unnest-211"><a href="#explode_to_unnest-211"><span class="linenos">211</span></a>
+</span><span id="explode_to_unnest-212"><a href="#explode_to_unnest-212"><span class="linenos">212</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -724,22 +694,22 @@ other expressions. This transforms removes the precision from parameterized type
</div>
<a class="headerlink" href="#remove_target_from_merge"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="remove_target_from_merge-226"><a href="#remove_target_from_merge-226"><span class="linenos">226</span></a><span class="k">def</span> <span class="nf">remove_target_from_merge</span><span 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="remove_target_from_merge-227"><a href="#remove_target_from_merge-227"><span class="linenos">227</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove table refs from columns in when statements.&quot;&quot;&quot;</span>
-</span><span id="remove_target_from_merge-228"><a href="#remove_target_from_merge-228"><span class="linenos">228</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">Merge</span><span class="p">):</span>
-</span><span id="remove_target_from_merge-229"><a href="#remove_target_from_merge-229"><span class="linenos">229</span></a> <span class="n">alias</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">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="remove_target_from_merge-230"><a href="#remove_target_from_merge-230"><span class="linenos">230</span></a> <span class="n">targets</span> <span class="o">=</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><span id="remove_target_from_merge-231"><a href="#remove_target_from_merge-231"><span class="linenos">231</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="remove_target_from_merge-232"><a href="#remove_target_from_merge-232"><span class="linenos">232</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</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="remove_target_from_merge-233"><a href="#remove_target_from_merge-233"><span class="linenos">233</span></a>
-</span><span id="remove_target_from_merge-234"><a href="#remove_target_from_merge-234"><span class="linenos">234</span></a> <span class="k">for</span> <span class="n">when</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="remove_target_from_merge-235"><a href="#remove_target_from_merge-235"><span class="linenos">235</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
-</span><span id="remove_target_from_merge-236"><a href="#remove_target_from_merge-236"><span class="linenos">236</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="remove_target_from_merge-237"><a href="#remove_target_from_merge-237"><span class="linenos">237</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">node</span><span class="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 class="ow">in</span> <span class="n">targets</span>
-</span><span id="remove_target_from_merge-238"><a href="#remove_target_from_merge-238"><span class="linenos">238</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
-</span><span id="remove_target_from_merge-239"><a href="#remove_target_from_merge-239"><span class="linenos">239</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="remove_target_from_merge-240"><a href="#remove_target_from_merge-240"><span class="linenos">240</span></a> <span class="p">)</span>
-</span><span id="remove_target_from_merge-241"><a href="#remove_target_from_merge-241"><span class="linenos">241</span></a> <span class="k">return</span> <span class="n">expression</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="remove_target_from_merge-215"><a href="#remove_target_from_merge-215"><span class="linenos">215</span></a><span class="k">def</span> <span class="nf">remove_target_from_merge</span><span 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="remove_target_from_merge-216"><a href="#remove_target_from_merge-216"><span class="linenos">216</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Remove table refs from columns in when statements.&quot;&quot;&quot;</span>
+</span><span id="remove_target_from_merge-217"><a href="#remove_target_from_merge-217"><span class="linenos">217</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">Merge</span><span class="p">):</span>
+</span><span id="remove_target_from_merge-218"><a href="#remove_target_from_merge-218"><span class="linenos">218</span></a> <span class="n">alias</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">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="remove_target_from_merge-219"><a href="#remove_target_from_merge-219"><span class="linenos">219</span></a> <span class="n">targets</span> <span class="o">=</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><span id="remove_target_from_merge-220"><a href="#remove_target_from_merge-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="remove_target_from_merge-221"><a href="#remove_target_from_merge-221"><span class="linenos">221</span></a> <span class="n">targets</span><span class="o">.</span><span class="n">add</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="remove_target_from_merge-222"><a href="#remove_target_from_merge-222"><span class="linenos">222</span></a>
+</span><span id="remove_target_from_merge-223"><a href="#remove_target_from_merge-223"><span class="linenos">223</span></a> <span class="k">for</span> <span class="n">when</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="remove_target_from_merge-224"><a href="#remove_target_from_merge-224"><span class="linenos">224</span></a> <span class="n">when</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
+</span><span id="remove_target_from_merge-225"><a href="#remove_target_from_merge-225"><span class="linenos">225</span></a> <span class="k">lambda</span> <span class="n">node</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">node</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="remove_target_from_merge-226"><a href="#remove_target_from_merge-226"><span class="linenos">226</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</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">node</span><span class="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 class="ow">in</span> <span class="n">targets</span>
+</span><span id="remove_target_from_merge-227"><a href="#remove_target_from_merge-227"><span class="linenos">227</span></a> <span class="k">else</span> <span class="n">node</span><span class="p">,</span>
+</span><span id="remove_target_from_merge-228"><a href="#remove_target_from_merge-228"><span class="linenos">228</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="remove_target_from_merge-229"><a href="#remove_target_from_merge-229"><span class="linenos">229</span></a> <span class="p">)</span>
+</span><span id="remove_target_from_merge-230"><a href="#remove_target_from_merge-230"><span class="linenos">230</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -759,27 +729,27 @@ other expressions. This transforms removes the precision from parameterized type
</div>
<a class="headerlink" href="#preprocess"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="preprocess-244"><a href="#preprocess-244"><span class="linenos">244</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
-</span><span id="preprocess-245"><a href="#preprocess-245"><span class="linenos">245</span></a> <span class="n">transforms</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">Callable</span><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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
-</span><span id="preprocess-246"><a href="#preprocess-246"><span class="linenos">246</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">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
-</span><span id="preprocess-247"><a href="#preprocess-247"><span class="linenos">247</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="preprocess-248"><a href="#preprocess-248"><span class="linenos">248</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
-</span><span id="preprocess-249"><a href="#preprocess-249"><span class="linenos">249</span></a><span class="sd"> expression to SQL, using an appropriate `Generator.TRANSFORMS` function.</span>
-</span><span id="preprocess-250"><a href="#preprocess-250"><span class="linenos">250</span></a>
-</span><span id="preprocess-251"><a href="#preprocess-251"><span class="linenos">251</span></a><span class="sd"> Args:</span>
-</span><span id="preprocess-252"><a href="#preprocess-252"><span class="linenos">252</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
-</span><span id="preprocess-253"><a href="#preprocess-253"><span class="linenos">253</span></a>
-</span><span id="preprocess-254"><a href="#preprocess-254"><span class="linenos">254</span></a><span class="sd"> Returns:</span>
-</span><span id="preprocess-255"><a href="#preprocess-255"><span class="linenos">255</span></a><span class="sd"> Function that can be used as a generator transform.</span>
-</span><span id="preprocess-256"><a href="#preprocess-256"><span class="linenos">256</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="preprocess-257"><a href="#preprocess-257"><span class="linenos">257</span></a>
-</span><span id="preprocess-258"><a href="#preprocess-258"><span class="linenos">258</span></a> <span class="k">def</span> <span class="nf">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="preprocess-259"><a href="#preprocess-259"><span class="linenos">259</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</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">copy</span><span class="p">())</span>
-</span><span id="preprocess-260"><a href="#preprocess-260"><span class="linenos">260</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
-</span><span id="preprocess-261"><a href="#preprocess-261"><span class="linenos">261</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="preprocess-262"><a href="#preprocess-262"><span class="linenos">262</span></a> <span class="k">return</span> <span class="nb">getattr</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">key</span> <span class="o">+</span> <span class="s2">&quot;_sql&quot;</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="preprocess-263"><a href="#preprocess-263"><span class="linenos">263</span></a>
-</span><span id="preprocess-264"><a href="#preprocess-264"><span class="linenos">264</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="preprocess-233"><a href="#preprocess-233"><span class="linenos">233</span></a><span class="k">def</span> <span class="nf">preprocess</span><span class="p">(</span>
+</span><span id="preprocess-234"><a href="#preprocess-234"><span class="linenos">234</span></a> <span class="n">transforms</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">Callable</span><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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span>
+</span><span id="preprocess-235"><a href="#preprocess-235"><span class="linenos">235</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">Expression</span><span class="p">],</span> <span class="nb">str</span><span class="p">]:</span>
+</span><span id="preprocess-236"><a href="#preprocess-236"><span class="linenos">236</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="preprocess-237"><a href="#preprocess-237"><span class="linenos">237</span></a><span class="sd"> Creates a new transform by chaining a sequence of transformations and converts the resulting</span>
+</span><span id="preprocess-238"><a href="#preprocess-238"><span class="linenos">238</span></a><span class="sd"> expression to SQL, using an appropriate `Generator.TRANSFORMS` function.</span>
+</span><span id="preprocess-239"><a href="#preprocess-239"><span class="linenos">239</span></a>
+</span><span id="preprocess-240"><a href="#preprocess-240"><span class="linenos">240</span></a><span class="sd"> Args:</span>
+</span><span id="preprocess-241"><a href="#preprocess-241"><span class="linenos">241</span></a><span class="sd"> transforms: sequence of transform functions. These will be called in order.</span>
+</span><span id="preprocess-242"><a href="#preprocess-242"><span class="linenos">242</span></a>
+</span><span id="preprocess-243"><a href="#preprocess-243"><span class="linenos">243</span></a><span class="sd"> Returns:</span>
+</span><span id="preprocess-244"><a href="#preprocess-244"><span class="linenos">244</span></a><span class="sd"> Function that can be used as a generator transform.</span>
+</span><span id="preprocess-245"><a href="#preprocess-245"><span class="linenos">245</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="preprocess-246"><a href="#preprocess-246"><span class="linenos">246</span></a>
+</span><span id="preprocess-247"><a href="#preprocess-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">_to_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="preprocess-248"><a href="#preprocess-248"><span class="linenos">248</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">transforms</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">copy</span><span class="p">())</span>
+</span><span id="preprocess-249"><a href="#preprocess-249"><span class="linenos">249</span></a> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">transforms</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
+</span><span id="preprocess-250"><a href="#preprocess-250"><span class="linenos">250</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">t</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="preprocess-251"><a href="#preprocess-251"><span class="linenos">251</span></a> <span class="k">return</span> <span class="nb">getattr</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">key</span> <span class="o">+</span> <span class="s2">&quot;_sql&quot;</span><span class="p">)(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="preprocess-252"><a href="#preprocess-252"><span class="linenos">252</span></a>
+</span><span id="preprocess-253"><a href="#preprocess-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="n">_to_sql</span>
</span></pre></div>